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