SQL地理纬度/经度距离计算

时间:2015-06-01 01:51:09

标签: sql sql-server sqlgeography

我无法使用地理位置来计算使用我桌子格式的英里距离。

两个地点的纬度和经度是并排的:

id | A_Latitude | A_Longitude | B_Latitude | B_Longitude

我试图获得A的点和B的点,并以英里为单位返回AB之间的距离。

我尝试了一些事情,包括类似的事情:

DECLARE @orig geography 
DECLARE @end geography
SELECT
@orig = geography::Point(A_LATITUDE, A_LONGITUDE, 4326) 
,@end = geography::Point(B_LATITUDE, B_LONGITUDE, 4326) 
FROM table1
SELECT 
    ROUND(@END.STDistance(@ORIG)/1609.344,2) AS MILES
    ,@END.STDistance(@ORIG) AS METERS
    ,table1.*
FROM table1;

我在所有行中获得里程和米的重复值。任何人都可以建议我应该如何构建此查询以获得我正在寻找的内容?

编辑:谢谢SQL Surfer!

WITH X AS 
(SELECT 
 geography::Point(A_LATITUDE, A_LONGITUDE, 4326) A
,geography::Point(B_LATITUDE, B_LONGITUDE, 4326) B
,ID
FROM TABLE1)

SELECT 
ROUND(X.B.STDistance(X.A)/1609.344,2) AS MILES
,X.B.STDistance(X.A) AS METERS
,T.*
FROM TABLE1 T
LEFT JOIN X ON T.ID = X.ID

1 个答案:

答案 0 :(得分:6)

这就是我要做的事情:

WITH X AS 
(
   SELECT 
      geography::Point(A_LATITUDE, A_LONGITUDE, 4326) A
     ,geography::Point(B_LATITUDE, B_LONGITUDE, 4326) B
     ,*
   FROM TABLE1
)

SELECT 
   ROUND(B.STDistance(A)/1609.344, 2) AS MILES
   ,B.STDistance(X.A) AS METERS
   ,*
FROM X

如果您考虑经常(并且在运行中)这样做,请考虑将计算列添加到您的表中,不仅是地理类型,还包括它们之间的距离。那时,它只是表格中的一个简单查询!