QGIS का उपयोग करते हुए पड़ोसी बहुभुज के मूल्यों का सारांश?


11

मुझे आशा है कि आप निम्नलिखित समस्या से मेरी मदद कर सकते हैं: मेरे पास एक वेक्टर (बहुभुज) परत है। मैं परत के लिए एक विशेषता जोड़ना चाहूंगा कि - हर बहुभुज के लिए - अपने सभी पड़ोसी बहुभुजों के एक विशिष्ट क्षेत्र के मूल्यों को बोता है।

अधिक ठोस उदाहरण देने के लिए: मेरे पास जिलों की बहुभुज परत है जिसमें जनसंख्या की जानकारी है। अब, हर जिले के लिए मैं जानना चाहूंगा कि इसके सभी पड़ोसी जिलों में कितने लोग रहते हैं।

जैसा कि मेरे पास 300 से अधिक जिले हैं, मैं प्रत्येक और हर जिले के लिए इसे हाथ से नहीं कर सकता।

वहाँ किसी भी तरह से यह और अधिक कुशलता से QGIS है?

जवाबों:


8

स्पैटियालाइट और एसक्यूएल के साथ इस तरह की बात सबसे अच्छी होती है।

सबसे पहले आपको आपको डेटा को एक स्पैटियालाइट डेटाबेस में लोड करना होगा जो कि QBM के साथ काम करने वाले DBManager प्लगइन का उपयोग करके किया जा सकता है। आयात पर क्लिक करें Layer/File button

डेटाबेस में अपने डेटा के साथ आप फिर SQLबटन का उपयोग करके निम्नलिखित क्वेरी चला सकते हैं । आपको अपने डेटा के अनुरूप कॉलम और तालिकाओं के नाम बदलने होंगे।

SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours, 
        a1.pop, 
        a1.name, 
        a1.id, 
        a1.geomm FROM areas a1
LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id 
                            AND intersects(a2.geomm, a1.geomm)
GROUP BY a1.id

क्वेरी टूल को अपना यूनिक आईडी कॉलम (आईडी) और ज्योमेट्री कॉलम (जिओम) बताएं, फिर बस लोड पर क्लिक करें।

इस तरह से लेबल लगाने के बाद आपको कुछ इस तरह का होना चाहिए

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

क्वेरी ब्रेकडाउन

हम परत का उपयोग करके स्वयं से जुड़ रहे हैं:

LEFT OUTER JOIN areas a2 ON NOT a1.id = a2.id 
                            AND intersects(a2.geomm, a1.geomm)

लेकिन केवल जहाँ ज्यामितीय प्रतिच्छेद करते हैं और आईडी समान नहीं होते हैं, अन्यथा हम प्रत्येक बहुभुज के लिए दो बार एक ही रिकॉर्ड के साथ समाप्त होते हैं। हम इसका उपयोग भी कर रहे हैं LEFT OUTER JOINताकि हम उन रिकॉर्ड्स को शामिल करें जो इसमें शामिल नहीं हैं अर्थात जिनके पास कोई पड़ोसी नहीं है।

चयनित भाग में:

SELECT COALESCE(SUM(a2.pop),0) as pop_neighbours, 
            a1.pop, 
            a1.name, 
            a1.id, 
            a1.geomm

हम (नहीं पड़ोसियों) COALESCEको परिवर्तित करने के लिए उपयोग कर रहे हैं अन्यथा वे बस बने रहते हैं ।NULLS0NULL

तब हम बस GROUP BY a1.idइतना करते हैं कि हमें प्रत्येक बहुभुज के लिए एक एकल रिकॉर्ड मिलता है।


नाथन, आपके उत्तर और उपयोगी स्पष्टीकरण के लिए बहुत धन्यवाद। यह भी कुल स्थानिक और एसक्यूएल शुरुआत के लिए काम किया!
एलेक्स

+1 "क्वेरी ब्रेकडाउन" अनुभाग अच्छी तरह से किया गया है और बहुत उपयोगी है।
whuber

@ अच्छा सामान। स्वीकार करें बटन पर टिक करना न भूलें।
नाथन डब्ल्यू

2

ऐसा करने का एक और तरीका GRASS (GRASS टूलबॉक्स का उपयोग करके या सीधे GRASS में) है। नीचे दिए गए उदाहरण में, परत ईए देशों के साथ एक वेक्टर परत है और विशेषता तालिका में प्रति देश जनसंख्या के साथ एक स्तंभ है। अधिक विस्तृत विवरण के लिए इस पोस्ट को देखें ।

चरण 1) बाउंड्री से जुड़ी विशेषता तालिका के साथ नई परत बनाएं, जिसमें दो कॉलम हैं जिसमें बहुभुज की आईडी क्रमशः बाईं और दाईं ओर सीमा रेखा की सीमा बनाती है।

v.category EA out=EAc layer=2 type=boundary option=add
v.db.addtable EAc layer=2 col="left integer,right integer"
v.to.db EAc option=sides col=left,right layer=2 type=boundary

चरण 2) सभी पड़ोसी देशों की जनसंख्या के योग के साथ देश के आईडी को जोड़ने वाली तालिका बनाने के लिए एक SQL चलाएँ:

db.execute sql="CREATE TABLE tmp AS
SELECT ID, sum(pop) as population FROM (
SELECT DISTINCT EAc_2.left as ID, EAc.pop as pop
FROM EAc_2
LEFT JOIN EAc ON EAc_2.right = EAc.cat
WHERE EAc_2.left > -1 AND EAc_2.right > -1
UNION
SELECT DISTINCT EAc_2.right as ID, EAc.pop as pop
FROM EAc_2
LEFT JOIN EAc ON EAc_2.left = EAc.cat
WHERE EAc_2.left > -1 AND EAc_2.right > -1
) GROUP BY ID"

चरण 3) मूल विशेषता तालिका के साथ नए टेबल tmp में शामिल हों।

v.db.join map=EA@ConsStat layer=1 column=cat otable=tmp ocolumn=ID

आपके वेक्टर लेयर की विशेषता तालिका में अब सभी पड़ोसी देशों की संख्या के साथ एक अतिरिक्त कॉलम होना चाहिए।


2

@ नथन द्वारा शानदार जवाब । मैंने पाइकगिस और सुडौल का उपयोग करके ऐसा करने की कोशिश की। की जाँच करें इस पोस्ट scirpt डाउनलोड और QGIS में इसे चलाने के लिए। इस पद्धति का एक फायदा यह होगा कि आपको परिणाम तालिका के भाग के रूप में मिलते हैं।

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

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