我正在尝试使用地理类型在 MSSQL 中获取从点到多边形的距离。然而,有一大堆多边形总是以 0 距离返回,即使它们位于国家的两端。
在此示例中,点位于伯恩茅斯(英格兰南海岸),多边形位于阿伯丁(苏格兰)。距离返回为 0。
declare @point geography = 'POINT(-1.776684 50.735450)';
declare @polygon geography = 'POLYGON ((-2.092672379931 57.150644202815, -2.0919910988412 57.150551088059, -2.0921198448739 57.150289201548, -2.0927850327096 57.150379407111, -2.092672379931 57.150644202815))';
select @polygon.STDistance(@point) as distance
版本是
Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64)
Aug 15 2017 10:23:29
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 14393: ) (Hypervisor)
最佳答案
我怀疑您的多边形存在常见问题。具体来说,是环方向问题。多边形顶点的定义顺序是有意义的。 SQL Server 中的多边形遵循“左手法则”。这意味着,如果您按顶点顺序围绕多边形的边界行驶,则汽车左侧的区域将被视为多边形的内部。
检查一下,如果您调用 .EnvelopeAngle()
来对抗它会发生什么?如果它显示 180,则您的多边形(如您所定义的)是“整个地球减去阿伯丁”。但一切并没有失去!有一个简单的修复方法 - 针对多边形调用 .ReorientObject()
,它应该可以纠正问题。
关于sql - 点和多边形之间的 STDistance 始终返回 0,即使它们相距数英里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62267640/