Postgis ile Poligondaki Noktaları Sayma


16

Basit bir sorunum var: Bir çokgen kümesi içindeki nokta sayısını saymak istiyorum.

Zaten bir SQL var ama sadece aslında puan içeren çokgen gideri verir.

Tablolarım: 19.000 sıralı bir çokgen katmanı ve 450 sıralı bir nokta katmanı.

Aşağıdaki SQL

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

yalnızca gerçekte nokta içeren 320 çokgen döndürür. Ama puanların 0 olduğunu düşünsem bile, tüm çokgenlerin geri dönmesini istiyorum.

Tabii ki bu benim WHERE maddesim ile ilgili. Nerede st_contains koymak gerekir?

Teşekkürler Carsten



teşekkürler, ama hepsinin WHERE yan tümcesi var. İhtiyacım var mı bilmiyorum. Nasıl yeniden yazardınız?
hoge6b01

Yanıtlar:


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;

Merhaba Nicklas, bu cevabı posta listesinden aldı, değil mi? Herkese teşekkürler
hoge6b01

2
Hayır, üzgünüm, benzer mi? İlişkisel veritabanlarıyla uğraşırken dış birleşmeler roket bilimi değildir ;-)
Nicklas Avén

1
:-) Listeyi kontrol etmek zorunda kaldım. Zamanlamaya bak. Benim cevabım liste-cevap önce, ama dediğin gibi, çok benzer :-)
Nicklas Avén

-1

Bu başına kalan birleştirmeler GiST endekslerinde desteklenmez.

Tavsiye edebilir miyim:

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
Sorgu, uzamsal dizinler kullanmaz: expla.depesz.com/s/U6Iy . Nicklas cevap yapar: explain.depesz.com/s/nhH
nickves
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.