仅在巴拿马发布谷歌地图中的距离问题

时间:2015-05-20 21:10:16

标签: sql-server google-maps tsql

我遇到了一个让我发疯的问题。

几年前,我开发了一个浏览器应用程序,用于计算从一个给定点(纬度和经度坐标)到其他给定点的距离。

几天前,当巴拿马的一位客户开始与我们合作时,一切都运转良好。多年来使用的相同SQL程序给我们提供了错误的测量结果。

这是SQL公式:

(Acos(Sin((Ofd.Latitud * PI()) / 180) * Sin((@Longitud * PI()) / 180) + Cos((Ofd.Latitud * PI()) / 180) * Cos((@Longitud * PI()) / 180) * Cos((Ofd.Logitud * PI() / 180) - (@Latitud * PI()) / 180)) * 6371 * 1000) AS Distance

我尝试使用自SQL 2008以来的新方法计算距离

DECLARE @Latitude float = 8.9749377
DECLARE @Longitude float = -79.5060562
DECLARE @TLatitude float = 8.9868425
DECLARE @TLongitude float = -79.5012872
DECLARE @Source geography
DECLARE @Target geography

SET @Source = geography::STPointFromText('POINT(' + CAST(@Latitude as varchar(20)) + ' ' + CAST(@Longitude as varchar(20)) + ')',4326)
SET @Target = geography::STPointFromText('POINT(' + CAST(@TLatitude as varchar(20)) + ' ' + CAST(@TLongitude as varchar(20)) + ')',4326)

SELECT @source.STDistance(@Target)

这两种方法之间的差异可以忽略不计,只有几米。返回方法的距离是~500m

所以,问题是实际距离差不多是1500米,我已经看到并测量了谷歌地图中的距离,而实际距离是1.500米。有趣的一面是,这个问题,只发生在巴拿马。通过西班牙的客户,我们可以毫不费力地计算距离。

我找到了百慕大的三角形吗?

1 个答案:

答案 0 :(得分:1)

您的纬度和经度相反。 WKT POINT坐标按X,Y(经度,纬度)排序。

DECLARE @Latitude float = 8.9749377
DECLARE @Longitude float = -79.5060562
DECLARE @TLatitude float = 8.9868425
DECLARE @TLongitude float = -79.5012872
DECLARE @Source geography
DECLARE @Target geography

SET @Source = geography::STPointFromText('POINT(' + CAST(@Longitude as varchar(20)) + ' ' + CAST(@Latitude as varchar(20)) + ')',4326)
SET @Target = geography::STPointFromText('POINT(' + CAST(@TLongitude as varchar(20)) + ' ' + CAST(@TLatitude as varchar(20)) + ')',4326)

SELECT @source.STDistance(@Target)