Я хочу написать сценарий, который анализирует XML-файлы OpenStreetMap (OSM) и создает базу данных городов и поселков в иерархической форме. Я хочу, чтобы результирующий набор данных имел иерархию, которая может выглядеть в США следующим образом:
USA -> California -> San Francisco County -> San Francisco
и, может быть, так в Великобритании:
United Kingdom -> England -> Middlesex -> London -> Soho
Выводом будет документ JSON, который описывает иерархию для всех городов в файле OSM со структурой, подобной приведенным выше примерам.
Я использую Python и библиотеку синтаксического анализатора "imposm", и могу без проблем загружать и анализировать файл; Моя проблема заключается в недостаточном понимании того, как структурированы данные OSM: я не знаю, как узнать отношения родитель / потомок между узлами в данных OSM. Например, если я найду узел для «Сохо», как я могу привязать его к узлам «Сити Вестминстер», «Большой Лондон», «Мидлсекс» и «Англия»?
Я знаю, что некоторые узлы имеют тег "is_in", который может дать некоторую часть этой информации, но
- А) это противоречиво и
- B) кажется, что это текстовое поле произвольной формы, а не ссылка на узел OSM (т. Е. Is_in: "Город Вестминстер" не дает мне никакой ссылки на узел Вестминстер).
Пожалуйста, дайте мне знать, если у вас есть предложения о том, как связать эти узлы иерархически.