एक बहुभुज परत से दूसरे तक की विशेषताओं की नकल करना?


11

मुझे एक समस्या है कि मैं अपना सिर इधर-उधर नहीं कर सकता। मेरे पास दो बहुभुज परतें हैं:

  • बहुभुज A - समान क्षेत्रों के साथ बहुभुज B का एक उपसमूह है और बहुभुज B के समान बहुभुज है
  • बहुभुज B - में वह विशेषता डेटा है जो मैं बहुभुज A में रखना चाहता हूं

यह कैसे किया जा सकता है? मैंने QGIS टूल "Join Attributes by Location" की कोशिश की, लेकिन जैसा कि कुछ पॉलीगॉन दूसरों के भीतर होता है, यह पहले मिलने वाले इंटरसेक्ट (बाहरी पॉलीगॉन) से जुड़ता है।


ए में स्थित विशेषताओं को संरक्षित करने के बहुभुज एक centroids के (अंक) बना सकते हैं और नई फ़ाइल में बी को गुण और निर्यात में शामिल होने के
Mapperz

3
@Mapperz यह एक खतरनाक दृष्टिकोण है, क्योंकि यह त्रुटियों का उत्पादन कर सकता है, हालांकि यह आमतौर पर एक संभावना तलाशने वाला उत्तर उत्पन्न करेगा। यदि बहुभुज एक-दूसरे को ओवरलैप करते हैं, तो सभी दांव बंद हो जाते हैं। जब कोई ओवरलैप नहीं होते हैं, तब भी एक बहुभुज के केंद्रक के लिए एक अलग (गैर-अतिव्यापी) बहुभुज के भीतर झूठ बोलना संभव होता है । सामान्य रूप से सुधार तभी सुनिश्चित किया जा सकता है जब A के सभी बहुभुज गैर-अतिव्यापी और उत्तल हों।
whuber

+1 @ डिएगो - आपका प्रश्न काफी दिलचस्प चर्चा / बहस को जन्म देता है; उस पर एक दिलचस्प एक!
डैनो

जवाबों:


9

@ डानो कुछ मुद्दों को सही तरीके से उठाता है जिन्हें एक पूर्ण उत्तर में सबसे अच्छा संबोधित किया जाता है।

@Celenius द्वारा पहले ही नोट की गई एक कठिनाई यह है कि B और A के बीच एक जुड़ाव (दोनों दिशाओं में) सभी क्षेत्रों को डुप्लिकेट करता है; इसे ठीक करने के लिए यह बहुत अच्छा हो सकता है। मैंने टिप्पणियों में सुझाव दिया है कि स्पष्ट आसान तरीका (एक स्प्रेडशीट के लिए निर्यात) डेटा अखंडता के प्रश्न उठाता है। एक और कठिनाई , पहले से ही सेलेनियस के प्रस्ताव द्वारा संबोधित की गई है, इस समस्या को हल करने वाली चिंताएं जब विशेषताओं का कोई संयोजन ए और बी दोनों के लिए एक कुंजी के रूप में सेवा नहीं कर सकता, क्योंकि यह एक डेटाबेस को शामिल करता है। स्थानिक जुड़ाव उस समस्या के आसपास हो जाता है।

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

उस चयन को प्राप्त करने के बाद, चयन को निर्यात करें और इसे ए। संपन्न की जगह दें ।

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

इस मोड़ पर, हर फ़ील्ड की दो प्रतियां होती हैं: यदि [Foo] A और B के लिए एक सामान्य फ़ील्ड है, तो Join में A. [Foo] और B. [Foo] शामिल हैं। फ़ील्ड गणना का उपयोग करते हुए , B. [Foo] को A. [Foo] में कॉपी करें। सभी आवश्यक क्षेत्रों के लिए दोहराएँ। ऐसा करने के बाद, जॉइन को हटा दें।

यद्यपि यह प्रक्रिया थोड़ी सी खराब हो सकती है जब कई क्षेत्र शामिल होते हैं, इसके गुणों में शामिल हैं

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

इस सुझाव में शामिल कुछ मार्गदर्शक सिद्धांत हैं

  1. इस कार्य के लिए डिज़ाइन किए गए या अनुपयोगी सॉफ़्टवेयर का उपयोग करने के बजाय डेटा को संसाधित करने के लिए अपने डेटाबेस प्रबंधन प्रणाली का उपयोग करें।
  2. डेटाबेस संरचनाओं को बदलने से बचें (जैसे कि फ़ील्ड हटाना या जोड़ना) जब ऑपरेशन को इसकी आवश्यकता नहीं होती है।
  3. स्वचालन के लिए सॉफ्टवेयर की क्षमताओं का उपयोग कार्य को सरल बनाने, उसे दस्तावेज करने और संचालन को प्रतिलिपि प्रस्तुत करने योग्य बनाने के लिए करें।

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


