点和面之间的STDistance即使距离很远也始终返回0

时间:2020-06-08 17:15:17

标签: sql sql-server geospatial spatial

我正在尝试使用地理类型获取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 个答案:

答案 0 :(得分:3)

我怀疑您的多边形存在常见问题。具体而言,是环取向问题。定义多边形顶点的顺序具有意义。 SQL Server中的多边形遵循“左手规则”。这意味着,如果您以顶点顺序绕着多边形的边界行驶,那么汽车左侧的就是多边形的内部。

要进行检查,如果您对.EnvelopeAngle()打电话,会怎样?如果它表示180,则表示您定义的多边形为“整个地球减去阿伯丁”。一切都不会丢失!有一个简单的解决方法-对多边形调用.ReorientObject(),它应该可以解决问题。

相关问题