SQL 地理 Latitude/Longitude 距离计算
SQL Geography Latitude/Longitude distance calc
我无法使用我的 table.
格式使用地理来计算以英里为单位的距离
两个位置的纬度和经度并排:
id | A_Latitude | A_Longitude | B_Latitude | B_Longitude
我正在尝试获取 A
的点以及 B
的点,以及 return A
和 [=16= 之间的距离] 以英里为单位。
我已经尝试了一些东西,包括类似于:
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 冲浪者!
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
我会这样做:
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
如果您打算经常(即时)执行此操作,请考虑将计算列添加到您的 table 中,不仅用于地理类型,还用于它们之间的距离。那时,它只是来自 table!
的简单查询
我无法使用我的 table.
格式使用地理来计算以英里为单位的距离两个位置的纬度和经度并排:
id | A_Latitude | A_Longitude | B_Latitude | B_Longitude
我正在尝试获取 A
的点以及 B
的点,以及 return A
和 [=16= 之间的距离] 以英里为单位。
我已经尝试了一些东西,包括类似于:
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 冲浪者!
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
我会这样做:
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
如果您打算经常(即时)执行此操作,请考虑将计算列添加到您的 table 中,不仅用于地理类型,还用于它们之间的距离。那时,它只是来自 table!
的简单查询