Delphi 根据经纬度计算地球上两点之间的距离

 

EARTH_RADIUS = 6378137.0;    //单位M

function getRad(d: Double): Double;
begin
  Result := d * PI / 180.0;
end;

function GetFlatternDistance(lat1, lng1, lat2, lng2: Double): Double;
var
  f, g, l: Double;
  sg, sl, sf: Double;
  s, c, w, r, d, h1, h2: Double;
  a, fl: Double;
begin
  f := getRad((lat1 + lat2)/2);
  g := getRad((lat1 - lat2)/2);
  l := getRad((lng1 - lng2)/2);
          
  sg := sin(g);
  sl := sin(l);
  sf := sin(f);

  a := EARTH_RADIUS;
  fl := 1/298.257;
          
  sg := sg*sg;
  sl := sl*sl;
  sf := sf*sf;

  s := sg*(1-sl) + (1-sf)*sl;
  c := (1-sg)*(1-sl) + sf*sl;

  w := ArcTan(sqrt(s/c));
  r := sqrt(s*c)/w;
  d := 2 * w * a;
  h1 := (3*r -1)/2/c;
  h2 := (3*r +1)/2/s;

  Result := d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值