试图找出两组经纬度之间的距离

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 是可选的。