更新字段以使用STIntersects给出多边形中的点数?


11

我有一个点图层(dbo.ptLayer)

  • 约1M点
  • 空间几何类型(dbo.ptLayer.geom)
  • 尚无空间索引,但一旦数据收集完成便会创建一个空间索引。

我有一个多边形图层(dbo.polygonLayer)

  • 大约500个多边形。
  • 空间几何类型(dbo.polygonLayer.geom)

两者都有称为ID的字段。

如何在多边形层中填充一个空的整数字段,并计算每个多边形内的点总数?

尽管我可以使用其他软件产品,但我仍然有兴趣学习纯在SQL和SQL Server中可以完成的工作。

我相信我应该利用STIntersects,但想知道进行更新以填充该字段的最佳方法是什么。

Answers:


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

这是我对我的一个数据集运行该查询的结果

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.