В современном мире, где цифровые технологии и геопространственные данные играют ключевую роль в различных сферах жизни, определение точных координат объекта по его адресу становится важной задачей. Это необходимо для навигации, логистики, городского планирования, анализа данных и многих других областей. Однако процесс преобразования адреса в географические координаты (геокодирование) может быть сопряжен с рядом сложностей, таких как неоднозначность адресов, ошибки в данных или отсутствие точной информации. Наш клиент обратился к нам с запросом на решение проблемы правильной идентификации адреса и координат.
На схеме ниже представлены цели и предполагаемый путь решения:
Для решения задач геокодирования мы рассматривали следующие сервисы:
Yandex https://geocode-maps.yandex.ru/
DaData https://dadata.ru/api/geocode/
Google Maps https://developers.google.com/maps/documentation/geocoding/overview?hl=ru
OSM https://nominatim.openstreetmap.org/ui/search.html
Стоит отметить, что три первых сервиса предоставляют платный доступ к данным.
Проверка определения геопозиции по адресам Рассмотрим на примерах, как сервисы идентифицировали геопозицию по заданному адресу
Пример 1: Россия Владимирская обл, г Ковров, ул Машиностроителей, дом 8
Результат: Яндекс и DaData определили адрес точно вплоть до дома, Google поставил мимо дома, OSM мимо
Пример 2:
Россия Тульская обл, Ефремовский р-н, г Ефремов, ул Союзная, д.26
Яндекс и Google попали ровно в дом, OSM и DaData попали в улицу, при том что OSM точнее чем DaData нашел ее начало
Пример 3: Россия Свердловская обл, г Екатеринбург, ул Малышева, дом 8
OSM, Яндекс и Google попадают в точку, DaData по каким-то причинам указал на начало улицы с другой стороны и не определил адрес.
После этапа анализа на релевантность выдачи, мы предложили следующую архитектуру приложения:
- Реализовать сервис на основании фреймворка Symfony в специальной конфигурации, позволяющей нам формировать шаблоны в административной панели системы
- Так как будут использоваться несколько провайдеров API, необходима отдельная конфигурация провайдеров для конкретной страны. Например, для конфигурации RU-Россия по провайдерам можно настраивать приоритетность провайдера и доступность для конкретной страны
- Форма виджета для ввода адреса будет выглядеть таким образом
Мы предусмотрели деление адреса на составляющие в форме, так как для некоторых систем по типу OSM важно разбиение адреса на составляющие.
В рамках разработки сервиса была реализована возможность выбора очередности геокодинговых провайдеров. Основная цель данного решения — оптимизация затрат, поскольку система позволяет в первую очередь направлять запросы к бесплатным или более экономичным сервисам, используя платные (например, Яндекс.Геокодер или Google Maps) только при необходимости.
Особое внимание уделено балансу между стоимостью и точностью результатов. Так, после бесплатного OpenStreetMap рекомендуется использовать Яндекс.Геокодер, который, несмотря на свою стоимость, обеспечивает высокую точность данных. Кроме того, ключевым преимуществом Яндекса является его обширная зона покрытия, включая отдалённые населённые пункты, где другие провайдеры, такие как Google, могут не предоставлять достаточных данных.
Таким образом, предложенный подход позволяет эффективно распределять запросы между провайдерами, минимизируя затраты без существенного ущерба для качества геоданных.