Google Maps Geocoding API - странное смещение, странные результаты - PullRequest
4 голосов
/ 19 мая 2010

Я подключаюсь к API Карт Google из PHP, чтобы геокодировать некоторые отправные точки для приложения поиска станции проката.

Эти отправные точки не должны быть точными адресами; достаточно названия городов. Ответы геокодирования с accuracy, равным или больше 4 (уровень города / населенного пункта), используются в качестве отправных точек, и при этом производится поиск окружающих пунктов проката.

Приложение должно работать в Германии. Когда название населенного пункта неоднозначно (то есть существует более одного места с таким названием), я хочу отобразить список возможностей.

В общем, это не проблема: если вы выполняете неоднозначный поиск, вывод XML Google возвращает список <PlaceMark> элементов вместо одного.

Очевидно, мне нужно сместить геокодирование в сторону Германии, поэтому, если кто-то вводит почтовый индекс или название населенного пункта, который существует и в других странах, на самом деле появляются только совпадения в Германии.

Я думал, что смогу добиться этого, добавив , de или , Deutschland к поисковому запросу. Это работает в основном нормально, но в некоторых случаях дает странные и невыносимые результаты.

Например, в Германии есть 27 населенных пунктов с именем Neustadt. ( Википедия )

Когда я ищу только Neustadt:

http://maps.google.com/maps/geo/hl=de&output=xml&key=xyz&q=Neustadt

Я получаю по крайней мере шесть из них, с которыми я мог бы жить (возможно, что другие не включены, или части другой местности, или что-то еще).

Когда, однако, я ищу Neustadt, de, или Neustadt, Deutschland, или Neustadt, Germany, я получаю только одну из двадцати семи населенных пунктов, без видимой причины - это не самый большой и не самый точный accuracy, а также не имеет никаких других уникальных характеристик.

Кто-нибудь знает, почему это так, и что я могу с этим поделать?

Я попробовал параметр region, но безрезультатно - когда я не использую , de, почтовые индексы (например, 50825 будут разрешены для их аналогов в США, а не в Германии.

Моя текущая обходная идея - добавить название страны, когда ввод только числовой, и в противном случае отфильтровать только немецкие результаты, но это звучит ужасно глупо. Кто-нибудь знает лучший способ?

Ответы [ 3 ]

2 голосов
/ 19 мая 2010

Это определенно не исчерпывающий ответ, а всего лишь несколько примечаний:

  1. Вы используете старую версию V2 API геокодирования , которую Google недавно осудил в пользу нового V3 API . Google предлагает использовать новый сервис с этого момента, и, хотя у меня нет реального опыта работы с новой версией, кажется, что они улучшили сервис в различных аспектах, особенно со структурой ответа. Вам не нужен ключ API для использования нового сервиса, и вам просто нужно использовать немного другой URL:

    http://maps.google.com/maps/api/geocode/xml?address=Neustadt&sensor=false

  2. Вы упомянули, что фильтровали метки по их свойству точности. Обратите внимание, что это поле больше не появляется в результатах нового API геокодирования, но, в любом случае, я думаю, что оно все еще не очень надежно в старом API.

  3. Возможно, вы захотите использовать параметры bounds и region нового API, но я все еще сомневаюсь, что они решат вашу проблему.

Я считаю, что Google Geocoder является отличным инструментом, когда вы даете ему полный адрес, по крайней мере, в формате "улица, местность, страна", и он также очень надежен в других форматах, когда он не должен разобраться с любыми неясностями (геокодирование "Лондон, Великобритания" всегда работало на меня).

Тем не менее, в вашем случае, я бы действительно подумал о том, чтобы предварительно вычислить все координаты каждого немецкого населенного пункта и просто обработал бы геокодирование самостоятельно из вашей базы данных. Я думаю, что это вполне осуществимо, тем более что ваше приложение локализовано только в одной стране. Каждый город в Википедии "Список немецких городов" , кажется, хранит координаты внутри аккуратного маленького <span>, который очень легко разобрать:

<span class="geo">47.84556; 8.85167</span>

В этом списке шестнадцать Нойштадтов, что может быть лучше, чем у шести Google:)

1 голос
/ 27 января 2012

найдено, что автозаполнение Google работает лучше, чем их геокод

http://code.google.com/apis/maps/documentation/javascript/places.html#places_autocomplete

0 голосов
/ 27 октября 2016

Нашел этот вопрос в поисках именно этой проблемы. Тогда понял, что Bing Maps API работает намного лучше. У этого есть свои причуды все же. Например, если вы передадите код аэропорта, он покажет вам 6 различных решений, каждое из которых соответствует каждому терминалу аэропорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...