我试图检查多边形中的点,但是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,因为我选择了栅栏的一侧,
我对多边形坐标有什么问题吗?因为我是空间数据类型的新手,请告诉我任何愚蠢的错误。
答案 0 :(得分:1)
为了修复"这个,我们需要做出一些形式的假设。如果假设不能指示用户输入符合左手规则的多边形"然后我们必须使用别的东西。
在这里,我假设正确的"意识"对于多边形而言,无论哪种方式都意味着它包围着最小的区域:
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
(您可能还希望在SELECT @polygon
之前做一个简单的CASE
来查看原始图片的内容。
但是,请仔细注意上述假设的含义 - 如果您的用户可能希望提供"整个行星减去东北55度/北纬25度的这个小区域,那么就有了#34;现在你无法接受这样的价值。
参考文献 - STArea
ReorientObject