如何测量两个坐标之间的距离,可能的钙含量较少?

Mau*_*ima 1 delphi math gps coordinates

我正在尝试使用尽可能少的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
Run Code Online (Sandbox Code Playgroud)

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

MBo*_*MBo 6

要更准确地测量距离,您可以使用Haversine公式,如注释中所述.在这里,您可以看到公式和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;
Run Code Online (Sandbox Code Playgroud)

如果您认为粗略近似对您来说非常有用,那么您可以更精确地计算沿子午线的距离收缩(而不是两个坐标的常见常量):

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
Run Code Online (Sandbox Code Playgroud)

  • 这是 Delphi 中的一个实现:https://rosettacode.org/wiki/Haversine_formula#Delphi (3认同)