बहुभुज के बीच प्रवाह (कनेक्शन + मान) स्थानांतरित करना


14

QGIS में कोशिकाओं और एक अतिरिक्त परत के बीच बढ़ते डेटा का प्रतिनिधित्व करने वाले दो आकृति-चित्र हैं, नीचे दी गई छवि देखें

Example_of_shapefiles


इसके द्वारा परिभाषित गतिमान डेटा:

  • बहुभुज "LayerA"(लाल रूपरेखा के साथ पारदर्शी वर्ग)। इसके अलावा यह भी कोशिकाओं के भीतर आंदोलनों का प्रतिनिधित्व करने वाले मंडलियों से संबंधित है, "LayerA"जियोनाइड्रोइड्स की स्थिति पर कल्पना की गई है ।

    LayerA_AT

  • पॉलीलाइन लेयर "Flows"(पीले / ग्रे तीर), "LayerA"फीचर्स के जियोन्थ्रोइड के बीच कनेक्शन के माध्यम से मूल्यों को व्यक्त करते हैं

    Flows_AT


लक्ष्य परत:

  • बहुभुज "LayerB"(गहरे भूरे रंग की रूपरेखा के साथ प्रकाश बकाइन की विशेषताएं)।

    LayerB_AT

इसके अतिरिक्त, मैंने पहले ही पॉलीगोन "FLUX"से कोशिकाओं के भीतर और मूवमेंट मूवमेंट को ट्रांसफर कर "LayerA"दिया है "LayerB", मेरा पिछला सवाल देखें: QGIS में पॉलीगॉन के बीच इनहेरिट किया हुआ मान? । यह का उपयोग किया गया था %की $areaगणना।


वहाँ एक सार्थक समाधान / स्थानांतरित करने का दृष्टिकोण हो सकता है / प्रसारण / रूपांतरित होने वाले प्रवाह कनेक्शन के प्रतिनिधित्व वाले "Flows"के संबंधों से और अपने मूल्यों "LayerA"के संबंधों में "LayerB"

मैं पॉलीलाइन के रूप में उन कनेक्शनों को कैसे प्राप्त कर सकता हूं?

इसके अतिरिक्त, नए प्रवाह को एक समान शैली विरासत में मिलेगी "Flows"

अनुरोध के द्वारा, मैं डेटा का एक नमूना प्रदान कर सकता हूं।

प्रवाह की सुविधाओं के बीच नहीं उपलब्ध नहीं होगा "LayerA", लेकिन की सुविधाओं के बीच "LayerB" । तालिका / उत्पत्ति-गंतव्य मैट्रिक्स के रूप में संभव के "FLUX"बीच कनेक्शन के लिए विशेषता (यानी / से) प्राप्त करना मुख्य उद्देश्य है "LayerB"


कुछ आवश्यकताएं / मानदंड हैं जिनका पालन किया जाना चाहिए:

1. एक ही सेल में फीचर्स के पुर्जों (पीले रंग में चयनित) के बीच कोई फ्लो कनेक्शन नहीं हैं

condition_1

2. एक ही विशेषता के बीच कोई संबंध नहीं हैं यहां तक ​​कि इसके हिस्से विभिन्न कोशिकाओं में हैं

condition_2

3. कनेक्शन सुविधाओं के कुछ हिस्सों "LayerB"( "Union"आउटपुट के आधार पर ) के बीच मौजूद होते हैं, अगर वे पूरी तरह से दो अलग "LayerA"सेल सुविधाओं के भीतर हों

condition_3

4. नया-नया "FLUX"जो संदेश दे रहा है, उसकी गणना नीचे दी गई छवि के अनुसार की जाएगी।

उदाहरण के लिए, दो कोशिकाओं के बीच एक संबंध है Iऔर II, कहां "FLUX"है 100। अन्य मूल्यों को मानते हुए, "NEW_FLUX"बीच A'और B''आसपास होगा 1.5625100केवल एक ही उदाहरण है।

condition_4


संदर्भ:


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

1
स्पष्ट करने के लिए, क्या हम इस GSE चैट रूम पर अधिक स्वतंत्र रूप से चर्चा कर सकते हैं: chat.stackexchange.com/rooms/92038/… ?
जे। मोंटिकोलो

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

जवाबों:


4

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

यहाँ कोड है:

