ग्रिड में एक जटिल आकृति को विभाजित करें


11

मेरे पास बहुतायत से एक विस्तृत आकृति है जिसमें बहुभुज / बहुभुज विशेषताएं हैं (फ़ाइल लगभग 500mb है)। यह वास्तव में समूची दुनिया की एक आकृति है, जिसमें समुद्र तट की विशेषताएं हैं। मुझे ग्रिड का उपयोग करके इस डेटा को विभाजित करने की आवश्यकता है। स्पष्ट होने के लिए, मैं डेटा को 'सॉर्ट' नहीं करना चाहता, लेकिन वास्तव में बहुभुज को टाइलों में काट देता हूं। मुझे लगता है कि यह सवाल पहले पूछा गया है, लेकिन मैंने जो समाधान पाया वह मेरे लिए काम नहीं किया।

मैंने कोशिश की:

  • क्यूजीआईएस का उपयोग करना और एक वेक्टर ग्रिड के साथ मेरी आकृति सामग्री को इंटरसेप्ट करना - परिणाम भयानक हैं। अधिकांश प्रमुख भूमाफिया जादुई रूप से गायब हो जाते हैं, हालांकि ऐसा लगता है कि भूमि के छोटे टुकड़े कभी-कभी इसे बनाते हैं। मुझे ध्यान देना चाहिए कि यह विधि बहुत सरल डेटा (यानी कम अंक) के साथ वास्तव में अच्छी तरह से काम करती है

  • ओजीआर के अंतर्ग्रहण उपकरणों का उपयोग करना। मैंने इसे ogr2ogr और यहां तक ​​कि अपने स्वयं के C ++ टूल को रोल करके दोनों की कोशिश की। उन दोनों को QGIS जैसी ही समस्या है। वे सरल फ़ाइलों के लिए भी इस समस्या का प्रदर्शन नहीं करते हैं, लेकिन अधिक जटिल लोगों को विफल करते हैं। संदर्भ के लिए, मैं ऑस्ट्रेलिया और न्यूज़ीलैंड के आकार के आकार का उपयोग कर रहा हूँ, आकार में 20mb से कम है, और QGIS और OGR दोनों इसे 'ग्रिडिफाई' करने में विफल हैं।

किसी ने एक बिंदु पर PostGIS का उपयोग करने का सुझाव दिया, क्योंकि इसमें एक चौराहे का कार्य होता है - लेकिन PostGIS के ST_Intersect में उसी GEOS बैक एंड का उपयोग किया जाता है जैसा OGR करता है। वास्तव में वे दोनों एक ही कार्य को कहते हैं जहाँ तक मैं बता सकता हूँ, इसलिए मुझे नहीं लगता कि PostGIS विभिन्न परिणाम देगा।

मैं सुझाव की तलाश में था कि मैं और क्या प्रयास कर सकता हूं। मुझे एक मजबूत एप्लिकेशन या टूलकिट की आवश्यकता है जो टाइलों में अत्यधिक विस्तृत आकार के फाइल को विभाजित कर सकते हैं।

संपादित करें: कुछ और जानकारी जोड़ना

