gpt4 book ai didi

delphi - 如何用更少的计算量度两个坐标之间的距离?

转载 作者:行者123 更新时间:2023-12-03 19:06:32 25 4
gpt4 key购买 nike

我正在尝试使用尽可能少的CPU来进行度量,因此我正在使用一个常数乘法器来获得以米为单位的值,如下所示:

lat1,long1 =坐标1

lat2,long2 =坐标2

DistV := abs(lat1-lat2);                  // Get a positive vertical value
DistH := abs(lon1-long2); // Get a positive horizontal value
DistGPS := sqrt(sqr(DistV) + sqr(DistH)); // Get a diagonal value
DistMeters := DistGPS*(111120*0.946); // 111120*0.946 = Constant multiplicator to meters


但是,计算得出的值将被添加到先前的度量中,因此有必要保持准确性。有谁知道更好的方法吗?

最佳答案

要更准确地测量距离,可以使用注释中写的Haversine公式。 Here您可以看到公式和JavaScript实现:

var R = 6371e3; // 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;


如果您认为粗略近似非常适合您的目的,则可以使它更精确地说明沿子午线的距离收缩(而不是两个坐标的共同常数):

DistV := abs(lat1-lat2);                  // Get a positive vertical value
DistH := abs(lon1-long2); // Get a positive horizontal value
DistH := DistH * Cos((lat1+lat2) / 2); // Use average latitude
DistGPS := sqrt(sqr(DistV) + sqr(DistH)); // Get a diagonal value
DistMeters := DistGPS*111120; //to meters

关于delphi - 如何用更少的计算量度两个坐标之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com