当前位置:  开发笔记 > 数据库 > 正文

SQL Geography Intersect始终返回1

如何解决《SQLGeographyIntersect始终返回1》经验,为你挑选了1个好方法。

我正在尝试确定一个点是否在多边形内.无论该点是否在边界内,我回来的结果似乎总是返回1.

DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(54.2225,-4.5366, 4326)
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((54.2826 -4.4420, 54.2904 -4.6564, 54.0467 -4.7031, 54.2826 -4.4420))', 4326)

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon)

我正在使用本地运行的SQL Express 2014



1> Ben Thul..:

你有一个经典的问题.在几何多边形中指定点的顺序是有意义的.正如你所定义的那样,你已经创建了一个多边形,它是整个地球的一个小洞.幸运的是,对这个问题和修复的测试都相当容易.

DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((54.2826 -4.4420, 54.2904 -4.6564, 54.0467 -4.7031, 54.2826 -4.4420))', 4326)
set @polygon = @polygon.ReorientObject();
select @polygon.EnvelopeAngle()

如果您将呼叫注释掉ReorientObject(),您将看到包络角度为180度.这是我个人使用的启发式方法,看看是否存在环定向问题.您也可以查看该区域STArea().无论哪种方式,重新定向的对象都是您可能期望的,并且在进行交叉测试时应该给您更好的结果!


你会喜欢这个:`POINT()`方法采用与你为多边形提供的WKT相反的参数!也就是说,正如您所定义的那样,您已经切换了纬度和经度.检查`SELECT @ polygon.STPointN(1).[Lat],@ point.[Lat]`
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有