繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM