返回包含 SQL Server 2014 中的点的多边形名称

Returning Polygon Name that contains a point in SQL Server 2014

我有一个 table 的 40 个多边形,它们包含名称、ID 和几何图形。我有第二个 table 地址,它自己的几何图形表示为点。我使用 geometry::UnionAggregate.

聚合了 40 个多边形

我希望能够 return 一个点的多边形 ID,特别是来自我的 table 个地址。 以下是我的代码,但我为 40 个多边形中的每一个都得到了一个真值 (1)。对于实际包含该点的多边形,我期待 39 nulls 和“1”。这是因为它现在将聚合的多边形视为一个实体,因此它们都包含该点吗?

我是空间查询的新手,可能遗漏了一些非常明显的东西,但希望得到一些帮助。

declare @n geometry
set @n = (select geometry::UnionAggregate(sp_geometry) from Polygons)
declare @p geometry
set @p = (select sp_geometry from PointData);

select n.id from Polygons n, pointdata p
where @n.MakeValid().STWithin(@p) = 1

UnionAggregate 将是一个多边形,它是 table 中所有多边形的并集(做 @n.ToString() 并向自己证明)。因此,您已经失去了与您的点相交的多边形的保真度。您需要针对各个多边形进行测试。我会这样做:

select *
from dbo.Polygons as poly
join dbo.PointData as point
   on poly.STIntersectects(point.sp_geometry) = 1;