C、计算两个GPS位置之间的距离?

Posted

技术标签:

【中文标题】C、计算两个GPS位置之间的距离?【英文标题】:C, Calculating the distance between two GPS locations? 【发布时间】:2011-04-29 23:55:18 【问题描述】:

如果我有两个 GPS 位置,例如 51.507222、-0.1275 和 48.856667、2.350833,我可以使用什么公式来计算两者之间的距离?我听说过很多关于半正弦公式的信息,但找不到任何关于它的信息,或者如何将它应用到 C 中。

我已经编写了以下代码,但是它非常不准确。有人知道为什么吗?我想不通。问题来自函数本身,但我不知道它是什么。

float calcDistance(float A, float B, float C, float D) 

    float dLat;
    float dLon;
    dLat = (C - A);
    dLon = (D - B);
    dLat /= 57.29577951;
    dLon /= 57.29577951; 
    float v_a;
    float v_c;
    float distance;

    v_a = sin(dLat/2) * sin(dLat/2) + cos(A) * cos(C) * sin(dLon/2) * sin(dLon/2);
    v_c = 2 * atan2(sqrt(v_a),sqrt(1-v_a));
    distance = r * v_c;
    return distance;

【问题讨论】:

float 对于参数类型、局部变量和函数本身来说是一个相当糟糕的选择。请改用double。如果没有强烈理由使用float(或C99 中的long double),请使用double 【参考方案1】:

您的代码绝对正确。

我会将参数 ABCD 重命名为 lat1lon1lat2lon2

它以公里为单位返回距离。您需要将r 定义为6371,大致为radius of the earth。

【讨论】:

谢谢,这就是我离开的原因。【参考方案2】:

您正在寻找的是great circle distance。

【讨论】:

谢谢,但是对于数学不太精通的人来说,这真的很复杂。我会努力解决的。 什么,你不希望人们通过地壳隧道到达目的地吗? :) 我已经使用了我能学到的东西,并尝试做一个简单的函数。上面的帖子里有。为什么它不起作用?【参考方案3】:

This page 有一个 javascript 块,我相信你可以在 C 语言中轻松适应:

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;

【讨论】:

【参考方案4】:

也许为时已晚,但这是计算不准确的原因: -> A 和 C(lat1 和 lat2)也必须从度数转换为弧度

dLat /= 57.295779513082325;
dLon /= 57.295779513082325;
lat1 /= 57.295779513082325;
lat2 /= 57.295779513082325;

问候, 梅耶

【讨论】:

以上是关于C、计算两个GPS位置之间的距离?的主要内容,如果未能解决你的问题,请参考以下文章

计算两个 GPS 坐标之间的距离

我如何计算Java中两个gps点之间的距离?

python 计算两个GPS点之间的距离。

如何计算两个GPS坐标点的距离?

计算大量 GPS 坐标之间的成对路由距离

2个GPS位置之间的距离PHP