如何找到两个多边形的边相交的点?

时间:2016-05-12 11:24:31

标签: sql-server

我正在尝试找到两个SQL几何(多边形)的边相交的点 - STIntersects给出了交叉区域,但没有给出边相交的位置。

1 个答案:

答案 0 :(得分:1)

因为多边形代表其中包含的区域,所以它们的交叉点本身就是一个区域。但是,如果你计算边界的交集,你应该得到你正在寻找的东西。即:

declare 
    @a geometry = geometry::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 0),
    @b geometry = geometry::STGeomFromText('POLYGON((1 1, 1 3, 3 3, 3 1, 1 1))', 0),
    @c geometry


select @c = @a.STBoundary().STIntersection(@b.STBoundary());

select @c.STPointN(n).ToString()
from Util.dbo.Numbers as n
where n.n <= @c.STNumPoints();

最后一个选择是为了演示的目的而点缀。在一般情况下,我不知道交点将是一组点(例如,当两个多边形共享边时,交点将是共享边)。