Открытая карта улиц - улицы по городам - PullRequest
2 голосов
/ 09 июня 2011


Я работаю над системой, основанной на сборе данных из OSM (Open Street Map).

Когда я выбираю (из базы данных OSM) область, которая охватывает МНОГИЕ города, то могу ли я узнать, какая улица (из обширного списка xml) принадлежит какому городу? Попытка использовать OSM Server Side Script, но не нашла интерес в этом руководстве.

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

Я был бы рад прочитать любой ответ, который был бы полезным.

1 Ответ

5 голосов
/ 28 июля 2011

Вы можете использовать api overpass для загрузки всего города. Сначала вы должны найти идентификатор отношения, которое определяет город (вы можете запросить его через API-интерфейс overpass, если у вас его еще нет в вашей системе). Например, Vuppertal имеет 62478. Затем добавьте 3600000000 к идентификатору, отправьте и отправьте следующий запрос POST по адресу http://www.overpass -api.de :

<union>
  <area-query ref="3600062478"/>
  <recurse type="node-relation" into="rels"/>
  <recurse type="node-way"/>
  <recurse type="way-relation"/>
</union>
<print mode="body"/>

Вы также можете проверить, где находятся отдельные точки, для загрузки только улиц города с помощью theis api, для получения дополнительной информации см.

Обновление: Чтобы найти связь с городом, отправьте следующий запрос POST по адресу http://overpass -api.de / api / interpreter :

   <query type="relation">
     <has-kv k="name" v="Wuppertal"/>
     <has-kv k="type" v="boundary"/>
   </query>
   <print mode="body"/>

если вы хотите быть более строгими, вы можете добавить больше фильтров, например, de: place = city, если вы смотрите только на Germanz или admin_level = что-то и т. Д. Если вы хотите получить больше результатов, вы можете использовать только имя:

   <query type="relation">
     <has-kv k="name" v="Wuppertal"/>
   </query>
   <print mode="body"/>

Вам решать, что вы считаете "городом".

...