सिंबांगु के जवाब में:

  • शेपफाइल मूल रूप से OpenStreetMap से तटीय डेटा है। यह 'प्रोसीड_पी' फाइल का मर्ज किया गया संस्करण है (इसलिए इसकी टाइलों में विभाजन नहीं हुआ है) जो मुझे उनकी देव सूची को ईमेल करके मिला है। ध्यान दें कि टाइलों का उनका विभाजन (ओवरलैप के साथ 100 किमी x 100 किमी की दूरी पर) जरूरी नहीं है कि मैं क्या चाहता हूं - मैं ओवरलैप नहीं चाहता हूं, और मुझे ग्रिड आकार चुनने की स्वतंत्रता चाहिए, या मैं बस उपयोग करूंगा डिफ़ॉल्ट संसाधित_प।

  • डिफ़ॉल्ट रूप से कोस्टलाइन डेटा में QGIS द्वारा रिपोर्ट की गई ज्यामिति त्रुटियां हैं। मैं इन त्रुटियों को एक छोटे उपकरण के साथ ठीक करता हूं, जिन्हें मैंने कुछ कोड का उपयोग करके पाया था जो मुझे विशेष रूप से इस समस्या को हल करने के लिए डिज़ाइन किया गया था (तटीय डेटा में ज्यामिति त्रुटियों की मरम्मत: https://github.com/tudelft-gist/prepair )। इस उपकरण के साथ फ़ाइलों के ऊपर चलना लगभग सभी त्रुटियों को ठीक करता है क्यूजीआईएस उठाता है। मैं केवल फाइलों को साफ करने के बाद चौराहा करने का प्रयास करता हूं।

  • वास्तव में मैंने QGIS का उपयोग क्या किया है: यह सुनिश्चित करने के लिए डेटा खोलें कि यह QGIS में ठीक लग रहा है। एक निर्दिष्ट रिक्ति के साथ वेक्टर ग्रिड का उपयोग करके टाइल्स की एक परत बनाकर इसे टाइलों में विभाजित करने का प्रयास करें, और फिर दो परतों को पार करना - न जाना। एक छोटे डेटा सेट का उपयोग करने का प्रयास करें - एक छोटे डेटा सेट की कोशिश करने के लिए ओशिनिया (ऑस, एनजेड) में सुविधाओं का चयन करें - यह आकार फ़ाइल का आकार <20mb है। फिर से इसे विभाजित करने का प्रयास करें, काम नहीं करता है।

  • मैंने OGR के साथ क्या किया: ogr2ogr ने सीधे '-pat' और '-clipsrc' विकल्प का उपयोग spat_extent के साथ किया। एक छोटा C ++ टूल भी लिखा है जो WKT पर काम करता है, इसलिए मैं ogr2ogr का उपयोग करके आकृति को WKT में रूपांतरित करता हूं, फिर टेक्स्ट फ़ाइल को मेरे एप्लिकेशन में फ़ीड करें। यह फ़ाइल के माध्यम से चलता है और यहां प्रलेखित () विधि प्रलेखित है: http://www.gdal.org/ogr/classOGRGeometry.html । मुझे लगता है कि यह सीधे ogr2ogr का उपयोग करने के समान सटीक काम करता है।

ब्रेंट के जवाब में:

  1. ऐसा होता है। सब कुछ WGS84 लाट / लोन में है
  2. मैंने सोचा होगा कि विपरीत सच है - कि ग्रिड टाइल्स के दिए गए सेट के लिए, यह खंडित सुविधाओं के एक समूह के बजाय एक विशाल मल्टीपिलगॉन को इंटरसेप्ट करने में अधिक समय लेगा, जो प्रत्येक टाइल पर अधिक स्थानिक रूप से स्थानीय हो सकता है, लेकिन यह एक दिलचस्प सुझाव - मैं इसे आज़माऊँगा और वापस रिपोर्ट करूँगा।
  3. प्रक्रिया के दौरान कोई विशेषता फ़ील्ड नहीं रखी गई हैं, मुझे केवल ज्यामिति में दिलचस्पी है।
  4. मुझे यकीन नहीं है, लेकिन मुझे लगता है कि आप कह रहे हैं कि मुझे ऐसे पॉलीगनों का चयन करना चाहिए जो किसी दिए गए ग्रिड टाइल को ओवरलैप करते हैं और फिर चौराहे का प्रदर्शन करते हैं। यह QGIS के साथ मैन्युअल रूप से बहुत बोझिल है। मेरा उपकरण पहले से ही एक सीमा बॉक्स की जांच के साथ एक निश्चित सीमा तक करता है। थोड़ी गति है, लेकिन अंतिम परिणाम अभी भी खराब है और बिल्कुल अलग नहीं है।
  5. यह एक विकल्प नहीं है। अभी मैं डेटा को विभाजित करने की कोशिश कर रहा हूं ताकि इसका 1 डिस लेट x 1 डिग्रेड लोन हो, और मैं एक सामान्य / मजबूत कार्यप्रणाली की तलाश कर रहा हूं जो सभी मामलों के साथ काम करती हो। मैंने ग्रिड आकार बढ़ाने की कोशिश की है (यानी 10x10) यह देखने के लिए कि क्या मुझे बेहतर परिणाम मिलेंगे और मुझे ग्रिड आकार और आउटपुट की गुणवत्ता के बीच कोई संबंध नहीं दिखता है।

# 2 संपादित करें:

मैंने इसे और अधिक के साथ खेलने की कोशिश की है और सामान्य तौर पर ऐसा लगता है कि परिणाम GEOS का उपयोग करते हुए और QGIS के साथ दोनों अविश्वसनीय हैं (जो कि fTools का उपयोग करता है, मुझे नहीं पता कि क्या बदले में वह फिर से GEOS का उपयोग करता है)। ग्रिड के आकार को बताने में मैं गलत था कि इसका परिणामों से कोई लेना-देना नहीं है - ग्रिड जितना बड़ा होगा, परिणाम उतने ही अच्छे होंगे (यह जानना अच्छा है लेकिन फिर भी समाधान नहीं है)। यहाँ वास्तव में काम कर रहे ग्रिड का एक स्क्रीनशॉट है जो ज्यादातर काम करता है, लेकिन एक टाइल में आंशिक रूप से विफल रहा:

यहाँ छवि विवरण दर्ज करें

ज्यामिति साफ है - QGIS "Check Validity" टूल के साथ 0 त्रुटियां दिखाता है। मैं इस समस्या को एक कदम से कदम फैशन में नहीं देख रहा हूं; यह देखते हुए कि कुछ विशेषताएं किसी डेटासेट पर प्रतिच्छेदन को विफल करती हैं या नहीं, यह तब बड़ा होता है जब इसकी दृष्टि स्पष्ट नहीं होती (और यह छोटी टाइलों के साथ नहीं होगी) व्यावहारिक नहीं है।


आपको दुनिया या ऑस्ट्रेलिया का आकार कहां से मिला? मुझे संदेह है कि उस फ़ाइल की ज्यामिति में कुछ समस्याएँ हो सकती हैं (वेक्टर की कोशिश करें। ज्यामिति उपकरण | QGIS में ज्यामिति वैधता की जाँच करें)। बस एक छोटे से विश्व आकृति और 5 डिग्री टाइल पर एक प्रतिच्छेद की कोशिश की है और यह QGIS में पूरी तरह से काम करता है।
सिमबामुंग

1
जियोसाइंस ऑस्ट्रेलिया (20 एमबी) और 4 डिग्री टाइल्स से 100K ऑस्ट्रेलियाई समुद्र तट के साथ यह कोशिश की, यह भी ठीक काम करता है (QGIS 1.7.4, OSX 10.7)। क्या आप अपने डेटा और अधिक विस्तार से वर्णन कर सकते हैं कि आपने क्या किया?
सिंबांगु

सभी अतिरिक्त जानकारी के लिए धन्यवाद। मुझे संदेह है कि OSM डेटा के बारे में कुछ अजीब है; मेरे द्वारा बताए गए डेटासेट के साथ इसे आज़माएं और देखें कि क्या आपको बेहतर परिणाम मिलते हैं। मुझे याद है कि अतीत में OSM झील डेटा के साथ कुछ अजीबता का अनुभव होता है, इसे देखने की कोशिश करेंगे।
सिंबांगु

क्या आप डेटासेट साझा कर सकते हैं, या यहां तक ​​कि इसका एक क्लिप्ड हिस्सा (जैसे ऊपर आपके उदाहरण में)?
सिंबांगु

जवाबों:


7

मैंने ऐसा करने के लिए अपने स्वयं के उपकरण बनाना समाप्त कर दिया।

मैंने अपने डेटा सेट अप को विभाजित करने के लिए OGR के साथ क्लिपर लाइब्रेरी ( http://www.angusj.com/delphi/clipper.php ) का उपयोग किया । ध्यान देने योग्य बात यह है कि इस परिवाद के साथ चौराहों का प्रदर्शन बहुत लंबा होता है, इसलिए मैंने इसके बजाय एक चतुष्कोणीय दृष्टिकोण का उपयोग किया ... यानी, चार ग्रिड कोशिकाओं में विभाजित करें, उनमें से प्रत्येक को चार और अधिक में विभाजित करें, आदि, जब तक कि आप अपना वांछित संकल्प प्राप्त नहीं करते। हालांकि यह बहुत अच्छा काम करता है, मैंने एक स्क्रीनशॉट संलग्न किया है जो पूर्वी गोलार्ध पर परिणाम दिखाता है:

यहाँ छवि विवरण दर्ज करें

उपरोक्त परिणाम ने 1.33GHz प्रोसेसर पर लगभग 4.5 घंटे का समय लिया।

यहाँ उपकरण हैं जब कोई व्यक्ति भविष्य में इसी तरह के मुद्दे पर चलता है। कृपया ध्यान दें कि वे प्रूफ-ऑफ-कांसेप्ट को एक साथ हैक कर रहे हैं और आपको शायद उन्हें सीधे उपयोग नहीं करना चाहिए (हालांकि कुछ के लिए एक अच्छा शुरुआती बिंदु के रूप में काम कर सकते हैं):

https://github.com/preet/scratch/tree/master/gis/polytoolkit

https://github.com/preet/scratch/tree/master/gis/shapefiles/shptk


लिंक किए गए कोड अब उपलब्ध नहीं हैं :-(
शॉन मैकडॉनल्ड्स

मैंने रिपॉजिटरी को github.com/preet/scratch/tree/master/gis/polytoolkit पर स्थानांतरित कर दिया । आप जो पूरा करने की कोशिश कर रहे हैं, उसके आधार पर, आप अधिक उपयोगी होने के लिए github.com/preet/scratch/tree/master/gis/shapefiles/shptk पा सकते हैं ।
प्रिस

बाद में एक और उपयोगी है। मुझे अब एक ऐसा तरीका मिल गया है जो PostGIS का उपयोग करता है, हालांकि यह पता लगाने में दिलचस्पी होगी कि क्या यह कोई तेज़ था। क्या आपके पास संकलन और स्थापना के लिए रीडमी है?
शॉन मैकडॉनल्ड्स

क्या आप लिंक को ठीक करने के लिए अपने उत्तर को संपादित कर सकते हैं? धन्यवाद
Afr

4

यह निश्चित रूप से लगता है जैसे आपके पास ज्यामिति मुद्दे हैं। यह संभावना नहीं है कि उपयोग किए गए सॉफ़्टवेयर की परवाह किए बिना एक गंदे इनपुट फ़ाइल से स्वच्छ परिणाम प्राप्त करने में सक्षम होगा, जब तक कि आप पहली बार अपनी ज्यामिति समस्याओं का समाधान नहीं करते हैं। एक बार जब आप अपने ज्यामिति के मुद्दों को हल कर लेते हैं, तो आप निम्नलिखित कोशिश कर सकते हैं यदि आप अभी भी समस्याएँ हैं:

1) सुनिश्चित करें कि आपके ग्रिड डेटासेट में आपकी दुनिया बहुभुज डेटासेट के समान प्रक्षेपण है। यदि नहीं, तो उचित प्रक्षेपण में इसे फिर से बनाएँ।

2) सभी सुविधाओं को एकल भाग में बदलें - प्रक्रिया के लिए बहुत आसान है

3) केवल आईडी क्षेत्र को रखते हुए सभी बाहरी क्षेत्रों को हटा दें जो आपको चौराहे के प्रदर्शन के बाद वापस अपनी विशेषताओं में शामिल होने में सक्षम करेगा - फिर से प्रक्रिया करने के लिए बहुत आसान है

