2013-09-23 61 views
0

這個問題被張貼了很多次,但我不得不張貼相同的由於不正確的結果得到。任何人都可以幫助我做錯什麼。Sql查詢計算2緯度和經度之間的距離

我需要的是在Cust_Master和距離WH和客戶

之間的特定客戶最近的倉庫的名字,我有2個表如下。

WH_Master

WH_Name  Latitude Longitude 
----------- --------- --------- 
Horamavu  13.02457 77.65723 
White Field 12.985278 77.729899 
Hennur  13.030672 77.634034 

Cust_Master

Cust_ID Latitude Longitude 
------- --------- --------- 
Cust-1 13.025579 77.6515 

我曾嘗試下面的選項,它給了我一個錯誤的距離和位置。對於當前的例子,Horamavu是最近的倉庫,根據谷歌,距離爲1.8公里。但是我得到0.751這是錯誤的。

我使用的查詢如下。

SELECT Top 1 WH_Name, ((6367.45 * acos(cos(radians(13.025579)) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(77.6515)) + sin(radians(13.025579)) * sin(radians(Latitude))))) AS distance_KM FROM WH_Master 

不幸的是,這是讓我一樣的WH_Name和我得到的距離也是錯誤的。你能否讓我知道正確的查詢。我使用MS SQL Server作爲我的數據庫。

+0

你檢查是否由谷歌返回距離爲公里或英里? –

+0

根據谷歌它是1.8公里,我的手機返回0.751 – Subash

+1

查詢中的數字從哪裏來?示例表中的數字不同。你爲什麼要從表中選擇,但在投影中只有常量? – jboi

回答

0

如果您使用SQL 2008或更高版本,則應使用geography數據類型和STDistance函數。

如:

declare @t table (wh_name nvarchar(50), p geography) 
insert @t values 
('horamavu',geography::STGeomFromText('POINT(13.02457 77.65723)', 4326)), 
('white field',geography::STGeomFromText('POINT(12.985278 77.729899)', 4326)), 
('hennur', geography::STGeomFromText('POINT(13.030672 77.634034)', 4326)) 

select wh_name, 
    p.STDistance(geography::STGeomFromText('POINT(13.025579 77.6515)', 4326)) distance_m 
from @t 
order by distance_m 

確定谷歌的距離是直線距離的距離,而不是通過公路距離是多少?

至於你的原始查詢,如果你想要TOP你需要指定ORDER BY

相關問題