点和多边形之间的 STDistance 始终返回 0,即使它们相距数英里



我正在尝试使用地理类型获取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(),它应该可以纠正问题。

最新更新