繁体   English   中英

SQL地理数据类型,检查多边形中的点,STIntersects产生错误的结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM