SQL Server几何:多个多边形的交集

时间:2012-07-25 19:47:17

标签: sql-server geometry polygon spatial

我在表格中有多个多边形(ImageId int, Quality float, Border geometry)。

如何使用具有更高性能的T-SQL函数找到所有多边形的相交?是否有任何函数有助于在没有迭代的情况下找到交叉点,并且没有比较每个多边形与每个或任何样本如何做到这一点。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:4)

我不是现在可以测试它的地方,但如果空间聚合像其他聚合一样工作(即字符串+字符串),那么试试吧:

declare @intersection geometry;
select top 1 @intersection = border
from #polygons;

select @intersection = border.STIntersects(@intersection)
from #polygons;

select @intersection.STIsEmpty();

如果我正确地完成了我的工作,@ onterection应该包含表格中所有多边形的交集。

答案 1 :(得分:2)

除了将每个多边形与其他多边形进行比较之外,我认为你无法做到这一点。

select p1.id, p2.id, p1.border.STIntersects(p2.border)
from #polygons p1
    inner join #polygons p2 on p1.id<p2.id

答案 2 :(得分:0)

通过使用podiluska的代码作为我的基本代码,我已经实现了您的目标。然而,它不是非常高效。我希望有人可以提供更快的查询。

select geometry::UnionAggregate(inter_geometry) as intersection_union
from
(
    select p1.id as id1, p2.id as id2, p1.border.STIntersection(p2.border) as inter_geometry
    from #polygons p1
    inner join #polygons p2 on p1.id < p2.id
    where p1.border.STIntersects(p2.border) = 1
) t
where t.inter_geometry.STArea() > 0 --for some cases STIntersects returns 1 but the area is 0
通过UnionAggregate的方式

是SQL Server 2012的功能。