Ограничение запроса геокодирования Карт Google по округам? - PullRequest
0 голосов
/ 03 мая 2018

Я использую JavaScript API, но не могу заставить его работать с CURL API.

Проблема: я хотел бы ограничить результаты геокодирования округом + штат. Фильтрация компонента API геокодирования Google Карт больше не распознает administrativeArea в формате "San Mateo County, CA" (работал ранее) и не распознает "San Mateo County", хотя это определенно administrative_area_level_2 в соответствии с объектом результатов.

Например, "https://maps.googleapis.com/maps/api/geocode/json?address=oakland&components=country:US|administrative_area:San+Mateo+County&key=YOUR_KEY_HERE" возвращает результат для Окленда, даже если он находится в округе Аламеда, а не в округе Сан-Матео. Использование "San Mateo County, CA" также полностью игнорируется. Выполнение components=country:US|administrative_area:San+Mateo+County|adminstrative_area:CA аналогичным образом не работает (и в любом случае, насколько я знаю, с JS API).

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

Если вы хотите использовать API, вот скрипта JS, которая позволяет: https://jsfiddle.net/Lzj1uvfd/

1 Ответ

0 голосов
/ 25 июня 2018

Произошло изменение в фильтрации компонентов API геокодирования еще в январе 2018 года. После этого изменения только фильтры почтового индекса и страны работают как строгий фильтр, маршрут, местность и область администрирования не являются строгими фильтрами и влияют только на результаты.

Google отправил уведомление об этом изменении клиентам Премиум-плана. Я делюсь копией этого письма здесь

Клиент Премиум-плана API Карт Google,

Предстоящие улучшения качества в службах геокодирования Карт Google потребуют, чтобы функция фильтрации компонентов API геокодирования стала менее строгой. Это вступит в силу 16 января 2018 года.

В то же время мы предоставляем тестовый параметр в веб-службе API геокодирования, чтобы вы могли увидеть, повлияет ли это изменение на ваши запросы геокодирования, используя функцию фильтрации компонентов. Чтобы использовать параметр, добавьте relax_components = true к вашим запросам.

Этот тестовый параметр будет доступен до 16 января 2018 года. После этой даты параметр будет игнорироваться, но запросы, использующие этот параметр, будут по-прежнему приниматься. Нет эквивалента JavaScript.

Улучшения качества обеспечат более качественные результаты для запросов, которые стремятся найти действительные адреса. Однако следующие операторы больше не будут применяться к функции фильтрации компонентов: Запрос, содержащий фильтр компонента, возвращает только те результаты геокодирования, которые соответствуют фильтру. Если совпадений не найдено, геокодер возвращает результат, соответствующий самому фильтру. Компонентная фильтрация вернет ответ ZERO_RESULTS, только если вы предоставите фильтры, исключающие друг друга.

Фильтры для почтовых индексов и кодов стран будут по-прежнему применяться строго для всех запросов.

Примеры

Адрес, который не содержится строго в фильтре локальности (Spring Valley, NV), но находится рядом (в Paradise, NV), будет найден вместо менее конкретного результата, точно соответствующего фильтру локальности:

Пример запроса № 1: адрес = 4755 + W + Фламинго + Rd & components = location: Spring + Valley | страна: США Текущий результат: "W Flamingo Rd, Spring Valley, NV, USA" (маршрут, частичное совпадение) Будущий результат: "4755 Вт Flamingo Rd, Лас-Вегас, Невада 89103, США" (предпосылка)

Вместо ZERO_RESULTS может быть возвращен результат в другой местности, если в противном случае фильтр местности сформировал бы несуществующий адрес:

Пример запроса № 2: компоненты = местность: Монреаль + озеро + заповедник | административный район: Саскачеван | страна: CA Текущий результат: ZERO_RESULTS Будущий результат: "Озеро Монреаль, SK S0J 1Y0, Канада" (учреждение)

Пример запроса № 3: компоненты = страна: США | местонахождение: друзья + заводь + охрана + область + cisco | административная зона: IL Текущий результат: ZERO_RESULTS Будущий результат: «Заповедник Friends Creek, 13734 Friends Creek Park Rd, Cisco, IL 61830, США» (парк)

Взаимоисключающие фильтры больше не гарантируют ZERO_RESULTS. Это уже имело место с тех пор, как 3 апреля 2017 года старый форвардный геокодер был окончательно удален. Предстоящие изменения сделают это чаще, например. когда фильтр administrator_area предпочтительнее фильтра локальности:

Пример запроса № 4: адрес = Müslistrasse + 16 & компоненты = местность: Шпрайтенбах | административный район: ZH | страна: CH Текущий результат: ZERO_RESULTS Будущий результат: "Muslistrasse 16, 8820 Wädenswil, Switzerland" (street_address)

Неверный адрес, который никогда не был найден, больше не будет давать результат, соответствующий самому фильтру. Это может привести либо к ZERO_RESULTS, либо к одному или нескольким действительным адресам, которые соответствуют некоторым фильтрам.

Пример запроса № 5: адрес = 13 + Rue + del + Percebe & components = location: Sydney | страна: AU Текущий результат: "Sydney NSW 2000, Australia" (населенный пункт) Будущий результат: ZERO_RESULTS

Пример запроса № 6: адрес = Сезам + St & компоненты = населенный пункт: Сидней | страна: AU Текущий результат: "Sydney NSW 2000, Australia" (населенный пункт) Будущий результат: «Улица Сезам, VIC, Маунт-Уэверли, 3149, Австралия» (маршрут) и еще 2

В редких случаях действительный адрес больше не может быть найден для данного значения фильтров.

Пример запроса № 7: адрес = Фуэртевентура и компоненты = местность: Альмерия | административная зона: AL | страна: ES Текущий результат: "Калле Исла де Фуэртевентура, 04007 Альмерия, Испания" (маршрут) Будущий результат: ZERO_RESULTS

С уважением, Команда API Карт Google

Надеюсь, эта информация поможет!

...