क्या PostGIS में ज्यामिति द्वारा समूह बनाना ठीक है?


17

क्या ज्यामिति से समूह बनाना ठीक है?

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

SELECT
  n.nbhd_id
  , count(*) AS count_burglaries
FROM denver.crime AS c
  JOIN denver.neighborhoods AS n
    ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id

दूसरा कदम सब-क्वेरी में लपेटना है ताकि बहुभुज तालिका से काउंट क्वेरी में वापस ज्यामिति में शामिल हो सकें:

SELECT

count.*
, n.nbhd_name
, n.geom
FROM (
SELECT
n.nbhd_id
, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id

) AS count

JOIN denver.neighborhoods AS n
ON count.nbhd_id = n.nbhd_id

लेकिन ऐसा लगता है कि आप ग्रुप बाय में भी ज्यामिति का उपयोग कर सकते हैं:

SELECT
n.nbhd_id
, n.nbhd_name
, n.geom

, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id, nbhd_name, n.geom

एक सही दृष्टिकोण से ग्रुप में ज्यामिति शामिल है?


आपको क्या GROUP BYफायदा होता है? क्या यह एक अद्वितीय कुंजी द्वारा शामिल होने योग्य नहीं है nbhd_id? आप सॉर्ट को व्यापक बना रहे हैं, जो रनटाइम को बढ़ाता है, संभवतः बाद के ज्वाइन से अधिक।
विंस

1
यह मुझे nbhd_id पर शामिल होने के लिए उप-क्वेरी के रूप में गिनती क्वेरी को लपेटने की अनुमति नहीं देता है - यदि यह ज्यामिति द्वारा समूह में रनटाइम बढ़ाता है, तो यह ऐसा नहीं करने का एक संभावित कारण है, क्या आप नहीं कहेंगे?
DPSSpatial

जवाबों:


18

इस मामले में ज्यामिति द्वारा समूहीकरण के साथ लगभग निश्चित रूप से कुछ भी गलत नहीं है, क्योंकि आप पहले से ही एक अद्वितीय आईडी ( nbhd_id) द्वारा समूहीकरण कर रहे हैं । और, जैसा कि आप बताते हैं, यह आपको जुड़ने से बचाता है और क्वेरी क्लीनर बनाता है।

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

क्योंकि आप पहले से ही समूह बना रहे हैं nbhd_id, तब भी आपको अलग-अलग पंक्तियाँ दिखाई देंगी, भले ही दो अलग-अलग पड़ोस पॉलीगॉन एक बाउंडिंग बॉक्स साझा करें।


क्या पॉल के इस लेख से इस उत्तर पर कोई बदलाव आया है? blog.cleverelephant.ca/2017/09/postgis-operators.html
DPSSpatial
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.