2011-09-16 14 views
12

OpenStreetMap (OSM) XML dosyalarını ayrıştıran ve hiyerarşik bir şekilde şehirler ve şehirler için bir veritabanı oluşturan bir komut dosyası yazmak istiyorum.OSM XML gezegen dosyalarından hiyerarşik şehir/eyalet/ülke verilerini nasıl alabilirim?

United Kingdom -> England -> Middlesex -> London -> Soho 

çıktı açıklayan bir JSON belge olacaktır:

USA -> California -> San Francisco County -> San Francisco 

ve belki İngiltere'de böyle: ABD'de bu gibi görünebilir bir hiyerarşi var çıkan veriler seti istiyorum OSM dosyasındaki tüm şehirler için bir hiyerarşi, yukarıdaki örneklerde olduğu gibi.

Python ve "imposm" ayrıştırıcı kitaplığını kullanıyorum ve dosyayı sorunsuz bir şekilde yükleyip ayrıştırabilirim; Sorunum, OSM verisinin nasıl yapılandırıldığının anlaşılmaması: OSM'nin verisindeki düğümler arasındaki ebeveyn/çocuk ilişkisini nasıl bileceğim. Örneğin, "Soho" için düğümü bulursam, onu "City of Westminster", "Büyük Londra", "Middlesex" ve "İngiltere" düğümlerine nasıl bağlayabilirim?

Bazı düğümler bu bilgilerden bazılarını verebilir bir "is_in" etiketine sahip olduğunu biliyoruz

fakat

  • A) bu tutarsız ve
  • B) bir serbest biçimli metin gibi görünüyor alan, bir OSM düğümüne bir bağlantı değil (ör. is_in: "Westminster Belediyesi" bana Westminster düğümüne herhangi bir bağlantı vermez).

Bu düğümleri hiyerarşik olarak nasıl bağlayacağınız konusunda herhangi bir öneriniz varsa lütfen bana bildirin.

cevap

14

Temel olarak OSM'de her şey "serbest biçimli" dir. Etiketleme konusunda kurallar var, ama insanların onlara sadık kalacağı garanti yok. Bu yüzden tutarlı bir şey elde etmek için bazı veri temizleme ve işlem sonrası işlemleri yapmanız gerekecektir.

  • A A düğümünün bir veya birden fazla üyesi olan bir veya daha fazla yolla
  • tarafından kullanılır: ebeveyn-çocuk ilişkileri gelince

    dışında OSM hiçbir fiziksel bağlantılı ilişkiler vardır ilişkiler
  • bir yolu bir ilişki, bir ya da daha fazla ilişkiler

OSM üyesi olan bir ya da daha fazla ilişkiler

  • üyesidir ilişkiler hiyerarşik ilişkileri tanımlamak için kullanılabilir, ancak bunların tanımlanma şekli çok geneldir. Semantikler, kurallara dayanmaktadır (genellikle OSM Wiki sayfalarında açıklanmıştır).

    "is_in" ilişkisi arıyorsanız, geometrik yöntemler kullanarak kurmanız gerekeceğini düşünüyorum. Maalesef sadece OSM için etiketleme konusunda güvenemezsiniz.

  • +0

    Cevabınız için teşekkürler, Igor. Bu yararlı bir bilgidir ve ihtiyaç duyduğum verileri elde etmek için OSM verilerinin yapısına yeterince güvenemeyeceğim gibi görünüyor. Verilerimi geonames.org gibi bir yerden almaktan daha iyi olacağımı düşünüyorum. – luke

    +0

    İlgi alanını çevreleyen sınırları olan tüm düğümleri arayamaz mı? Örneğin. Eğer bir sokağınız varsa, şehir, il, ilçe ve ülke gibi bir düğüm bulmalısınız, çünkü sınırları sokakların enlem ve boylam konumunu kuşatır mı? – Tom

    İlgili konular