PostGIS'te geometriye göre gruplamak uygun mudur?


17

Geometriye göre gruplamak uygun mudur?

Öğrencilerin örneklerini saymak için önce verilerin kesişmesini içeren çokgen geometrileri ile çok sayıda sayım noktası yapıyoruz. okul sınırı, blok grubu vb.

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

İkinci adım, geometriyi çokgen tablosundan sayım sorgusuna geri birleştirmek için bir alt sorguyu sarmaktır:

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

Ama görünüşe göre GROUP BY'da geometriyi de kullanabilirsiniz:

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

GROUP BY'a geometri eklemek doğru bir yaklaşım mıdır?


GROUP BYSize ne kazandırır? Eşsiz bir anahtarla birleştirilemez nbhd_idmi? Sıralamayı genişletiyorsunuz, bu da çalışma zamanını, muhtemelen bir sonraki birleşmeden daha fazla artırıyor.
Vince

1
Sayım sorgusunu nbhd_id'e katılmak için bir alt sorgu olarak sarmama izin vermiyor - geometriye göre gruplama zamanını arttırırsa, bunu YAPMAMAK için olası bir neden var mı?
DPSSpatial

Yanıtlar:


18

Bu durumda geometriye göre gruplandırmada neredeyse hiçbir yanlışlık yoktur, çünkü zaten benzersiz bir ID ( nbhd_id) ile gruplandırıyorsunuzdur . Ve işaret ettiğiniz gibi, size birleştirme kaydeder ve sorguyu daha temiz hale getirir.

GROUP BY geomPostGIS 2.3 ve daha önceki bir cümlenin aslında satırları geometrik eşitliğe değil sınırlayıcı kutu eşitliğine göre grupladığını bilmek önemlidir . Gerçek, tutarsız verilerle, bu genellikle geometrik eşitlik üzerinde gruplandırma ile aynı etkiye sahiptir (ve çok daha hızlıdır), ancak birden fazla farklı çokgen aynı sınırlama kutusuna sahip olduğunda beklenen sonuçlar üretmeyebilir. PostGIS 2.4'ten başlayarak GROUP BY, geometrilerin başlangıç ​​noktası ve yönelimi dikkate alınarak katı bir geometrik eşitlik tanımı üzerinde çalışır.

Zaten gruplandırdığınız için nbhd_id, iki farklı komşu çokgen sınırlayıcı kutuyu paylaşsa bile ayrı satırlar göreceksiniz.


Paul'ün bu makalesinde bu cevapta herhangi bir değişiklik var mı? blog.cleverelephant.ca/2017/09/postgis-operators.html
DPSSpatial
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.