आर्कगिस डेस्कटॉप का उपयोग करके एक शेपफाइल से अतिव्याप्त बहुभुज की गणना?


10

मेरे पास 16,400 बहुभुजों के साथ एक आकृति है। प्रत्येक बहुभुज पूरी दुनिया के लिए एक पक्षी प्रजाति के विस्तार को दर्शाता है।

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

अब मुझे ओवरलैपिंग बहुभुज गिनना होगा। मैंने इसे संघ के साथ आजमाया और भंग किया (संघ की गणना), लेकिन संघ इतने बहुविवाह के लिए काम नहीं कर रहा है।

फिर मैंने महाद्वीपों को क्लिप करने की कोशिश की, लेकिन बहुभुज की विशाल संख्या के कारण यह भी काम नहीं कर रहा है। इसके अलावा मैंने इस विधि की कोशिश की , वह भी बिना सफलता के।

इसलिए मैं आपसे पूछ रहा हूं कि अगर 16400 पॉलीगॉन एक शेपफाइल में हैं, तो क्या ओवरलैपिंग पॉलीगॉन की गणना करने का कोई तरीका है?

मैं 10.0 के साथ काम कर रहा हूं और 10.2 के साथ काम कर सकता हूं। एक ArcPy समाधान भी अद्भुत है।

फिलहाल मैं एक फिशनेट बनाने के बारे में सोच रहा हूं और 16400 पॉलीगोन के साथ shp की पंक्तियों पर पुनरावृति करता हूं और एक फिशनेट सेल के मान क्षेत्र में 1 लिखता हूं यदि पॉलीगॉन इस सेल में है और अगली पंक्ति (बहुभुज और) लें अगर यह भी फिशनेट सेल गिनती +1 में है।

लेकिन मुझे नहीं पता कि यह एक अच्छा समाधान है और इसे कैसे महसूस किया जाए। या मुझे इस दृष्टिकोण का उपयोग करने के लिए आर सीखना है

परिणाम: यह एक ऐसा आकार होना चाहिए जहां आपके पास अतिव्यापी लोगों से बाहर नए बहुभुज हों और एक क्षेत्र जहां ओवरलैप गिने जाते हैं।

इसलिए अंत में एक आकृति होनी चाहिए जहां आप देख सकते हैं कि एक ही स्थान पर कितने पक्षी प्रजातियां पाई जाती हैं।


आपकी समस्या आपके डेटासेट के आकार के कारण एक समस्या है। उत्तर (और आपके द्वारा प्रस्तावित लिंक) सही हैं, लेकिन आपके पास स्मृति समस्याएँ होंगी। हो सकता है कि आप पहले अपने डेटा पर कुछ सौ मीटर (उम्मीद की सटीकता के आधार पर) के साथ एकीकृत करने का प्रयास कर सकते थे ताकि अरबों के स्लिवर पॉलीगॉन के निर्माण से बचा जा सके)। कॉपी पर काम करना सुनिश्चित करें क्योंकि यह आपके डेटा को संशोधित करेगा।
राडौक्सु

1
हमारी आकृति-आकृति को क्षेत्रीय आकार-प्रकार में विभाजित करें, फिर क्षेत्रीय आकृति-आकृति पर विश्लेषण चलाएँ, और फिर उन्हें पूर्ण फ़ाइल को फिर से प्राप्त करने के लिए भंग करें।
til_b

मैंने सिर्फ एक देश के साथ इस आकृति को क्लिप करने की कोशिश की लेकिन मुझे 999999 वापस मिल गया।
नोरा

1
क्या आपने अपने बहुभुजों की जटिलता को कम करने के लिए पासा उपकरण को देखा है ? इसके अलावा अगर आपको 999999 की त्रुटि हो रही है, तो अपने डेटा को क्लिप करने की कोशिश कर रहे हैं, क्या आपने चेक ज्यामिति उपकरण को देखने की कोशिश की है कि क्या कोई अंतर्दृष्टि फेंकता है?
हॉर्नबीड

