stdistance-between-point和polygon始终返回0,即使它们相距几英里

jucafojl  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(197)

我正在尝试使用geography类型获取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)
7fhtutme

7fhtutme1#

我怀疑你的多边形有什么共同的问题。具体来说,就是一个环定向问题。定义多边形顶点的顺序具有意义。SQLServer中的多边形遵循“左手规则”。也就是说,如果你以顶点的顺序绕着多边形的边界行驶,那么你车的左边就是多边形的内部。
如果你打电话来看看会发生什么 .EnvelopeAngle() 反对吗?如果它说180,你的多边形(正如你所定义的)是“整个地球减去阿伯丁”。但一切都没有失去!有一个简单的解决方案 .ReorientObject() 它应该能纠正这个问题。

相关问题