Воспользуйтесь nominatim
ua9lif, кажется, у Вас неправильная постановка задачи. ИМХО, Ваш вопрос звучит так - “Как определить к какому району принадлежит указанная точка?”
Первое что нужно, это определить какой “район” Вас интересует - https://wiki.openstreetmap.org/wiki/RU:Tag:boundary%3Dadministrative
Спасибо за ответ, с nominatim возникла проблема:
Есть остров - https://www.openstreetmap.org/#map=16/57.3272/65.0330
Запрос nominatim https://nominatim.openstreetmap.org/reverse.php?format=json&lat=57.3265571&lon=65.031597&zoom=12 возвращает только один объект:
{“place_id”:“179297093”,“licence”:“Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright”,“osm_type”:“relation”,“osm_id”:“897988”,“lat”:“57.2068608”,“lon”:“65.5398027882382”,“display_name”:“Центральный административный округ, Тюмень, городской округ Тюмень, Тюменская область, Уральский федеральный округ, 625000, РФ”,“address”:{“city_district”:“Центральный административный округ”,“city”:“Тюмень”,“county”:“городской округ Тюмень”,“state”:“Тюменская область”,“postcode”:“625000”,“country”:“РФ”,“country_code”:“ru”},“boundingbox”:[“57.1359188”,“57.277846”,“65.398993”,“65.672417”]}
Хотя должен быть Тюменский район и который описан https://www.openstreetmap.org/relation/1660242#map=11/57.2759/65.1476
Мне нужен admin_level=6.
Потому что он работает немного по другой логике. Он ищет ближайший идентифицируемый объект (просто в чистом поле не к чему привязаться) и он оказывается где-то в городском округе, поэтому и адрес выдаёт его.
по мотивам темы про “landuse=military” попытался составить запрос:
http://overpass-turbo.eu/s/yWN
но для полного счастья не хватает условия - выбрать объекты у которых номер версии больше 1, то есть после создания были изменения.
Ранее тут писали что с историей объектов overpass не работает, но в последнее время вроде были большие изменения, а вдруг теперь и это можно?
Хотя это не поможет в “особо хитром случае”, но как вариант простого просмотра и для составления списка пакетов правок может сгодится.
Возможно кто-то знает лучший способ мониторинга изменения тега “military”?
P.S. если у кого запрос не пашет, я в настройках выбрал сервер https://overpass.kumi.systems/api/
P.P.S. надо как-нибудь собраться и составить таблицу - как подписывают и комментируют объекты “military” в России… думаю будет весело.
Подскажите пожалуйста, как найти два highway=footway, соединённые одной или двумя highway=service общей длиной не более 50 метров?
Коллеги, подскажите, можно найти отдельную линию из двух точек на одной из точек которой стоит определённый тег?
В частности, мне нужно найти highway=track у которой на конце traffic_calming=*
Вот такую, например, https://www.openstreetmap.org/way/401638910
Можно, смотрите справки по count_members, возможно foreach, но мне кажется можно без него.
Подскажите, почему запрос работает нестабильно? Он рисует дороги на пешеходных полигонах, но не всегда, некоторые дороги не отображаются, так и не нашел закономерности.
Достаточно частая ошибка когда дорога просто подсоеденина к краю полигона и в итоге роутинг через него не работает.
Или может есть сервис который находит подобные ошибки? osmose и keepright их не видят.
Например вот тут все дороги соеденины адекватно, но отображается только часть.
Пробовал смотреть с помощью (around.area:0), но это не работает для путей, которые не пересекают границу, либо надо увеличивать радиус (до 1, 5, 10? метров), что тоже не гарантирует 100 % результат.
[timeout:20][bbox:{{bbox}}];
(
way ["area:highway"="footway"];
relation ["area:highway"="footway"];
relation ["highway"="footway"];
way ["area:highway"="pedestrian"];
relation ["area:highway"="pedestrian"];
relation ["highway"="pedestrian"];
);
out geom;
map_to_area ->.area;
(
way ["highway"](area.area);
);
out geom;
Upd: внезапно на полигонах 3337985 (Neumarkt) и 3337984 (Frauenkirche) все стало нормально отображаться, но рядом полно площадей где до сих пор не работает.
- Роутинг по area:highway не предполагается, это чисто для красоты
- map_to_area работает только для полигонов в name
Так я про это и говорю, что не всем мапперам очевидно, что только для красоты. Часто встречаю просто дороги брошенные на такой полигон и все.
Как это не работает? Часть дорог же отображается, и они ограничены именно .area. Может быть криво работает? Или area работает только с name?
Причем некоторые мультиполигоны последний раз редактировались более года назад, думаю overpass должен был успеть их перегенерить, если менялась геометрия.
Внезапно на полигонах 3337985 (Neumarkt) и 3337984 (Frauenkirche) все стало нормально отображаться, но рядом полно площадей где до сих пор не работает.
Попробовал поменять сервера, через //overpass-api.de/api/ и https://overpass.kumi.systems/api/ (не)отображаются одни и те же дороги, может быть дело в overpass-turbo?
У overpass поиск по значению действительно медленнее, чем по ключу, или есть какая то хитрость?
а то по ключу можно искать регуляркой по всему миру, а по значению отказывается искать в 100х100 км несильно замапленной территории.
по ключу я ищу так:
node[~"."~"value"];
есть более производительный способ или это особенность базы?
предположу что это особенности индексации базы ??
к примеру, индекс ключей есть, а индекс значений не формируют.
для значений некоторых ключей, name operator, индексы имеют мало смысла.
вариант2: индексы значений неимоверно больше индекса ключей - что в принцеипе логично.
и т.д.
Сдается мне что regexp сам по себе очень небыстр и индексация для него не работает вообще.
Я бы не сказал, что прямо уж так небыстр, например
way[~"^[^:]*[а-я]"~"."];
выполняется за три секунды (именно обращение к API, остальное, как понимаю, делается в браузере) без ограничений по координатам, а way[“Тип”]; за две. По мне так сложноуловимая разница.
Можно, конечно придумать регулярку посложнее, но в POSIX бэкреференсы и прочее не поддерживается, так что врядли люди пользуются чем-то более сложным.
Добрый день, подскажите пожалуйста, как можно выгрузить связанные улицы с районами (и микрорайонами), по определенному городу ?
Напишите подробнее:
- что значит связанные? Это пересекают район где-то, полностью в нем находятся, дома с этой улицы попадают в район или на улице стоит индекс района?
- сколько районов, насколько больших
Последний вариант “связности” делается просто, иначе нужно примерно то, о чем я спрашивал несколько постов назад. Но это работает очень медленно (т.е. оверпасс может отказываться выполнять) и к тому же нестабильно.
Добрый день, имеется ввиду чтобы был признак к какому району (и микрорайону) относится улица, улица может относится и к нескольким районам если их пересекает, к примеру я получаю список улиц. города и могу понять к какому или к каким районам относится улица
В первом приближении можно вот так получить улицы которые хоть где-то пересекают границу района:
[out:csv(::id,"name")][timeout:10];
way(216882430);
out geom;
map_to_area ->.area;
way [highway]["name"](area.area);
out;
То есть руками смотрите номер линии, соответствующей району (или мультиполигона, тогда надо заменить “way” на “rel”), вбивате его и получаете список улиц в этом районе в таком виде:
180119057 Calle Ramo Toscana
180119058 Calle del Ogio o de la Rugheta
180119059 Calle del Paradisio
180119060 Calle del Sturion
А дальше уже зависит от того, как вы хотите это использовать, так как вы не ответили на то, что я спрашивал. Проще всего будет, если вы напишете, для какого города и для какого уровня районов вы хотите получить списки. В разных местах немного по-разному мапят. Ну и я уже писал, что для слишком больших районов и для границ с большим количеством точек (area.area) работает очень медленно и оверпасс может просто кикать запрос.
Но я вижу одну проблему: не знаю найдет ли оверпасс линию, которая проходит внутри района, но точек внутри него не имеет. Можете поискать пример, проверим (не обязательно район с улицей, любой путь пересекающий полигон, желательно не очень большой).
И одну возможную проблему: улицы могут быть разбиты на куски (мостами, отличающимися скоростными ограничениями и т.п.) и вы получите кучу дубликатов. Если нужны только именованные улицы, то это решаемая проблема, а вот если есть неименованные, то я не вижу простого способа их соединить.
way [highway]["name"](area.area);
Найдёт всё что внутри.
Другое дело, что у нас кучу “микрорайонов” это не понятное “вон там за дрогой” и отмечено просто точкой.
Если это не разовая хотелка для своего города, то имеет смысл поднимать свой локальный nominatim.