试图找出两组经纬度之间的距离
Trying to find distance between two sets of Lat-longs
我有一个包含 100,000+ 个地址的数据集,每个地址都有两组纬度和经度(基本上是 x_lat、x_lon、y_lat、y_lon) 在 MSSQL 上。 lat-longs 用于相同的地址,但来自两个不同的来源,我试图找出两者之间的距离差异。我做了一些研究,并尝试使用下面的代码(来自 Whosebug 上的 AakashM),但我收到一条错误消息,指出子查询返回的值超过 1 个,这是不允许的。
DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=(SELECT x_lat FROM #Distance) SET @orig_lng= (SELECT x_lon FROM #Distance)
DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);
SELECT *,
@orig.STDistance(geography::Point(y_Lat, y_Lon, 4326))
AS distance
--INTO #includeDistances
FROM #Distance
这个错误是有道理的,因为 @orig_lat 和 @orig_lon 需要设置为特定的经纬度,但是有没有办法可以将它设置为列,所以我可以获得每个地址的距离,而无需手动输入经纬度?我在下面包含了#Distance 数据集前两行的图像:
enter image description here
如果我没理解错的话,你是在尝试计算 x 和 y lat/lng 之间的差异。
例子
SELECT *
,Distance = geography::Point(x_Lat, x_Lon, 4326).STDistance(geography::Point(y_Lat, y_Lon, 4326))
From YourTable
Where x_lat<>y_lat
or x_lon<>y_lon
WHERE 是可选的。
我有一个包含 100,000+ 个地址的数据集,每个地址都有两组纬度和经度(基本上是 x_lat、x_lon、y_lat、y_lon) 在 MSSQL 上。 lat-longs 用于相同的地址,但来自两个不同的来源,我试图找出两者之间的距离差异。我做了一些研究,并尝试使用下面的代码(来自 Whosebug 上的 AakashM),但我收到一条错误消息,指出子查询返回的值超过 1 个,这是不允许的。
DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=(SELECT x_lat FROM #Distance) SET @orig_lng= (SELECT x_lon FROM #Distance)
DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);
SELECT *,
@orig.STDistance(geography::Point(y_Lat, y_Lon, 4326))
AS distance
--INTO #includeDistances
FROM #Distance
这个错误是有道理的,因为 @orig_lat 和 @orig_lon 需要设置为特定的经纬度,但是有没有办法可以将它设置为列,所以我可以获得每个地址的距离,而无需手动输入经纬度?我在下面包含了#Distance 数据集前两行的图像:
enter image description here
如果我没理解错的话,你是在尝试计算 x 和 y lat/lng 之间的差异。
例子
SELECT *
,Distance = geography::Point(x_Lat, x_Lon, 4326).STDistance(geography::Point(y_Lat, y_Lon, 4326))
From YourTable
Where x_lat<>y_lat
or x_lon<>y_lon
WHERE 是可选的。