【问题标题】:Returning Polygon Name that contains a point in SQL Server 2014返回包含 SQL Server 2014 中的点的多边形名称
【发布时间】:2016-05-13 03:30:47
【问题描述】:

我有一个包含 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

【问题讨论】:

    标签: sql-server spatial-query


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 Ben 感谢您的回答,返回的正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多