Hitung Poin dalam Poligon dengan Postgis

16

Saya punya masalah sederhana: Saya ingin menghitung jumlah poin dalam satu set poligon.

Saya sudah punya SQL tetapi hanya mengembalikan gid dari polygone yang sebenarnya mengandung poin.

Tabel saya: lapisan poligon dengan 19.000 baris dan layer titik dengan 450 baris.

SQL berikut

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

hanya mengembalikan 320 poligon yang benar-benar mengandung poin. Tapi saya ingin semua poligon dikembalikan, bahkan mengira jumlah poin adalah 0.

Tentu saja itu ada hubungannya dengan klausa WHERE saya. Di mana saya harus meletakkan st_contains?

Carsten terima kasih

hoge6b01
sumber
terima kasih, tetapi mereka semua memiliki klausa WHERE. Saya tidak tahu apakah saya membutuhkannya. Bagaimana Anda akan menulisnya kembali?
hoge6b01

Jawaban:

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 Avén
sumber
Hai Nicklas, dapatkan jawaban ini dari milis, kan? Terima kasih semuanya
hoge6b01
2
Tidak, maaf, Apakah mirip? Nah,
gabungan
1
:-) Saya harus memeriksa daftar. Lihatlah waktunya. Jawaban saya di sini adalah sebelum daftar- jawaban, tetapi seperti yang Anda katakan, sangat mirip :-)
Nicklas Avén
-1

Per ini kiri bergabung tidak didukung indeks GIST.

Bolehkah saya merekomendasikan:

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;
raphael
sumber
1
Querry tidak menggunakan indeks spasial: jelas.depesz.com/s/U6Iy . Nicklas menjawab: menjelaskan.depesz.com/s/nhH
nickves