Мне черезвычайно надоела ситуация с тем, что Nominatim никогда не обновляется, а “геокодер нового поколения” всё никак никем не заканчивается, поэтому написал свой.
Вживую геокодер можно пощупать на http://openstreetmap.by/, набрав что-нибудь в поиске или передав в страничку параметром ?q=.
Цели, не ставившиеся перед геокодером:
Находить всё. Это задача Яндекса, и если ее решать, то можно упереться в то же, что и Номинатим - импорт в базу будет происходить не в реальном времени, а с (много)недельным отставанием;
Искать POI. На мой взгляд, это задача каталогов POI, а не геокодера, поэтому поиски типа “магазины мебели вокруг завода такого-то” поддерживать не планируется;
Поддерживать все адресные схемы и весь мир. На мой взгляд, вполне достаточно ограничиться русским языком;
Поддерживать поиск по некрасивым данным. Если кто-то напишет addr:street=“Ленина улица” вместо addr:street=“улица Ленина” (см. соглашение об именовании), то вполне нормально, если такой объект не будет найден.
Формат ввода:
а) Поиск по строгому совпадению name полигона и введенной строки (регистрозависимый). Вполне достаточно, чтобы написать Минск и найти в базе ближайший к вам Минск.
б) Поиск по паре “улица-дом-(город)” (регистронезависимый, relaxed). Выдаёт ближайший к опорной точке дом с таким адресом;
в) Поиск по улице (-городу) (регистронезависимый, relaxed). Выдаёт ближайший к вам сегмент улицы с таким названием.
г) Поиск по населенным пунктам (регистронезависимый, relaxed). Выдаёт населенный пункт с похожим названием.
Требования к данным:
addr:street и name у улиц должен быть заполнен согласно Соглашению об именовании дорог, допустимы сокращения “ул.”, “просп.” и “пер.”;
addr:street должен быть в базе проекта streetmangler (https://github.com/AMDmi3/streetmangler, автор AMDmi3, дополнения можно присылать там же, на гитхабе, в виде баг-репортов и пулл-реквестов);
addr:housenumber записан в формате “48А к2 с1” - дом номер 48А, корпус 2, строение 1. на данный момент поиска по составным номерам домов нет.
двойные адреса задаются в следующем виде: основной адрес прописывается на контур здания (addr:street, addr:housenumber), дополнительные адреса ставятся на точки (addr:street, addr:housenumber ,без тега building) внутри контура основного здания.
Как-то так. Попробуйте поискать свой дом; найдётся? Если да, мне будет приятно услышать “спасибо”, если нет, то мне хотелось бы знать ссылку на объект в OSM и тот запрос, который вы вводите.
К слову, в реальной жизни искать пои — не задача геокодера, но и не задача каталога. Запросы вида «поесть» или «суши» КРАЙНЕ актуальны в практическом применении. Даже из моего личного опыта.
А вообще ня, мой дом находит :3
Вечером затестирую.
Не находит улицу Нарского в Острогожске. Сам Острогожск находит, соседнюю с ним улицу Крамского находит.
Запрос: “Острогожск нарского”
Осмовей: http://www.openstreetmap.org/browse/way/51655450
“Сухой Лог” - находит Сухой Лог в Томской области. хотя он к моему геоположению не близок (ip должен быть екатеринбуржский, геопозиционирование в других местах работает нормально). Вариантов с выбором других мест не предлагает
“Сухой Лог, Сведловская область” - вообще переходит в Омск
upd:
хм… странно… начал находить правильный Сухой Лог…