Обновление поля для подсчета количества точек в многоугольнике с помощью STIntersects?

11

У меня есть слой точек (dbo.ptLayer)

  • Около 1 млн. Баллов
  • Тип пространственной геометрии (dbo.ptLayer.geom)
  • Пока еще нет пространственного индекса, но он будет создан после завершения сбора данных.

У меня есть слой многоугольника (dbo.polygonLayer)

  • Около 500 полигонов.
  • Тип пространственной геометрии (dbo.polygonLayer.geom)

Оба имеют поля с именем ID.

Как заполнить пустое целочисленное поле в слое многоугольника, с подсчетом общего количества точек в каждом многоугольнике?

Хотя у меня есть доступ к другим программным продуктам, мне интересно узнать, что можно сделать исключительно в SQL и SQL Server.

Я считаю, что я должен использовать STIntersects, но хотел бы знать, каков наилучший способ сделать обновление для заполнения этого поля.

Саймон
источник

Ответы:

17

Это должно сделать то, что вам нужно:

Выборочный запрос:

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

С обновлением:

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

Это результат того, что я выполнил этот запрос на одном из моих наборов данных

введите описание изображения здесь

Натан У
источник