4) पूरी दुनिया के बहुभुज डेटासेट के साथ पूरे ग्रिड डेटासेट को इंटरसेप्ट करने के बजाय, अपने ग्रिड पॉलीगन्स पर लूप आज़माएं, अपने वर्ल्ड डेटासेट में इंटरसेक्टिंग पॉलीगॉन का चयन करें और अपने ग्रिड पॉलीगॉन के आधार पर क्लिप का प्रदर्शन करें। यह आपको किसी भी समस्या को अलग करने में सक्षम करेगा और अंत में आप अपने मूल लक्ष्य को प्राप्त करने के लिए परिणामों को एक साथ मिला सकते हैं।

5) बड़े ग्रिड बहुभुज का उपयोग करने का प्रयास करें।


+1 वास्तव में दिलचस्प है - यदि आप आईडी फ़ील्ड, या मल्टीपार्ट, डेटा में रखते हैं तो यह जियोप्रोसेसिंग गति को कितना प्रभावित करता है?
सिंबांगु

1
मैंने वास्तव में मतभेदों की मात्रा निर्धारित करने की कोशिश नहीं की है। मैं केवल अनुभव से बात कर सकता हूं जहां ओवरलींग जियोप्रोसेसिंग ऑपरेशन विफल हो गए और ये इस तरह की चीजें हैं जो समस्या को हल करने में मदद करती हैं।
ब्रेंट एडवर्ड्स

