API геокодирования Google Maps – смещение страны, причудливые результаты

Я подключаюсь к 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 , я получаю только одно из двадцати семи местностей, без всякой видимой причины – это не самый большой и не самый точный , а также не имеет каких-либо других уникальных характеристик.

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

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

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

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

  1. Вы используете старую версию API геокодирования V2 , которую недавно отвергли 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> 

В этом списке насчитывается шестнадцать Neustadts, что может быть лучше, чем шесть Google. 🙂

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

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

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