Apakah boleh mengelompokkan berdasarkan geometri?
Kami melakukan banyak penghitungan poin dengan geometri poligon, yang melibatkan memotong data terlebih dahulu untuk menghitung instance siswa. menurut batas sekolah, kelompok blok, dll:
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
Langkah kedua adalah membungkus sub-kueri untuk bergabung dengan geometri dari tabel poligon kembali ke kueri hitung:
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
Tapi sepertinya Anda juga bisa menggunakan geometri dalam GROUP BY:
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
Apakah termasuk geometri dalam GROUP BY pendekatan yang benar?
postgis
grouping
st-geometry
DPSSpatial
sumber
sumber
GROUP BY
Anda? Bukankah itu bisa digabungkan dengan kunci uniknbhd_id
? Anda membuat semacam itu lebih luas, yang meningkatkan runtime, mungkin lebih dari sekadar gabungan berikutnya.Jawaban:
Hampir tidak ada yang salah dengan pengelompokan berdasarkan geometri dalam kasus ini, karena Anda sudah dikelompokkan berdasarkan ID unik (
nbhd_id
). Dan, seperti yang Anda tunjukkan, ini membuat Anda bergabung dan membuat kueri lebih bersih.Penting untuk mengetahui bahwa
GROUP BY geom
klausa dalam PostGIS 2.3 dan sebelumnya sebenarnya mengelompokkan baris berdasarkan kesetaraan kotak pembatas, bukan persamaan geometrik. Dengan data nyata yang tidak dibuat-buat, ini sering memiliki efek yang sama dengan pengelompokan pada persamaan geometrik (dan jauh lebih cepat), tetapi mungkin tidak menghasilkan hasil yang diharapkan ketika beberapa poligon berbeda memiliki kotak pembatas yang sama. Dimulai pada PostGIS 2.4,GROUP BY
beroperasi pada definisi yang kaku tentang persamaan geometrik, dengan mempertimbangkan titik awal dan orientasi geometri.Karena Anda sudah dikelompokkan
nbhd_id
, Anda masih akan melihat baris terpisah walaupun dua poligon lingkungan yang berbeda berbagi kotak pembatas.sumber