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