Как стать автором
Обновить

Как наладить поиск адреса по координатам (и где взять нужный справочник)

Время на прочтение10 мин
Количество просмотров39K
Всего голосов 31: ↑31 и ↓0+31
Комментарии33

Комментарии 33

А есть возможность по ФИАС-коду запросить координаты?

Без проблем, у нас для этого отдельный метод dadata.ru/api/find-address

Спасибо! Как раз искал решение по обратному геокодингу, чтоб можно было радиус задавать — нужно находить ближайший к точке адрес.

Все верно, это к нам ;)

А не поделитесь, как будете использовать?

У нас первый в РФ сервис по упрощённой регистрации разрешений на полеты беспилотников. Все автоматизировано, нужно лишь за день до полеты тыкнуть на карту где будешь летать.
Координаты нужны для органов, которые отвечают за организацию воздушного движения, а вот для силовиков нужен уже примерный адрес взлета, чтоб любой ппсник мог проверить )

Ого! Честно говоря, думал, будет что-то более приземленное :) Было бы очень интересно про это почитать, конечно.
Спасибо за интересные мысли. Только я не очень понял, как в искомый радиус попадают не точечные, а протяженные объекты, например длинные улицы, если в базу (и в индекс) попадает только центральная точка? Например, улица длиной в 1000 метров, в базу попадет ее центральная точка. И если указать искомые координаты края улицы с радиусом 100 метров, то как люцент найдет эту улицу, если в индексе хранится только ее центр? Ведь радиус поиска центр улицы не захватит.
Спасибо, что подняли интересную тему! :)

Вы все правильно описали с протяженной улицей и точкой на краю — если радиус невелик, поиск эту улицу не найдет. Зато найдет дома на улице — они почти всегда есть, потому что мы отдаем приоритет детальным объектам.

Но у разработчиков уже пошла волна от комментария — задумались, может, нужно что-то допилить в поиске. Так что спасибо за хороший вопрос — заставил подумать.
Мне в голову пока приходит тупое лобовое решение (в рамках вашей модели данных) — с неким шагом (например 100 метров) расставить фейковые объекты-пустышки, которые по сути будут ссылками на улицу. Правда, может достаточно много таких объектов получиться, но всё зависит от шага. Зато по сути в программе почти ничего менять не надо.
Передал ребятам, спасибо!
А можно для протяженных объектов строить упрощенную геометрию и хранить её для детальной фильтрации.
Ещё можно строить индекс на основе дерева квадрантов, при этом протяженные объекты закреплять за теми квадрантами, в которые объект помещается полностью.
Можно индекс на основе того же дерева квадрантов строить для первичного грубого поиска, тогда все протяженные объекты можно «рендерить» на грубую растровую карту в виде битовых «примесей» к пикселям, на которые объект грубо накладывается.
Огромное количество разных способов оптимизации этой задачи.
А публичную кадастровую карту или другие данные Росреестра не пробовали для этой задачи дополнительно использовать? Можно брать адреса и объектов капитального строительства, и земельных участков. Данные есть сильно не всегда (зависит от региона и от того, насколько свежая застройка), но когда они есть — их можно почти всегда считать достоверными.
Нет, даже в голову не приходило! Смотрели прежде всего на ресурсы, которые рождены для адресов и координат :)

Спасибо за наводку, передал ребятам. Посмотрим, что есть у Росреестра, это интересно.
Там, насколько я понимаю (нюансов не расскажу, т.к. сам пока с этой темой сталкивался только по касательной) есть свои фокусы с API. Как минимум показателен тот факт, что размещённая на самой публичной кадастровой карте ссылка на описание их веб-сервисов (https://pkk5.rosreestr.ru/help/pkk5_services.docx) выдаёт ошибку 404.
Но если получится с этим разобраться разумными силами — то как раз по всякой пригородной сельской местности, где участки и дома активно покупаются/продаются, застраиваются и пр., т.е. в ЕГРН новые данные попадают, можно сильно улучшить процент покрытия.
Ничего страшного, разберемся! Вот с чем у нас есть опыт, так это с изучением всевозможных открытых и приоткрытых источников :) Главное, что наводку дали — спасибо!
Сейчас у вашего обратного геокодера проблема с точками в местах, где нет никаких населенных пунктов. Например:
{
"lat": 59.276284,
"lon": 29.936941
}

При этом OSM nominatim неплохо с такими координатами справляется. Не собираетесь расширять базу?
Базу расширяем постоянно, но в основном внутри населенных пунктов. Мы мало смотрим за пределы обжитых территорий, потому что делаем сервис прежде всего для транспорта и логистики внутри городов, поселков, деревень — для курьеров, такси и так далее.