+1 @ व्हिबर - यह स्पष्ट है कि आपने यहां सभी चर का वजन करने का प्रयास किया है; एक अच्छी तरह से सोचा जवाब। कृपया मेरे मूल उत्तर के अलावा देखें, क्योंकि मैं अंतरिक्ष से बाहर चला जाऊंगा कमेंट बॉक्स है।
डानो

1
"सेलेनियस" के बारे में सोच रहे लोगों के लिए इस सूत्र में विभिन्न स्थानों का उल्लेख किया गया है: अब @djq के रूप में जानते हैं, और उसका उत्तर यहाँ है । यडस टू वेबैक मशीन: web.archive.org/web/20120127210858/http://gis.stackexchange.com/…
मैट विल्की

5

आर्कमैप में आप स्थानिक रूप से बहुभुज B से बहुभुज A में जुड़ सकते हैं; यह विशेषताओं से संबंधित होगा। जैसा कि क्षेत्र के नाम समान हैं, यह नाम के कुछ नए संयोजन बनाएगा।


यही मैं डालूंगा। मेरी नजर में, यह संक्षिप्त उत्तर सही है।
साइमन

4

Excel के लिए Shapefile "B" के लिए तालिका निर्यात करें और अनावश्यक रूप से स्तंभों को हटा दें, और किसी भी जानकारी वाले कॉलम की आपको आवश्यकता नहीं है। सुनिश्चित करें कि आप अपना साझा पहचानकर्ता कॉलम रखते हैं, फिर उसे उपयुक्त फ़ोल्डर में सहेजें। ArcMap में जाएं, तालिका जोड़ें, फिर शेपफाइल "ए" पर राइट माउस और एक टेबल जॉइन करें । लिंक को ऐसा करने के तरीके पर एक वीडियो बनाना चाहिए।


@ व्हीबर - संपूर्ण दृष्टिकोण ध्वनि है, और डेटा की अखंडता को सुनिश्चित करता है। इस उत्तर का खंडन करने के लिए मैं केवल एक ही बात कह सकता हूं, वह यह है कि कुछ परिस्थितियां / परियोजनाएं हमारे दृष्टिकोण में इस पद्धति के होने का समय या बजट नहीं देती हैं।

एक सच्चा जीवन उदाहरण:

एक जूनियर माइनिंग कंपनी संसाधन के "साबित करने" की क्षमता पर आराम करने वाले सैकड़ों करोड़ों डॉलर नकद में एक बड़ी परिक्रमा पर बैठी है। प्रकाशनों और भूविज्ञान के नक्शे / डेटा की एक डेस्कटॉप समीक्षा बहुत लक्षित और बहुत महंगा ड्रिल कार्यक्रम की ओर ले जाती है। जब assays पहले रन से वापस आते हैं, तो इन मानों को तालिका में शामिल होने के माध्यम से उनके संबंधित बिंदु स्थानों पर टैग किया जाता है, और एक एक्सेल प्रारूप में वापस पंप किया जाता है जहां डेटा डेटामाइन (3 डी ऑर्बिन इंटरपोलेशन के लिए) में आयात के लिए पहले से तैयार हैं।

मेरे अनुभव में , प्रोजेक्ट जियोलॉजिस्ट्स को यह आवश्यक है कि यह डेटा एक्सेल में रखा जाए, ताकि यह अक्षर (कोई रिक्त स्थान, कोई विशेष वर्ण, आदि) के लिए हर किसी के लिए नियम / कन्वेंशन का पालन न करे और डेटामैइन आयात फ़ाइल एक .csv प्रारूप में वितरित हो। (फिर वैसे भी)। इससे लक्षित ड्रिलिंग में अधिक निवेश होगा, और हम कई बार (कुछ मामलों में) प्रक्रिया को फिर से शुरू करेंगे। यह सब आम तौर पर एक असाधारण तंग और महत्वपूर्ण समय पर हुआ।

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


(-1) किसी से जुड़ने के लिए एक्सेल का उपयोग करना न केवल जीआईएस या आरडीबीएमएस के साथ इसे पूरा करने से अधिक कठिन है, बल्कि गंभीर त्रुटियों को भी आमंत्रित करता है।
whuber

8
एक्सेल सरल है, यह काम करता है, और इसकी वजह से यह शायद कभी तैयार किए गए किसी भी सॉफ़्टवेयर की तुलना में अधिक अनपेक्षित, थोक त्रुटियों के लिए जिम्मेदार है। यह DBMSes के बुनियादी सिद्धांतों का उल्लंघन करता है जो त्रुटियों से बचाने के लिए विकसित किए गए थे जो Excel सभी को प्रतिबद्ध करना बहुत आसान बनाता है, जैसे (1) कुछ स्तंभों को छांटना लेकिन अन्य नहीं; (2) टाइपोग्राफिकल त्रुटियां जो डेटा प्रकार बदलती हैं; (3) आवारा कीस्ट्रोक्स जो डेटा को तिरस्कृत करते हैं; (4) पंक्तियों या स्तंभों का अनजाने में विलोपन; (5) डेटा के छिपे हुए रूपांतरण, जैसे पाठ से तारीखों तक; (6) डेटा का छिपा हुआ छंटनी; (7) संख्यात्मक मूल्यों की छिपी गोलाई; और बहुत सारे।
whuber

