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