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

时间:2016-05-12 15:20:19

标签: sql-server spatial-query

我有一个包含40个多边形的表,它们包含name,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

1 个答案:

答案 0 :(得分:1)

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

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