2
मैंने डेटा पर एक आंशिक ज्यामिति की जांच की और बहुत सारे आत्म-चौराहे हैं। मैं सुझाव दूंगा 1. अधिकतम रैम उपयोग और बड़े पेजफाइल को सुनिश्चित करें। 2. मरम्मत ज्यामिति 3. यदि आवश्यक हो, तो बहुभुज को सरल बनाएं 3. 1 / 3s या 1 / 4S (या जो भी आवश्यक हो) के लिए डेटा को सुव्यवस्थित करें। रन-यूनियन-डिसॉल्व-रस्टर वर्कफ़्लो जैसा कि इस उत्तर में है ।
कपास। रौकवुड

जवाबों:


9

मैं काउंट ओवरलैपिंग फीचर्स (विश्लेषण) टूल का उपयोग करने की सलाह दूंगा

इनपुट सुविधाओं से ग्रहों की अतिव्यापी विशेषताएं उत्पन्न करता है। अतिव्यापी सुविधाओं की गिनती आउटपुट सुविधाओं के लिए लिखी गई है।

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


मैंने भी यह कोशिश की, और यह मेरे shp (बहुत बड़े) के लिए काम नहीं कर रहा है। उत्तर देने के लिए धन्यवाद
नोरा

1
@ लिंक लिंक मृत है। अब प्रो में यह कार्यान्वयन है: pro.arcgis.com/en/pro-app/tool-reference/analysis/…
अल्बर्ट

1
धन्यवाद @Albert, आपकी सिफारिशों के आधार पर पोस्ट अपडेट किया गया है।
आरोन

5

चापी ज्यामिति के टोकन का उपयोग करके, आप कुछ इस तरह की कोशिश कर सकते हैं:

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

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

ऊपर के सैंपल डेटा के लिए, कोड निम्नलिखित ओवरलैप काउंट को लौटाएगा: यहां छवि विवरण दर्ज करें

के रूप में कोड केवल उन पॉलीगनों के लिए रिटर्न काउंट करेगा जिनके पास कम से कम एक ओवरलैप है।


@ Nxau: ठीक है, मुझे लगता है कि मैंने यह समझाने की गलती की कि परिणाम कैसा दिखना चाहिए। यह एक ऐसा आकार होना चाहिए जहां आपके पास अतिव्यापी लोगों में से नए बहुभुज हों। उदाहरण के लिए आपकी तस्वीर में वृत्त 4 और 5 अतिव्यापी हैं। नए आकार में तीन बहुभुज होने चाहिए। (संघ इस बड़े आकार के लिए काम नहीं कर रहा है)। ओवरलैपिंग क्षेत्र में एक क्षेत्र में मान 2 होना चाहिए और बाकी हलकों 4 और 5 का मूल्य इस क्षेत्र में 1 होना चाहिए। इसलिए अंत में एक आकृति होनी चाहिए जहां आप देख सकते हैं कि एक ही स्थान पर कितने पक्षी प्रजातियां पाई जाती हैं। आपकी स्क्रिप्ट के लिए धन्यवाद!
नोरा

5

एक बहुत ही सरल विधि है:

  1. संघ के साथ ही शेपफ़ाइल;
  2. मल्टीपार्ट आउटपुट को सिंगल पार्ट में कन्वर्ट करें ;
  3. ओवरलैप को गिनने के लिए स्थानिक जुड़ने वाले उपकरण का उपयोग करें (are_IDENTICAL_TO मिलान विकल्प का उपयोग करें);
  4. join_countक्षेत्र का उपयोग कर प्रतीक ।

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


1

मुझे लगता है कि आपने इस विधि की कोशिश की है: आर्कगिस डेस्कटॉप में बहुभुज ओवरलैप्स की गिनती और रेखांकन करना?

16,400 बहुभुज वह नहीं है। हालांकि, एक संभावित समाधान केवल एक नियमित स्थानिक जुड़ाव करना है। में ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Join

समान डेटासेट में दोनों targetऔर joinसुविधाएँ सेट करें और आउटपुट निर्दिष्ट करें। बाकी सेटिंग्स छोड़ दें।

कुछ क्षणों के बाद आपको एक आकृति आकृति वापस मिलनी चाहिए जिसमें "जॉइन काउंट" कॉलम शामिल है। इसमें से 1 घटाएं (जैसा कि स्पष्ट रूप से प्रत्येक सुविधा को खुद को काटना चाहिए), और यह कि प्रत्येक बहुभुज के लिए "ओवरलैप्स" (वास्तव में प्रतिच्छेदन) की संख्या होनी चाहिए।