Ваша же точка — где-то на шоссе. 83-й километр, домов поблизости нет. Письмо не пошлешь, курьера не отправишь :)
Отличная работа!
И спасибо, что так подробно рассказываете технические подробности.
Спасибо! Делимся по возможности.
Основная работа, и с большим отрывом — собрать из OSM адекватные данные и отсеять брак. Задача настолько объемная, что я отвел под нее в статье отдельный раздел.
Не подскажите — а Вы каким-то образом делитесь найденными ошибками в OSM с самим сообществом OSM? Было бы неплохо. Я понимаю что коммерческая тайна и всё такое — но участники OSM стараются в том числе и для Вас, неплохо что-то возвращать.
Честно говоря, нет, не делимся. Дело не в коммерческой тайне, этого как раз совершенно не жалко. Непонятно, как технически делиться, в каком качестве мы будем выступать и так далее
Можно спросить тут у обитателей по порядку популярности и актуальности статей с OSM: Zverik, vics001, JediPhilosopher, Sildream. Если никто не ответит(а ребята занятые) — можно скинуть демо информацию в чат t.me/ruosm с найдеными ошибками и спросить готов ли кто-то в таком формате(который у вас есть) собирать данные и вносить исправления в OSM. Не забыть сказать что Вы уже данные для себя почистили и отдаёте их из благодарности, потому что некоторые мапперы иногда немного ревностно относятся к тому, что кто-то даёт «какие-то» данные для внесения и могут «настойчиво» попросить самим всё вносить). Но обижаться на них не стоит, они делают хорошее дело.
Ого, спасибо большое! Отнесу это ребятам, которые работают на земле.
Да проще зайти в чат, хотя сразу скажу, что ruosm крайне перегружен всякой информацией и иногда и там информация не доходит до нужных людей. Лучше всего, конечно, сходить на какой-нибудь локальный митап OSM, сделать презентацию, а заодно познакомится с людьми.

Насколько, я понимаю, вы валидируете данные и исправляете их у себя, вы вполне можете открыть валидатор OSM и рассказать другим осмерам и возможно люди будут поглядывать и исправлять ошибки. Дела в OSM не делаются быстро, но если начать сегодня через год вполне можно найти своих пользователей. Не забывайте, что в OSM есть свои тулы для исправления ошибок OSM Notes, OSMCha, MapRoulette, StreetComplete…
Я сам в случае обнаружения каких-то ошибок просто иду и в OSM это правлю. Поскольку я работаю в основном с пешеходной инфраструктурой, то обычно я добавляю какие-то недостающие тротуары и пешеходные переходы. Или вон в Китай когда ездил — отрисовал в OSM квартал и парк вокруг отеля, не очень подробно, но лучше чем ничего.
Я сам в случае обнаружения каких-то ошибок просто иду и в OSM это правлю. Поскольку я работаю в основном с пешеходной инфраструктурой, то обычно я добавляю какие-то недостающие тротуары и пешеходные переходы. Или вон в Китай когда ездил — отрисовал в OSM квартал и парк вокруг отеля, не очень подробно, но лучше чем ничего.

Насчет правок адресов — это наверное адски много ручной работы. При этом OSM везде большими буквами пишет что автоматическое пакетное редактирование карты — плохая идея и приносит больше проблем чем пользы, а вручную такое исправлять слишком долго.
Вы совершенно правы насчет ручных правок — мы такое просто не осилим при своих объемах.
А ваш этот сервис локально в закрытом контуре можно запустить? Дорого получится?
Не думали продавать аппаратные решения в виде сертифицированных по чем только можно маленьких железных серверов с вашей дадатой внутри? Купил поставил и знай себе только заливай обновления время от времени.
Да, кроме обычной версии предлагаем и «коробочную» — обычно покупают банки и прочие ребята с суровыми безопасниками. Для адресов стоит 450 000 ₽ за один промышленный сервер и один тестовый. Если интересно подробнее, вот описание в нашей базе знаний.

Продаем только софтовую часть. О том, чтобы пойти дальше и упаковывать в «коробку» сразу железо, — не думали. Насколько понимаю, у крупных компаний свои поставщики, у нас никто серверы не просит. По конфигурации, конечно, спрашивают — без проблем консультируем.
А вы наоборот, геокодирование не делаете? По адресу возвращать геокоординаты, было бы полезно.
Делаем, причем научились гораздо раньше. Вот описание метода, стоит от 11 500 ₽ в год dadata.ru/api/suggest/address.
Для собственного справочника мы берем адресные объекты из ФИАС, а затем ищем их координаты в OSM. Если нашли, сохраняем объединенные данные. Получается такое пересечение ФИАС и OSM.

Вы конечно же выложили объединённую базу как того требует лицензия ODbL, по которой распространяется OSM, вот только я её что-то не нашёл.
Да, действительно, используя данные OSM, вы теперь должны дать всем свободный доступ к тем данным которые получились.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий