Как получить эквивалент точности в Google Map Geocoder V3 - PullRequest
3 голосов
/ 10 июня 2010

Я хочу получить геокод из Google, и я делал это с V2 API. Google отправляет в JSON довольно хорошую информацию, точность, ссылка здесь: http://code.google.com/intl/fr-FR/apis/maps/documentation/javascript/v2/reference.html#GGeoAddressAccuracy

В V3 Google, похоже, не посылает мне точно такую ​​же информацию. Есть массив «adresse_component», который кажется больше, если точность лучше, но не совсем. Например, у меня есть запрос на точность номера улицы, массив размером 8. Другой запрос - это точность маршрута, поэтому меньше точности, но массив все еще имеет размер 8, так как есть строка «sublocality», которая не появляется в первом случае.

Хорошо, для результата Google отправляет данные «типов», которые имеют «наилучшую» точность. Это типы здесь: http://code.google.com/intl/fr-FR/apis/maps/documentation/geocoding/#Types Но реального порядка нет, и если я не хочу получить результат лучше, чем postal_code, я понятия не имею, как это сделать.

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

Ответы [ 2 ]

9 голосов
/ 14 июня 2010

Ну, есть тип местоположения , что не так уж и плохо:

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

«ROOFTOP» указывает, что возвращаемый результат является точным геокодом, для которого у нас есть информация о местоположении с точностью до уличного адреса.

«RANGE_INTERPOLATED» указывает, что возвращаемый результат отражает приближение (обычно на дороге), интерполированное между двумя точными точками (такими как пересечения).Интерполированные результаты обычно возвращаются, когда геокоды на крыше недоступны для адреса улицы.

«GEOMETRIC_CENTER» указывает, что возвращаемый результат является геометрическим центром результата, такого как ломаная линия (например, улица) или многоугольник (регион).возвращаемый результат является приблизительным.

Я проверяю, отличается ли location_type от приблизительного, и он дает хорошие результаты.

6 голосов
/ 16 марта 2013

Поскольку Google отказывается от API Geocoding v2 в конце этого года, будет масса людей, перенесших свою логику геокодирования в v3, и этот самый вопрос возникнет: как сопоставить строку 'location_type' с эквивалентной 'точность '?

Вот достойное отображение:

"ROOFTOP" -> 9
[Everything else] -> 4 to 8 (aka the text string might as well read "GARBAGE")

Если указано что-то отличное от ROOFTOP, используйте area для' северо-востока 'и' юго-запада ', чтобы решитьесли он достаточно точен для вас.

Что же произойдет, если вы не получите что-то "точное"?Запустите запрос текстового поиска Google Адресов для того же адреса.Google Places также выполняет геокодирование, и с включенным биллингом вы можете получать 10 000 запросов текстового поиска в Places в день (без ограничения скорости), и Google заявляет, что не будет снимать средства с карты (предположительно, они просто используют ее для проверки аккаунта).С помощью Billing вы получаете 100 000 запросов, но при поиске текстового поиска в Places «стоимость» в 10 раз превышает сумму обычного запроса Places, следовательно, вышеупомянутый лимит в 10 000.Места могут быть привередливыми, и вы должны рассматривать ответы только с одним результатом.

Иногда запросы мест не возвращают почтовый индекс, особенно если он не отправлен.Если вам нужен почтовый индекс, возьмите результаты lat / lng запроса Places и отправьте его обратно в геокодер, который обычно выдаст адрес с почтовым индексом (и очень часто совпадает с ROOFTOP).

ItСледует отметить, что официальный лимит вежливости API геокодирования составляет 2500 запросов в день с лимитом скорости один в секунду на IP-адрес.Следовательно, следование приведенной выше формуле, вероятно, приведет к уменьшению и даже вдвое уменьшит количество доступных вам геокодировок.

Если вам нужно больше, чем предел геокодирования Google (а кому нет?), Придумайте свой собственный сервис мини-геокодированияс чем-то вроде базы данных OpenStreetMap.Клонируйте нужные вам части OpenStreetMap и напишите собственный геокодер (или используйте библиотеку).Тогда вы можете геокодировать до вашего сердца без ограничения количества или скорости.Если вы по-прежнему используете Карты Google, вы можете использовать геокодер Google в качестве запасного варианта, если геокодер OSM не будет достаточно точным для всех случаев.

В качестве альтернативы, если вы доверяете своим пользователям не предоставлять фиктивные данные (на самом деле?) ИПри необходимости использовать службу геокодирования Google, вы также можете злоупотреблять веб-браузером пользователя, имея для вас информацию о геокодировании браузера, а затем передавать результаты на свой сервер.Вы можете прорваться через дневной лимит пользователя и рискнуть, чтобы кто-то выдал фиктивные данные, но если вы идете ко всем этим неприятностям, вас это действительно волнует?

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

...