मैंने अभी इस पर प्रदर्शन किया


हां, मैंने पहले ही लिंक से दृष्टिकोण की कोशिश की। लेकिन इस shp के लिए संघ का उपयोग करना असंभव है। स्थानिक जुड़ने की कोशिश करने से मुझे यह वापस मिल गया: ERROR 000426: मेमोरी से बाहर।
नोरा

मैं इसे सिर्फ 4GB रैम वाली मशीन पर चला रहा हूं और इसमें लगभग 5 गुना ज्यादा फीचर हैं, इसलिए मुझे आश्चर्य है कि यह बहुत कम संख्या के साथ काम नहीं कर रहा है। आपके डेटा में बहुत सारे वर्टिकल हो सकते हैं (मेरा लगभग 60MB था; आपकी बड़ी .shp फ़ाइल कितनी बड़ी है?)। इसे सामान्य करने का प्रयास करें।
जीआईएस-जोनाथन

अगर सिर्फ shp ​​fgdb में है तो fgdb में 1,73 GB है। एक फ़ोल्डर में आकार 2,00GB है।
नोरा

मैंने इस डेटा सेट का भी उपयोग किया है और मुझे लगता है कि कई समस्याएं उत्पन्न होती हैं क्योंकि पॉलीगनों में से कुछ के कई भाग होते हैं। संकल्प के साथ संयोजन के रूप में यह एक बहुत ही स्मृति गहन कार्य करता है।
कॉटन.रोकवुड

@ कॉटन.रॉकवुड: और आप आर में समाधान ढूंढते हैं, है ना? मुझे लगता है कि टूलबॉक्स 'काउंट ओवरलैपिंग पॉलीगन्स' का उपयोग बहुभुज की तुलना में 500 पॉलीगॉन (33 सेलेक्शन) के इनपुट के साथ किया जा सकता है, जो कि "जॉइन काउंट" के साथ रैस्टर में होता है और अंत में रैस्टर (मॉडलब्यूलर) की गणना करता है। एक लंबा समय लगता है ...
नोरा

1

मैंने डाउनलोड किया और "काउंट ओवरलैपिंग पॉलीगन्स" टूल आज़माया। यह काम कर सकता है, लेकिन इसमें काफी समय लगता है (शायद फ़ाइल आकार के कारण, लेकिन मेरे इनपुट FC में केवल <5,000 रिकॉर्ड थे)।

जब मैं उस उपकरण को चलाने के लिए इंतजार कर रहा था, मैंने एक और आर्कपॉइंट विंडो खोली और यह केवल एक त्वरित कदम उठाता है जो मुझे चाहिए था। 1) स्थानिक सम्मिलित हों - लक्ष्य और सम्मिलित सुविधाओं के रूप में एक ही सुविधा वर्ग का उपयोग करके और "एक से कई में शामिल हों" विकल्प का चयन करें। 2) भंग - अंतिम चरण से आउटपुट का उपयोग करना। "TARGET_FID" को विघटित फ़ील्ड के रूप में उपयोग करें और उन आँकड़ों के लिए जिन्हें आप "Join_Count" फ़ील्ड में शामिल कर सकते हैं या "JOIN_FID" फ़ील्ड को COUNT कर सकते हैं। 3) चरण 2 से आउटपुट फाइल में, फ़ील्ड कैलकुलेटर का उपयोग सांख्यिकी क्षेत्र ("SUM_Join_Count", या "COUNT_JOIN_FID" से 1 को घटाएं) - चूंकि प्रत्येक सुविधा स्वयं को अंतर करती है।

मैं "काउंट ओवरलैपिंग बहुभुज" टूल पर इस पद्धति का उपयोग करने का सुझाव देता हूं। मैंने इसे शामिल करने से पहले सीओपी टूल ~ 5 मिनट चलाना शुरू कर दिया-> भंग करने की विधि और इसने मुझे "काउंट ओवरलैपिंग बहुभुज" टूल को समाप्त करने से पहले इसे लिखने के लिए पर्याप्त समय के साथ परिणाम दिया।

उम्मीद है की यह मदद करेगा!

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