Feld aktualisieren, um mithilfe von STIntersects die Anzahl der Punkte im Polygon anzugeben?

11

Ich habe eine Punktebene (dbo.ptLayer)

  • Rund 1 Million Punkte
  • Typ der räumlichen Geometrie (dbo.ptLayer.geom)
  • Noch kein räumlicher Index, erstellt jedoch einen, sobald die Datenerfassung abgeschlossen ist.

Ich habe eine Polygonebene (dbo.polygonLayer)

  • Rund 500 Polygone.
  • Typ der räumlichen Geometrie (dbo.polygonLayer.geom)

Beide haben Felder namens ID.

Wie fülle ich ein leeres ganzzahliges Feld in der Polygonebene mit der Gesamtzahl der Punkte in jedem Polygon aus?

Obwohl ich Zugriff auf andere Softwareprodukte habe, bin ich daran interessiert zu erfahren, was nur in SQL und SQL Server möglich ist.

Ich glaube, ich sollte STIntersects verwenden , möchte aber wissen, wie ein Update am besten durchgeführt werden kann, um dieses Feld auszufüllen .

Simon
quelle

Antworten:

17

Dies sollte tun, was Sie brauchen:

Eine ausgewählte Abfrage:

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

Mit einem Update:

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

Dies ist das Ergebnis davon, dass ich diese Abfrage für einen meiner Datensätze ausgeführt habe

Geben Sie hier die Bildbeschreibung ein

Nathan W.
quelle