【发布时间】:2015-08-14 09:18:34
【问题描述】:
我无法使用我的表格格式使用地理来计算距离(以英里为单位)。
两个位置的纬度和经度并排:
id | A_Latitude | A_Longitude | B_Latitude | B_Longitude
我正在尝试获取A 的点以及B 的点,并返回A 和B 之间的距离(以英里为单位)。
我尝试了一些方法,包括类似于:
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:放置 where 子句以在原始第一个查询中仅选择一条记录。或2:不要使用@vars,而是使用临时表将所有记录从第一部分带到查询的第二部分。如果您愿意,您实际上可以将它们组合成一个查询。
-
完美,谢谢@Sql Surfer!我不确定这是如何工作的,您可以发布一个答案以便我将其标记为那个吗?
标签: sql sql-server sqlgeography