पोस्टगिस के साथ बहुभुज में अंक गिनें


16

मुझे एक साधारण समस्या मिली है: मैं बहुभुज के एक सेट के भीतर अंकों की संख्या गिनना चाहता हूं।

मेरे पास पहले से ही एक एसक्यूएल है, लेकिन यह केवल पॉलीगोन के जीआईडी ​​को वापस देता है जिसमें वास्तव में अंक होते हैं।

मेरी टेबल: 19.000 पंक्तियों के साथ एक बहुभुज परत और 450 पंक्तियों के साथ एक बिंदु परत।

निम्नलिखित एसक्यूएल

select grid.gid, count(*) AS totale FROM grid, kioskdhd3 WHERE 
st_contains(grid.geom,kioskdhd3.geom) GROUP BY grid.gid;

केवल कुछ 320 बहुभुज लौटाएं जिनमें वास्तव में अंक हों। लेकिन मैं चाहता हूं कि सभी पॉलीगॉन लौट आए, यहां तक ​​कि अंकों की संख्या 0 है।

बेशक इसका मेरे WHERE-क्लॉज के साथ क्या करना है। मुझे अपने st_contains को कहां रखना है?

धन्यवाद Carsten



धन्यवाद, लेकिन वे सब एक WHERE-खंड है। मुझे नहीं पता कि मुझे एक की आवश्यकता है। आप इसे कैसे लिखेंगे?
hoge6b01

जवाबों:


23
SELECT grid.gid, count(kioskdhd3.geom) AS totale 
FROM grid LEFT JOIN kioskdhd3 
ON st_contains(grid.geom,kioskdhd3.geom) 
GROUP BY grid.gid;

हाय Nicklas, मेलिंग सूची से यह जवाब मिला, है ना? सभी को धन्यवाद
hoge6b01

2
नहीं, क्षमा करें, क्या यह समान है? खैर, एक बाहरी
जुड़ाव

1
:-) मुझे सूची की जाँच करनी थी। टाइमिंग देखिए। यहाँ मेरा उत्तर सूची-उत्तर से पहले था, लेकिन जैसा कि आपने कहा, बहुत ही समान :-)
निकल्स एवन

-1

इस बाएं जोड़ प्रति व्यक्ति GiST सूचकांकों में समर्थित नहीं हैं।

क्या मैं सुझा सकता हूं:

SELECT grid.gid, 
       SUM(CASE WHEN st_contains(grid.geom,kioskdhd3.geom) THEN 1 ELSE 0 END) AS total
FROM grid, kioskdhd3 
GROUP BY grid.gid;

1
क्वैरा स्थानिक अनुक्रमित का उपयोग नहीं करता है: Explan.depesz.com/s/U6Iy । Nicklas जवाब है: explain.depesz.com/s/nhH
nickves
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.