kiselev-dv / gazetteer

OSM ElasticSearch geocoder and addresses exporter
http://osm.me
Other
98 stars 21 forks source link

Геокодирование внутри дома, внутри osm границы #42

Open d1g opened 8 years ago

d1g commented 8 years ago

Геокодирование по паре сотен POI внутри дома может выглядеть как overkill но для неё есть самое прямое применение в OpenLevelUp. Главное чтобы osmid в ответе приходил.

Параметры API

В WEB API gazetteer нужно добавить какой-нибудь параметр по которому будет ограничена область геокодинга.

Похожее было здесь: https://github.com/kiselev-dv/gazetteer/tree/develop/Gazetteer#3-how-to-filter-data-by-boundary

osm_id=w00000001 osm_id=r00000001

Очевидно, что для этого клиентам нужно знать osmid (что противоречит геокодингу без костылей), но OpenLevelUp может сделать и такое потому как данные есть от overpass.

Возможно упростить всё пользователям двумя параметрами: restrict=admin_level + restrict_query=Москва restrict=building + restrict_query=Афимолл Сити restrict=mall + restrict_query=Centre Commercial Le Coudoulet

Индексация

Самая простая реализация это добавить метки is_in_Афимолл_Сити всем объектам внутри здания.

Моллы/retail здания можно выделить из всех остальных "домов" для уменьшения индекса.

Для админ границ не такая востребованная фича, может подождать.

Обработка запросов

Матчить 2 параметра по этим меткам да хоть на равенство (уже лучше Номинатима).

Можно сортировать одинаковые результаты по дистанции к lat/lot/zoom параметоров из клиентского приложения (у OpenLevelUp в URL есть они). Т.е. перезаписывая веса внутренние веса ES на метры до lat/lot.

Можно эту пост-сортировку до центра экрана сделать опциональной.

PS. тикет в OpenLevelUp https://framagit.org/PanierAvide/OpenLevelUp/issues/10 тикет в Photon https://github.com/komoot/photon/issues/226

kiselev-dv commented 7 years ago

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

d1g commented 7 years ago

Nominatim:

osm.me:

kiselev-dv commented 7 years ago

Погоди, для начала, давай разберемся с выгрузками, что ищет osm.me это отдельный разговор (Мне так и не удалось добиться от ElasticSearch всего того что я хочу по поиску и сортировке результатов, так что находит он далеко не всегда то что я ожидаю).

Дай осмовскую айдишку для этого мола пожалуйста.

d1g commented 7 years ago
kiselev-dv commented 7 years ago

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

kiselev-dv commented 7 years ago

Так вот что я выгружаю для Афимола https://gist.github.com/kiselev-dv/a24c3e6e498d142d905db5ddfe3db966

d1g commented 7 years ago

вижу есть данные по Starbucks: http://www.openstreetmap.org/node/1225311629

Я ожидаю его увидеть по "Старбакс АФИМОЛЛ" "АФИМОЛЛ Старбакс" "старбакс в афимолле"

kiselev-dv commented 7 years ago

Точно не старбакс в афимолле, вообще над генерацией текста я еще подумаю как это лучше сделать, сам объект я добавил https://gist.github.com/kiselev-dv/67737f2a0ff1abc24b88bd7ee4ae2595

kiselev-dv commented 7 years ago

Так, поехали дальше, @d1g как ты хотел это использовать?

d1g commented 7 years ago

@kiselev-dv, изначальный сценарий был "вывести все POI внутри <АФИМОЛЛ>". В случае OLU была часть магазов на экране (из overpass).

Когда смотришь большой молл, нужно подменить результаты с bbox на area.

Затем возникла идея по айдишнику POI (n1225311629) возвращать ID здания (+ название). Третий вариант (магаз-здание) я недавно предложил.

overpass плох тем, что 1. он выводит по bbox (не попадает в экран часть магазов) 2. он требует знать название магаза (в случае area)

kiselev-dv commented 7 years ago

Так, POI=>здание будет работать как только обновлю, точнее айдишку и сейчас думаю можно вытащить она в рефах должна быть.

Все пои внутри здания, если я записываю айди здания для пои в рефы, то тоже уже сейчас должно работать.

Что не работает и пока я думаю как лучше - это текст. Ну точнее я отвлекся маленько, может на выходных прикручу текст.