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



我有一个由40个多边形组成的表,它们包含名称、id和几何体。我有第二个地址表,它自己的几何图形用点表示。我已经使用geometry::UnionAggregate聚合了40个多边形。

我希望能够返回多边形的id,特别是从我的地址表中的一个点。以下是我的代码,但我为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将是一个多边形,它是表中所有多边形的并集(执行@n.ToString()并向自己证明)。因此,您已经失去了与点相交的多边形的保真度。您需要针对各个多边形进行测试。我会这样做:

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

最新更新