Campo di aggiornamento per contare i punti nel poligono usando STIntersects?


11

Ho un livello punti (dbo.ptLayer)

  • Circa 1 milione di punti
  • Tipo di geometria spaziale (dbo.ptLayer.geom)
  • Nessun indice spaziale ancora, ma ne creerà uno una volta completata la raccolta dei dati.

Ho un layer poligonale (dbo.polygonLayer)

  • Circa 500 poligoni.
  • Tipo di geometria spaziale (dbo.polygonLayer.geom)

Entrambi hanno campi chiamati ID.

Come faccio a popolare un campo intero vuoto nel livello poligonale, con un conteggio del numero totale di punti all'interno di ciascun poligono?

Anche se ho accesso ad altri prodotti software, sono interessato a sapere cosa si può fare esclusivamente in SQL e SQL Server.

Credo che dovrei fare uso di STIntersects ma vorrei sapere qual è il modo migliore di fare un aggiornamento per popolare questo campo.

Risposte:


17

Questo dovrebbe fare quello che ti serve:

Una query selezionata:

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

Con un aggiornamento:

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

Questo è il risultato di me che eseguo quella query su uno dei miei set di dati

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.