2015-05-20 50 views
-2

我遇到了一個讓我發瘋的問題。僅在巴拿馬谷歌地圖中計算距離的問題

幾年前,我開發了一個瀏覽器應用程序,可以計算從一個給定點(緯度和經度座標)到另一個給定點的距離。

一切都很好,直到幾天前,當一個來自巴拿馬的客戶開始與我們合作。多年來一直使用的相同的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 

我試圖計算自2008年以來SQL

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

顛倒了經度和緯度。 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) 
+0

沒錯,但我仍然懷疑爲什麼它一直在不同的國家工作這麼多年?而且,爲什麼T-SQL方法無法正常工作? –

+0

「不同的國家」在哪裏? – geocodezip