PostGIS का उपयोग कर सामयिक संबंधों की पहचान करना


16

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

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

हालाँकि, मुझे यह समझने में थोड़ी कठिनाई हो रही है कि क्या करना है। जब मैंने उदाहरण की नकल करने की कोशिश की तो इसके कुछ हिस्से थे जो मुझे समझ नहीं आए।

-- Returns the sequence, edge id
-- , and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

मुझे यकीन नहीं है कि क्या topologyतालिका, स्तंभ या फ़ंक्शन का एक हिस्सा है। मैंने मान लिया कि यह तालिका थी, लेकिन मुझे यकीन नहीं है।

-- try out on sample of data
-- Table is called 'TestArea', column used is 'fid_1'
SELECT t.seq, t.edge, geom
FROM  TestArea.ST_GetFaceEdges('fid_1', 1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

मुझे यह भी पता नहीं है कि आंतरिक जुड़ने का कार्य क्या है - क्या यह मूल वस्तु के परिणाम में शामिल होता है?


4
मुझे पता है कि अंडरडार्क ने अपने चरित्रहीन आरेखों के साथ इसका उत्तर दिया है, लेकिन मुझे इस बात पर यकीन नहीं है कि क्या आपके पॉलीगॉन पहले स्थान पर स्थाई रूप से संबंधित हैं। टोपोलॉजी, इस मामले में, उनके दृश्य प्रतिनिधित्व से अलग संस्थाओं के बीच एक तार्किक संबंध का अर्थ है, और (PostGIS में) के साथ एक स्कीमा स्थापित करने की आवश्यकता है CreateTopologyऔर इसी तरह ( बिट.लीक / लोके 8 क्यूवाई ) लेकिन जिस तरह से आपकी इमारतों का डिजिटलीकरण मुझे दिखता है। जैसे वे अपने किनारों के दृश्य निकटता के बावजूद टोपोलॉजिकल रूप से अलग हैं। भविष्य के प्रश्नकर्ताओं को जागरूक करने के लिए बस कुछ।
MerseyViking

क्या इसका मतलब यह होगा कि AddTopoGeometryColumnक्वेरी चलाने से पहले मुझे तालिका में जोड़ना होगा ? ST_Touchesमूल्यों से परिणामों के आधार पर मैंने सभी समझदारी की जाँच की लेकिन शायद वह संयोग से था।
djq

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

जवाबों:


19

आप इसके बजाय ST_Touches का उपयोग कर सकते हैं :

ST_Touches - यदि किसी व्यक्ति के पास कम से कम एक बिंदु सामान्य है, तो TRUE लौटाता है, लेकिन उसके अंदरूनी हिस्से को नहीं काटता है।

ST_Touches उदाहरण के लिए TRUE लौटाता है

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

मायने रखता है कुछ इस तरह काम करना चाहिए:

SELECT a.id, count(*)
FROM polygon_table as a
JOIN polygon_table as b
  ON ST_Touches(a.the_geom,b.the_geom)
GROUP BY a.id

मुझे यह जानने में दिलचस्पी है कि प्रत्येक बहुभुज कितने बहुभुज को छूता है। अन्यथा यह एकदम सही है, और मुझे इसे चलाने के लिए मिला है!
djq

1
मुझे बस एहसास हुआ कि यह हर मामले के लिए एक सच्चा / गलत मूल्य देता है इसलिए मुझे केवल इतना ही गिनना है कि कितने सच्चे मूल्य हैं। धन्यवाद!
djq

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