मैं (2) बिल्कुल भी काम करने में असफल रहा। सुविधाओं का चयन करना और QGIS का उपयोग करके उन्हें मर्ज करने की कोशिश करना मूल रूप से मेरे सिस्टम को लॉक करने के लिए लगता है - शायद इसकी अभी भी प्रसंस्करण सामग्री, लेकिन उस दर पर यह व्यावहारिक नहीं है: मैंने क्यूजीआईएस के साथ रात भर अपना सिस्टम छोड़ दिया, फिर भी कुछ विशेषताओं को विलय करने की कोशिश कर रहा हूं। डेटासेट और यह अभी भी सुबह में चल रहा था।
प्रिस

1
इसमें कोई विलय शामिल नहीं होना चाहिए। लक्ष्य मल्टीपार्ट सुविधाओं को विस्फोट करना है। उदाहरण के लिए, असफल टाइल के आपके स्क्रीनशॉट में, लक्ष्य आपके सभी रिकॉर्डों को विस्फोट करने के लिए है, जो अलग-अलग, एकल भाग बहुभुज रिकॉर्डों में अलग-अलग, एकल भाग बहुभुज अभिलेखों के साथ द्वीप की विशेषताओं जैसे समूह, स्थानिक रूप से विच्छिन्न बहुभुज में विस्फोट करते हैं। यह क्यूजीआईएस में वेक्टर> ज्यामिति उपकरण मेनू के तहत "मल्टीपार्ट टू सिंगलपार्ट्स" टूल का उपयोग करके प्राप्त किया जा सकता है।
ब्रेंट एडवर्ड्स

एक बार जब आप एकल भाग की सुविधा में परिवर्तित हो जाते हैं, तो आपको अपनी ज्यामिति को फिर से सत्यापित करना चाहिए, बस यह निश्चित होना चाहिए कि सब कुछ साफ है।
ब्रेंट एडवर्ड्स

0

एक और तरीका यह हो सकता है कि एक बिंदु डेटासेट बनाने के लिए वेक्टर-टू-रैस्टर रूपांतरण का प्रयास करें और फिर अपनी टाइलें बनाने के लिए कुछ कोड लिखने के लिए आधार डेटा के रूप में बिंदु डेटासेट का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.