Я разрабатываю веб-сайт, и мне нужно получить все границы области в зависимости от ввода пользователя. Например, пользователь хочет узнать границы города с именем x. Как мне получить его из openstreetmap? Я слышал о xapi и осмосе, но нигде не мог найти примеров. Спасибо!
Получение границ города из openstreetmap
Ответы (1)
Я попытался сделать это с помощью JavaScript здесь: https://github.com/pgkelley4/city-boundaries-google-maps
По сути, все сводится к поиску отношения, в котором OpenStreetMap хранит границы города.
Я использовал что-то вроде следующего запроса, чтобы получить площадь:
area[name="Seattle"]["is_in:state_code"="WA"];foreach(out;);
Или, если это ничего не находит, просматривая узел, чтобы найти любые связанные области:
node[name="New York"][is_in~"NY"];foreach(out;is_in;out;);
Чтобы получить идентификатор отношения, вычтите 3 600 000 000 из идентификатора области, возвращаемого приведенными выше запросами. Затем получите отношение из его идентификатора:
(relation(" + relationID + ");>;);out;
Вы можете протестировать запросы здесь, мой, возможно, можно было бы улучшить: http://overpass-api.de/query_form.html
Вот как получить границы города, обработать их - другое дело, так как в отношении ничего не ладится. Для этого см. мой проект GitHub и: http://wiki.openstreetmap.org/wiki/Relation:multipolygon/Algorithm
Также я хотел бы отметить, что данные OpenStreetMap для границ города неоднородны. Насколько я могу судить, его нет в больших городах, таких как Даллас и Лос-Анджелес.