WITH inter_ab AS ( 
--create intersection between LayerA and LayerB 
SELECT LayerA.id || '_' || LayerB.FLAECHEID AS id, 
LayerA.id AS id_a, 
ST_AREA(LayerA.geometry) AS area_a, 
LayerB.FLAECHEID AS id_b, 
ST_INTERSECTION(LayerB.geometry, LayerA.geometry) AS geom 
FROM LayerA, LayerB 
WHERE ST_INTERSECTION(layerB.geometry, layerA.geometry) IS NOT NULL 
),

--calculation of the new flux value 
new_flux AS (SELECT t1.id_b AS origine, 
t2.id_b AS dest, 
SUM(Flows.flux * ST_AREA(t1.geom) / t1.area_a * ST_AREA(t2.geom) / t2.area_a) AS value  
FROM inter_ab t1, inter_ab t2, flows 
-- no connection between the same feature 
WHERE t1.id <> t2.id 
-- rule 1 
AND t1.id_a <> t2.id_a 
-- rule 2 
AND t1.id_b <> t2.id_b 
-- get flow data 
AND flows.origine = t1.id_a 
AND flows.dest = t2.id_a 
GROUP BY t1.id_b, t2.id_b
)

--create flows between original layerB features
SELECT new_flux.origine,
new_flux.dest,
new_flux.value AS flux,
make_line(ST_CENTROID(t3.geometry), ST_CENTROID(t4.geometry)) AS geom --ST_MakeLine under postGIS
FROM LayerB t3,
LayerB t4,
new_flux
WHERE t3.FLAECHEID = new_flux.origine
AND t4.FLAECHEID = new_flux.dest

ग्राफिकल आउटपुट जैसा दिखेगा

उत्पादन

परिणाम मैन्युअल रूप से परीक्षण किया गया था। "FLUX"मूल्यों में अंतर उपेक्षित है।

अंतिम आउटपुट शैलियों से विरासत में मिलेगा "Flow"और जैसा दिखेगा

Output_Final

मैं कुछ डेटा के साथ परीक्षण करने के लिए सलाह देते हैं, और अगर यह बड़े डेटा सेट के लिए बहुत समय लगता है, चरण दर चरण पर अमल प्रश्नों ( "inter_ab", "new_flux") और परिणाम को बचाने और अगले क्वेरी निष्पादित करें।


1
क्षमा करें, मैं फ्रेंच हूं और मैं Polygon_bपरत के रूप में एक खुले फ्रेंच टाउनशिप डेटाबेस का उपयोग करता हूं , और यह महत्वपूर्ण क्षेत्र है id_geofla। मैंने सुधार किया।
जे। मोंटिकोलो

1
मैंने स्पष्टीकरण जोड़ा है, आशा है कि मदद करता है।
जे। मोंटिकोलो

1
हाँ, पॉलीगॉन होने का इसका सही तरीका है। मैंने पूरे बहुभुज_बी परतों और बहुभुज_ए के लिए सुधार किए हैं । ** मान ** यदि कोई प्रवाह संबंध बनाता है। मेरे लिए, परिणाम एक लाइन लेयर नहीं है, बल्कि सीधे पॉलीगॉन_ बी लेयर है जिसके साथ पॉलीगॉन_ए मान फ्लो लेयर द्वारा आयात किया जाता है।
जे। मोंटिकोलो

4

आप तीन परतों के बीच एक जुड़ाव कर सकते हैं, फिर कुल मिलाकर layerB। आभासी परतों का उपयोग किया जा सकता है। मुझे यकीन नहीं है कि यदि महत्वपूर्ण डेटा परत में layerAया अंदर है flow.. यहाँ एक (अप्रयुक्त) संभावना है:

SELECT b.id, b.geometry, sum(a.myVar)
FROM layerB b
LEFT JOIN flow f
   ON ST_Intersects(ST_EndPoint(f.geometry),b.geometry)
 JOIN layerA a
   ON ST_Intersects(ST_StartPoint(f.geometry),a.geometry)
GROUP BY b.id

मैंने इस समाधान की कोशिश की है यह काम करता है। महत्वपूर्ण डेटा में है "Flows"
टारस

@ तारास महान! आप इस तरह के sum(f.flow_var)या यहां तक ​​किsum(fl.flow_var * a.poly_var)
JGH
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.