Chcę napisać skrypt, który analizuje pliki XML OpenStreetMap (OSM) i buduje bazę danych miast w sposób hierarchiczny. Chcę wynikowy zestaw danych mają hierarchię, która może wyglądać tak w USA:Jak mogę wyodrębnić hierarchiczne dane miasta/stanu/kraju z plików planety XML OSM?
USA -> California -> San Francisco County -> San Francisco
a może tak w Wielkiej Brytanii:
United Kingdom -> England -> Middlesex -> London -> Soho
Wyjście będzie dokument JSON, który opisuje hierarchia dla wszystkich miast w pliku OSM, o strukturze podobnej do powyższych przykładów.
Używam biblioteki Pythona i biblioteki "imposm" i mogę załadować i parsować plik bez problemu; moim problemem jest brak zrozumienia struktury danych OSM: nie wiem, jak poznać relację rodzic/dziecko między węzłami w danych OSM. Na przykład, jeśli zlokalizuję węzeł dla "Soho", jak mogę powiązać go z węzłami dla "City of Westminster", "Greater London", "Middlesex" i "England"?
wiem, że niektóre węzły mają "is_in" znacznik, który może dać niektóre z tych informacji, ale
- A) jest to niespójne i
- B) wydaje się być tekst free-form pole, a nie link do węzła OSM (np. is_in: "City of Westminster" nie daje mi żadnego łącza do węzła Westminster).
Proszę dać mi znać, jeśli masz jakieś sugestie, jak połączyć te węzły w sposób hierarchiczny.
dzięki za odpowiedź, Igor. to użyteczne informacje i wygląda na to, że nie mogę polegać na strukturze danych OSM, aby uzyskać potrzebne dane. Myślę, że lepiej będzie, gdybym dostał moje dane z miejsca takiego jak geonames.org. – luke
nie może wyszukać wszystkich węzłów, które mają granice otaczające punkt szczególny? na przykład jeśli masz ulicę, powinieneś znaleźć węzeł, taki jak miasto, województwo, powiat i kraj, ponieważ ich granice otaczają szerokość i długość geograficzną ulicy? – Tom