2
यह उत्तर और परिणामी टिप्पणी एक अद्भुत चित्रण है कि कैसे एक "बुरा" उत्तर अच्छे परिणामों को आमंत्रित कर सकता है, जानकारी का खुलासा करता है जो अन्यथा प्रकाश में नहीं आ सकता है। कृपया महसूस न करें कि "हिट लेने" से बचने के लिए आपको इसे हटा देना चाहिए।
मैट विल्की

3
... और हिट के लिए बनाने के लिए, एक महान सवाल पूछना होगा कि एक्सेल का उपयोग करने के लिए डेटा को संसाधित करने के लिए बहुत गंभीर समस्याएं क्यों हो सकती हैं। और इसे सुरक्षित रूप से कैसे उपयोग करें।
मैट विल्की


1

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

इस विशेष मामले में समाधान ज्यामिति की विशेषताओं को लाने के बजाय, ज्यामिति को विशेषताओं में लाने के लिए था। इसलिए, अवधारणा:

  1. * Layer_with_attributes * से, बहुभुज हटाएं लेकिन टेबल रिकॉर्ड रखें,
  2. * Layer_with_polys * से * Layer_with_attributes * में ज्यामिति की प्रतिलिपि बनाएँ और चिपकाएँ
  3. मर्ज करें और सहेजें।

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


1

मुझे यकीन नहीं है, लेकिन शायद कुछ DBMS एसक्यूएल (?) में आकृति क्षेत्रों पर समानता संचालन करते हैं। यह मुझे लगता है कि यदि दो ज्यामिति समान हैं तो SQL =ऑपरेटर को सही ( WHERE A.Shape = B.Shape) लौटना चाहिए ।

यदि यह आपके द्वारा उपयोग किए जा रहे डेटाबेस के लिए सही है, तो आपको एक गैर-स्थानिक जुड़ाव के लिए उसी सिंटैक्स का उपयोग करके एक स्थानिक जुड़ाव करने में सक्षम होना चाहिए।


लगता है कि ST_Equals विधि (एक OGC मानक) का उपयोग इसके लिए किया जा सकता है।


0

हमेशा की तरह व्हीबर सही है। आपको अपनी प्रक्रिया के बारे में अच्छी तरह से सोचने की जरूरत है। खासकर यदि ये बड़े डेटासेट हैं और यह ऑपरेशन कई बार किया जाएगा या डेटा मिशन क्रिटिकल है।

अपने डेटा और जिम्मेदारियों पर विचार करें:

यह क्या किया?

तुम क्या कर रहे हो?

आप क्या करने का इरादा रखते हैं?

और हमेशा पूछते हैं: क्यों?


अब पूछे गए सवाल पर सीधे एक आसान उत्तर के लिए। ध्यान में रखते हुए हमेशा चीजों को करने के कम से कम 5 तरीके हैं लेकिन आमतौर पर केवल एक सबसे अच्छा तरीका है।

फुलसेट मान लें कि आपके पास हर वह विशेषता है जो आप सबसेट में होना चाहते हैं और सबसे पुरानी जानकारी के अलावा सबसेट में पहले से कुछ भी नहीं है।

यह मानते हुए कि सबसेट टोपोलॉजी फुलसेट (उत्पत्ति / प्रक्षेपण और XY सहिष्णुता सहित) से मेल खाती है।

1) "अंदर" चेकबॉक्स के साथ प्वाइंट टू प्वाइंट फीचर का उपयोग करें और सब्मिट से पॉइंट्स क्लास या शेपफाइल बनाएं।

2) फुलसेट में एक सेलेक्ट ज्वाइन का उपयोग करें फुलसेट में सभी पॉलीगोन को खोजने के लिए जो नए बनाए गए प्वाइंट फीचर क्लास या शेपफाइल के आधार पर सबसेट के अनुरूप हो।

3) फुलसेट से चयन निर्यात करें, और यह आपका नया सबसेट हो सकता है।


0

निश्चित रूप से, यदि बहुभुज A बहुभुज B का उपसमूह है, तो सबसे आसान तरीका यह होगा कि बहुभुज A के माध्यम से लूप किया जाए, उस पंक्ति डेटा की खोज करने के लिए बहुभुज A (और B यदि A एक उपसमूह या B थे) में उपयोग की जाने वाली ID का उपयोग करें। बहुभुज B और फिर बहुभुज A में पंक्ति को अद्यतन करें।

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