STIntersects kullanarak çokgendeki noktaların sayısını vermek için alan güncelleniyor mu?


11

Bir puan katmanım var (dbo.ptLayer)

  • Yaklaşık 1 milyon puan
  • Uzamsal Geometri Türü (dbo.ptLayer.geom)
  • Henüz mekansal indeks yok, ancak veri toplama işlemi tamamlandığında bir tane oluşturacak.

Bir çokgen katmanım var (dbo.polygonLayer)

  • Yaklaşık 500 çokgen.
  • Uzamsal Geometri Türü (dbo.polygonLayer.geom)

Her ikisinde de kimlik adı verilen alanlar vardır.

Çokgen katmanındaki boş bir tamsayı alanını, her çokgendeki toplam nokta sayısıyla nasıl doldurabilirim?

Diğer yazılım ürünlerine erişimim olmasına rağmen, tamamen SQL ve SQL Server içinde neler yapılabileceğini öğrenmek istiyorum.

STIntersects'ten yararlanmam gerektiğine inanıyorum, ancak bu alanı doldurmak için bir güncelleme yapmanın en iyi yolunun ne olduğunu bilmek istiyorum.

Yanıtlar:


17

Bu, ihtiyacınız olanı yapmalıdır:

Bir seçme sorgusu:

SELECT polygons.id, Count(*) 
FROM points
JOIN polygons
ON polygons.ogr_geometry.STContains(points.ogr_geometry) = 1
GROUP BY polygons.id

Bir güncelleme ile:

UPDATE polygons
SET [countcolumn] = counts.pointcount
FROM polygons
JOIN
(
 SELECT polygons.id, Count(*) 
 FROM points
 JOIN polygons
 ON polygons.ogr_geometry.STContains(points.ogr_geometry) = 1
 GROUP BY polygons.id
) counts ON polygons.id = counts.id

Bu, veri kümelerimden birinde bu sorguyu çalıştırmamın sonucudur

resim açıklamasını buraya girin

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.