Руководства

Нормализация неаккуратного ввода адреса перед геокодированием

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

Что очистить перед отправкой

Удалите пробелы в начале и в конце и замените повторяющиеся пробелы одним. Удалите управляющие символы и случайную пунктуацию, которая явно не относится к адресу. Само содержимое адреса оставьте как есть, поскольку эндпоинт прямого геокодирования рассчитан на разбор свободного текста, и вам не нужно самостоятельно разбивать его на отдельные поля улицы, города и почтового индекса.

GET /v1/forward?q=221b   baker st,  london&limit=1

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

Второй пример: сокращения остаются как есть

Запрос с распространёнными сокращениями, например «St» вместо «Street» или «Ave» вместо «Avenue», не нужно раскрывать перед отправкой.

GET /v1/forward?q=500 5th Ave, New York&limit=1

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

Параметр countries для сужения результатов

Если вы уже знаете, в какой стране должен находиться адрес, например по сохранённому платёжному адресу или по региональной направленности сайта, передайте её в параметре countries, чтобы сократить количество неоднозначных совпадений с одноимёнными местами в других частях мира.

GET /v1/forward?q=Springfield Main Street&countries=US&limit=3

Ошибка, которой стоит избегать

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

Проверка уверенности после получения результата

Нормализация уменьшает количество неверных совпадений, но не устраняет их полностью. Всегда проверяйте поле confidence в результате, а не считайте возвращённый результат автоматически правильным только потому, что запрос выполнился успешно.

Стоимость запроса не меняется

Очистка строки ввода перед отправкой не меняет того, сколько запросов стоит поиск: это по-прежнему один запрос на адрес. Меняется вероятность того, что отправленный вами единственный запрос вернёт что-то полезное, и вам не понадобится вторая, исправленная попытка, которая стоила бы второго запроса.

Правильная нормализация с самого начала означает меньше впустую потраченных запросов и более чистые данные дальше по цепочке. Полный набор поддерживаемых параметров, включая countries и limit, описан в документации по прямому геокодированию.