2011-09-16 11 views
12

मैं एक ऐसी स्क्रिप्ट लिखना चाहता हूं जो OpenStreetMap (ओएसएम) एक्सएमएल फाइलों को पार करती है और एक पदानुक्रमित फैशन में कस्बों और शहरों का डेटाबेस बनाता है। मैं परिणामी डेटा सेट चाहते हैं एक पदानुक्रम है कि अमेरिका में ऐसा दिखाई दे सकता है: और हो सकता है ब्रिटेन में इस तरहमैं ओएसएम एक्सएमएल ग्रह फ़ाइलों से पदानुक्रमित शहर/राज्य/देश डेटा कैसे निकाल सकता हूं?

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

:

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

उत्पादन एक JSON दस्तावेज़ का वर्णन किया जाएगा ओएसएम फ़ाइल के सभी शहरों के लिए एक पदानुक्रम, उपरोक्त उदाहरणों की तरह एक संरचना के साथ।

मैं पाइथन और "imposm" पार्सर लाइब्रेरी का उपयोग कर रहा हूं और मैं बिना किसी समस्या के फ़ाइल लोड और पार्स कर सकता हूं; मेरी समस्या यह समझने की कमी है कि ओएसएम डेटा कैसे संरचित किया जाता है: मुझे नहीं पता कि ओएसएम के डेटा में नोड्स के बीच अभिभावक/बाल संबंध कैसे जानें। उदाहरण के लिए, यदि मैं "सोहो" के लिए नोड का पता लगाता हूं, तो मैं इसे "वेस्टमिंस्टर शहर", "ग्रेटर लंदन", "मिडिलसेक्स" और "इंग्लैंड" के लिए नोड्स पर कैसे बांध सकता हूं?

मुझे पता है कि कुछ नोड्स एक "is_in" टैग है कि इस जानकारी में से कुछ दे सकता है है, लेकिन

  • ए) इस असंगत है और
  • बी) यह एक मुक्त रूप पाठ हो रहा है फ़ील्ड, ओएसएम नोड का एक लिंक नहीं है (यानी is_in: "वेस्टमिंस्टर शहर" मुझे वेस्टमिंस्टर नोड से कोई लिंक नहीं देता है)।

कृपया मुझे बताएं कि क्या आपके पास इन नोड्स को श्रेणीबद्ध रूप से लिंक करने के लिए कोई सुझाव है।

उत्तर

14

मूल रूप से सबकुछ ओएसएम में "मुक्त-रूप" है। टैगिंग पर सम्मेलन हैं, लेकिन कोई गारंटी नहीं है कि लोग उनके साथ रहेंगे। तो आपको कुछ भी सुसंगत बनाने के लिए कुछ डेटा सफाई और पोस्ट प्रोसेसिंग करने की आवश्यकता होगी।

  • नोड एक या अधिक तरीके
  • द्वारा प्रयोग किया जाता है एक नोड एक या अधिक का एक सदस्य है:

    अभिभावक-बच्चे रिश्तों का सवाल है, वहाँ OSM में कोई ठोस तार संबंधों के अलावा अन्य कर रहे हैं संबंधों

  • एक तरह से एक या अधिक संबंधों
  • का एक सदस्य है एक संबंध एक या अधिक संबंधों

OSM का एक सदस्य है संबंधों का उपयोग पदानुक्रमित संबंधों को परिभाषित करने के लिए किया जा सकता है, लेकिन इन्हें परिभाषित करने का तरीका बहुत सामान्य है। अर्थशास्त्र सम्मेलनों पर आधारित है (आमतौर पर ओएसएम विकी पृष्ठों पर वर्णित)।

यदि आप "is_in" रिश्ते की तलाश में हैं, तो मुझे लगता है कि आपको इसे ज्यामितीय तरीकों का उपयोग करके स्थापित करना होगा। दुर्भाग्यवश, आप इसके लिए ओएसएम टैगिंग पर वास्तव में भरोसा नहीं कर सकते हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, इगोर। यह उपयोगी जानकारी है, और ऐसा लगता है कि मुझे आवश्यक डेटा प्राप्त करने के लिए ओएसएम डेटा की संरचना पर पर्याप्त भरोसा नहीं किया जा सकता है। मुझे लगता है कि मैं geonames.org जैसे कहीं से अपना डेटा प्राप्त करने से बेहतर हूं। – luke

+0

क्या वह उन सभी नोड्स की खोज नहीं कर सकता है जिनमें रुचि के बिंदु के आस-पास की सीमाएं हैं? जैसे यदि आपके पास सड़क है, तो आपको शहर, प्रांत, जिला और देश जैसे नोड मिलना चाहिए क्योंकि उनकी सीमाएं सड़क की अक्षांश और देशांतर स्थिति को घेरती हैं? – Tom

संबंधित मुद्दे