SQL 地理相交始终返回 1

标签 sql sql-server gis spatial sql-server-2014-express

我正在尝试确定一个点是否在多边形内。无论该点是否在边界内,我得到的结果似乎总是返回 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

最佳答案

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

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()检查该区域。无论哪种方式,重新定向的对象都是您可能期望的,并且在进行相交测试时应该为您提供更好的结果!

关于SQL 地理相交始终返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580480/

相关文章:

MySQL 函数/循环

sql - 带分组的复数和

c# - 使用 Microsoft.SqlServer.Management.Smo 从 StoredProc 获取结果列而不执行它

sql-server - SQL Server 2016安装错误

postgresql - 我应该为我的应用程序使用什么 SRID 以及如何使用?

mysql - 当多边形有错误时如何从 WKT 在 Ruby 中创建 RGeo 多边形

MySQL 查询 : ID not equal and with multiple LIKE operator not working

sql - PostgreSQL 错误 : there is no unique constraint matching given keys for referenced table

sql - 将查询作为参数发送给 SQL 函数

hadoop - 如何按点和相应的多边形连接 2 个配置单元表?