PostGIS में बिंदुओं के एक सेट का केंद्रक कैसे प्राप्त करें?


16

मैं PostgreSQL का उपयोग PostGIS एक्सटेंशन के साथ करता हूं।

मेरे पास the_geomएक तालिका से कॉलम में बिंदुओं का एक सेट है myschema.myobjects। मैं इस क्लस्टर के केन्द्रक को प्राप्त करने के लिए एक चयन कथन बनाना चाहता हूँ, इसलिए इस तरह के एक चुनिंदा कथन से:

SELECT the_geom FROM myschema.myobjects

मुझे एक कथन के लिए सही वाक्यविन्यास खोजने की आवश्यकता है:

SELECT ST_AsText(ST_Centroid( (SELECT the_geom FROM myshema.myobjects) ));

जवाबों:


21

आपको इस तरह संघ कार्य का उपयोग करना होगा

SELECT att1, st_centroid(st_union(geom)) as geom
FROM schema.table
GROUP BY att1;

तो आप एक ही विशेषता वाले बिंदु के केन्द्रक को प्राप्त कर सकते हैं।


6

PostGIS में एक ही ज्यामिति में कई ज्यामितीयों के संयोजन के लिए दो कार्य हैं जिन्हें आप इनपुट के रूप में उपयोग कर सकते हैं ST_Centroid

ST_Collect बस उन्हें संशोधित किए बिना ज्यामितीय का एक सेट जोड़ती है।

वैकल्पिक, ST_Unionकई ज्यामितीय "विघटित" करेगा और अनावश्यक घटकों को हटा देगा। यह संभवतः वह नहीं है जो आप इस एप्लिकेशन के लिए चाहते हैं।

अंतर देखने के लिए, तुलना करें:

 SELECT ST_AsText(ST_Centroid(ST_Union(geom))) FROM 
 (VALUES ('POINT (0 0)'), ('POINT (2 2)'), ('POINT (2 2)')) sq (geom);

 -- POINT(1 1)

तथा

 SELECT ST_AsText(ST_Centroid(ST_Collect(geom))) FROM 
 (VALUES ('POINT (0 0)'), ('POINT (2 2)'), ('POINT (2 2)')) sq (geom);

 -- POINT(1.33333333333333 1.33333333333333)

इस मामले में, ST_Unionडुप्लिकेट बिंदु को हटा दिया है, जबकि ST_Collectइसे बरकरार रखा है।


4

यदि आप प्रदर्शन की तलाश कर रहे हैं तो इस क्वेरी का उपयोग करें:

SELECT avg(ST_X(the_geom)) as lon, avg(ST_Y(the_geom)) as lat FROM table

यह आपको कम या ज्यादा आउटपुट देता है:

SELECT ST_AsText(ST_Centroid(ST_Collect(the_geom))) FROM table

@dbaston जवाब में पसंद है, लेकिन तेज है और अधिक मेमोरी का उपयोग नहीं करता है।

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