确定地理点是否落在地理多边形线上

时间:2015-11-12 14:38:29

标签: sql-server geospatial sql-server-2014

据我所知,您无法使用类似的东西来检查地理点是否接触到地理多边形(请参阅here),这在几何世界中是可能的:

WHERE A.Geo.STTouches(@s0) = 1

有没有办法在地理世界中实现这一目标?我想解决方案是将地理多边形+地理点转换为几何等价物?

PS:

这也应该适用于复杂的多边形 - 例如带有洞的那个:

POLYGON((99.999999999999986 5.3926387744713564E-14,101.00000000000001 5.3926387744713564E-14,100.99999999999987 1.0000000000000155,100.00000000000013 1.0000000000000155,99.999999999999986 5.3926387744713564E-14),(100.20000000000003 0.19999999999992918,100.19999999999989 0.79999999999990257,100.80000000000011 0.79999999999990234,100.79999999999998 0.19999999999992912,100.20000000000003 0.19999999999992918))

enter image description here

1 个答案:

答案 0 :(得分:2)

我假设我想要跟踪给定点是否与多边形的边界相交。以下应该可以解决问题:

SELECT @point.STIntersects(@polygon.RingN(1));

本质上,你得到RingN(1)的外边界(我假设这是一个简单的多边形,所以第一个环应该是外边界),然后检查是否 与你关心的点相交。

编辑:如果你想检查一个给定点是否位于给定多边形中任何环的边界上,这样的东西应该可以解决这个问题:

select n.n as [IntersectedRingNumber], 
   @polygon.RingN(n) as [IntersectedRing]
from dbo.Numbers as n
where n <= @polygon.NumRings()
   and @point.STIntersects(@polygon.RingN(n)) = 1;