判断地理点是否落在地理多边形线上
determine if geography point falls on geography polygon line
我知道您无法使用类似这样的方法检查地理点是否接触到例如地理多边形(参见 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))
我假设您想要跟踪给定点是否与多边形边界相交的声明。下面应该可以解决问题:
SELECT @point.STIntersects(@polygon.RingN(1));
本质上,你得到的是 RingN(1)
的外边界(我假设这是一个简单的多边形,所以第一个环应该是外边界)然后检查是否 那与你关心的点相交
编辑:如果你想检查给定点是否位于给定多边形中 any 环的边界上,像这样的事情应该可以解决问题:
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;
我知道您无法使用类似这样的方法检查地理点是否接触到例如地理多边形(参见 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))
我假设您想要跟踪给定点是否与多边形边界相交的声明。下面应该可以解决问题:
SELECT @point.STIntersects(@polygon.RingN(1));
本质上,你得到的是 RingN(1)
的外边界(我假设这是一个简单的多边形,所以第一个环应该是外边界)然后检查是否 那与你关心的点相交
编辑:如果你想检查给定点是否位于给定多边形中 any 环的边界上,像这样的事情应该可以解决问题:
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;