[英]Returning Polygon Name that contains a point in 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.