[英]SQL Geography Datatype , checking Point in Polygon , STIntersects producing wrong result
我正在尝试检查多边形中的点,但是STIntersect产生了错误的结果,下面给出了点和多边形。
DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(25.631119, 54.666181, 4326)
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON
((55.368827104612151 25.270499845366924, 55.368226289792808
25.268578811810126, 55.367410898252288 25.269529630198974,
55.368054628415855 25.270364015710307, 55.368827104612151
25.270499845366924))', 4326)
SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)
结果返回1,但是它应该返回0,因为我从栅栏的一边选取了点,
我对多边形坐标有任何错误吗? 请告知我我的任何愚蠢错误,因为我是空间数据类型的新手。
为了“解决”这个问题,我们需要进行某种形式的假设。 如果假设不能为“指示用户输入遵循左手规则的多边形”,那么我们必须使用其他方法。
在这里,我假设多边形的正确“感觉”无论在哪种方向上都意味着它包围着最小的区域:
DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(25.631119, 54.666181, 4326)
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON
((55.368827104612151 25.270499845366924,
55.368226289792808 25.268578811810126,
55.367410898252288 25.269529630198974,
55.368054628415855 25.270364015710307,
55.368827104612151 25.270499845366924))', 4326)
SET @polygon = CASE
WHEN @polygon.STArea() > @polygon.ReorientObject().STArea()
THEN @polygon.ReorientObject()
ELSE @polygon
END
SELECT @polygon
(您可能还希望在CASE
之前执行普通的SELECT @polygon
,以查看原始SELECT @polygon
)
但是,请仔细注意上述假设的含义-如果您的用户可能希望提供“整个行星减去这个东向55度/北向25度的小区域”,那么现在您将无法接受该值。
参考- STArea
ReorientObject
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.