Как исключить маршруты из результата геокода? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь получить адрес и адрес британского адреса, который я отправляю через форму.Адресом может быть полный адрес, или город, или почтовый индекс, или первая часть почтового индекса.

Большинство запросов геокодирования, кажется, дают мне правильный вывод, однако, если я пытаюсь найти M25,геокод дает мне неправильные результаты, так как считает, что это лондонская автомагистраль, хотя я на самом деле пытаюсь найти область в Манчестере.

Есть ли способ исключить поиск по автомагистралям?

Мойcode:

public function get_geocode($address) {
        $url = 'https://maps.googleapis.com/maps/api/geocode/json?address='.$address.',uk&key='.theme_option('theme_options','theme_options_google_api_key');
            $data = @file_get_contents($url);
        $jsondata = json_decode($data,true);
        if (!$this->get_geocode_check_status($jsondata))   return array();
        $location = array(
            'lat' => $jsondata["results"][0]["geometry"]["location"]["lat"],
            'lng' => $jsondata["results"][0]["geometry"]["location"]["lng"],
        );
        return $location;
    }

Значение lat и lng, сгенерированное из приведенного выше кода, будет добавлено в запрос sql для получения ближайших местоположений, хранящихся в моей базе данных.

1 Ответ

0 голосов
/ 07 июня 2019

Вы отправляете только почтовый индекс с префиксом M5?В этом случае запрос является слишком неоднозначным, и служба геокодирования плохо работает с неоднозначными запросами.Если вы укажете что-то более точное, оно будет работать (например, M5 4GP, Великобритания)

https://maps.googleapis.com/maps/api/geocode/json?address=M5%204GP%2C%20UK&key=YOUR_API_KEY

Также обратите внимание, что я добавил Великобританию в текст поиска, чтобы сместить результаты в сторону Великобритании.

В вашем случае, когда у вас есть только префикс почтового индекса M5, я бы предложил использовать запрос автозаполнения в качестве обходного пути.Он вернет несколько предложений, и вы можете отфильтровать предложения, имеющие тип «postal_code_prefix» или «postal_code».Например, запрос «M5, UK»

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=M5%2C%20UK&key=YOUR_API_KEY

возвращает 5 предложений, одно из которых имеет тип «postal_code_prefix»

{
  "description":"Salford M5, UK",
  "id":"6cea0bf4efcd39449020500f97a2352cdfd13457",
  "matched_substrings":[
    {
      "length":2,
      "offset":8
    },
    {
      "length":2,
      "offset":12
    }
  ],
  "place_id":"ChIJEVdF_g2ue0gRXkpo4zmLlQM",
  "reference":"ChIJEVdF_g2ue0gRXkpo4zmLlQM",
  "structured_formatting":{
    "main_text":"M5",
    "main_text_matched_substrings":[
      {
        "length":2,
        "offset":0
      }
    ],
    "secondary_text":"Salford, UK",
    "secondary_text_matched_substrings":[
      {
        "length":2,
        "offset":9
      }
    ]
  },
  "terms":[
    {
      "offset":0,
      "value":"Salford"
    },
    {
      "offset":8,
      "value":"M5"
    },
    {
      "offset":12,
      "value":"UK"
    }
  ],
  "types":[
    "postal_code_prefix","postal_code","geocode"
  ]
},

После фильтрацииэтот результат и получил идентификатор места ChIJEVdF_g2ue0gRXkpo4zmLlQM, вы можете повернуть его геокодированием, чтобы получить координаты

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJEVdF_g2ue0gRXkpo4zmLlQM&key=YOUR_API_KEY

Посмотрите на этот результат в инструменте геокодера:

https://google -developers.appspot.com / карты / документация / utils / geocoder / # place_id% 3DChIJEVdF_g2ue0gRXkpo4zmLlQM

Надеюсь, это поможет!

...