将计算出的经纬度距离转换为metres/km

Convert calculated latitude and longitude distance to metres/km

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

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

示例输入:

纬度和经度 1 -> -0.186768 51.450584

纬度和经度 2 -> -0.572662 51.245584

给出:0.436965878800621

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

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

谢谢

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。只是给你一个想法 - 你可以改变它。

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

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