【发布时间】:2020-11-17 15:02:20
【问题描述】:
我正在开发用于农业用途的 GPS 应用程序。我需要一种方法来精确计算两个坐标之间的距离和差异(X,Y),使用纬度、经度和高度(高度以米为单位)。 这些点将彼此靠近,大约 10m 或更小,距离将用于其他计算,如面积,差值 (X, Y) 将用于渲染 2D 地图。
我的第一个想法是使用直角三角形计算 2D (X, Y),然后再次计算 3D 距离。
这里是一个脚本(在 Javascript 中):
function xyDifference(lat1, lng1, lat2, lng2){
var xdif = (lng1 - lng2)/0.00000898; //value to convert decimal degrees difference to meters
var ydif = (lat1 - lat2)/0.00000898;
return [xdif,ydif];
}
function distanceBetween2D(lat1,lng1,lat2,lng2) {
var b = Math.abs(lat1 - lat2);
var c = Math.abs(lng1 - lng2);
var a = Math.sqrt(Math.pow(b,2) + Math.pow(c,2));
var dst = a / 0.00000898;
return dst;
}
function distanceBetween3D(lat1,lng1,alt1,lat2,lng2,alt2){
var dst = distanceBetween2D(lat1,lng1,lat2,lng2);
a = Math.abs(alt1 - alt2);
dst = Math.sqrt(Math.pow(dst,2) + Math.pow(a,2));
return dst;
}
console.log(distanceBetween(-24.09234566666,-52.5289494999999,588,-24.09231633333,-52.5288795,589));
//It prints 8.51m
//Using Haversine formula with these values it gives something about 7.82m
我想知道这是否是一个好方法,或者是否有更好的方法。我看过 Haversine 公式,但我不知道如何使用它来处理海拔差异,以及如何获得 (X,Y) 差异来渲染地图。
【问题讨论】:
-
haversine 公式仅与
distanceBetween2Dafaik 的实现有关。distanceBetween3D根本不会改变。
标签: javascript math coordinates latitude-longitude haversine