【问题标题】:Convert calculated latitude and longitude distance to metres/km将计算的经纬度距离转换为米/公里
【发布时间】:2015-10-18 10:00:36
【问题描述】:

我正在使用 PostGIS 在 SQL 查询中为我做一些纬度和经度距离计算。它返回两个纬度和经度位置之间的距离,但它返回的单位是乌鸦飞行时的纬度和经度距离:

"SELECT ST_Distance(ST_MakePoint(\"Users\".\"longitude\",\"Users\".\"latitude\"), ST_MakePoint($1,$2)) FROM \"Users\" WHERE \"Users\".\"username\"=$3"

示例输入:

经纬 1 -> -0.186768 51.450584

经纬 2 -> -0.572662 51.245584

给:0.436965878800621

所以我的问题是如何将 0.436965878800621 变成例如1000m

我不确定Calculate distance between 2 GPS coordinates 是否会帮助我?或者这是否在计算中的某个时间点开始太早/太晚。

谢谢

【问题讨论】:

    标签: postgresql geolocation postgis


    【解决方案1】:

    您可以将ST_MakePoint() 生成的geometry 转换为geography 类型,ST_Distance() 将以米为单位生成其输出:

    SELECT ST_Distance(geography(ST_MakePoint("Users"."longitude", "Users"."latitude")),
                       geography(ST_MakePoint($1, $2)))
    FROM "Users"
    WHERE "Users"."username" = $3
    

    【讨论】:

      【解决方案2】:
      var R = 6371000; // metres
      var φ1 = lat1.toRadians();
      var φ2 = lat2.toRadians();
      var Δφ = (lat2-lat1).toRadians();
      var Δλ = (lon2-lon1).toRadians();
      
      var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
              Math.cos(φ1) * Math.cos(φ2) *
              Math.sin(Δλ/2) * Math.sin(Δλ/2);
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      
      var d = R * c;
      

      这是在 javascript 中。只是给你一个想法 - 你可以改变它。

      【讨论】:

      • 嗨,是的,我看到了那个计算,但是你能告诉我如何把这个计算的值变成米吗,上面似乎是从我没有的纬度和经度来做的计算阶段。
      • @lol 你展示了 lat 和 long 值的输入示例??你的意思是? 0.436965878800621 号码?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2011-05-24
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多