确定两个坐标之间的距离和方向

4
我有两个坐标,想做一些看似简单的事情。我想找出以下内容:
1)给定坐标A、Core Location提供的路线和坐标B,A与B之间的距离(可以使用distanceFromLocation进行计算);
2)从A到B所需的航向(与当前行驶方向不同)。
是否有简单的方法来完成此操作?是否有第三方或内置API?
苹果似乎没有提供这个功能,但我可能是错的。
谢谢, ~Arash
编辑:
感谢快速回复,我认为可能存在一些混淆,我正在寻找航向(从点A到点B的方位角度,其中0度=北,90度=东,类似于CLLocation返回的航向值)。不是试图计算实际的转向指示。
4个回答

4

我在Github上有一些相关的代码,可以实现此功能。请查看这里的headingInRadians函数。它基于余弦定理。我从这个网页的算法中推导出了这段代码。

/*-------------------------------------------------------------------------
* Given two lat/lon points on earth, calculates the heading
* from lat1/lon1 to lat2/lon2.
*
* lat/lon params in radians
* result in radians
*-------------------------------------------------------------------------*/
double headingInRadians(double lat1, double lon1, double lat2, double lon2)
{
    //-------------------------------------------------------------------------
    // Algorithm found at http://www.movable-type.co.uk/scripts/latlong.html
    //
    // Spherical Law of Cosines
    //
    // Formula: θ = atan2( sin(Δlong) * cos(lat2),
    // cos(lat1) * sin(lat2) − sin(lat1) * cos(lat2) * cos(Δlong) )
    // JavaScript:
    //
    // var y = Math.sin(dLon) * Math.cos(lat2);
    // var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);
    // var brng = Math.atan2(y, x).toDeg();
    //-------------------------------------------------------------------------
    double dLon = lon2 - lon1;
    double y = sin(dLon) * cos(lat2);
    double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);

    return atan2(y, x);
}

谢谢程序员,我现在正在查看! - iOS4Life
double headingInRadians(double lat1, double lon1, double lat2, double lon2)这是我尝试的方法,输入以下内容后得到了-0.343130弧度的结果,我将其转换为度数,得到了340.340088。您能否验证我是否正确?传入以下坐标: 纬度1 = 36.868148 经度1 = -76.046454 纬度2 = 39.174231 经度2 = -77.111107在进入公式之前,所有这些值都会被转换为弧度,使用以下方程式:(值/180)* M_PI感谢您的帮助! - iOS4Life
你可以使用在线计算器(例如这个)自行检查。 - progrmr

1

使用此方法,我获得了335.218658度,而在此处发布的示例http://www.movable-type.co.uk/scripts/latlong.html中,初始方位为159.*,最终方位为160.*。哪个是正确的? - iOS4Life
看起来这个答案使用了勾股定理和等距投影,这比我的答案使用的球面余弦法则不太准确,但是它使用了更少的三角函数,可能会更快。请阅读此页面以比较不同算法的效果。 - progrmr
似乎159.~是正确的初始方位角,如果你要反向行驶,则应该从点b到点a的初始方位角为340,所以我认为我已经正确实现了这一点,并且我的最终方位角告诉我从点b到点a的方位角(相反的行进方向),但仍然是一个好的方位角数。你有什么想法吗? - iOS4Life

0

根据你想投入的工作量,我建议看一下树遍历算法(右侧列出),像A* 阿尔法星这样的东西,你可以用它来找到从一个点到另一个点的路径,即使中间有障碍。


0

如果我理解正确,您有当前位置和其他位置。您想找到两点之间的距离(直线距离),并找到两点之间的步行路径。

回答您的第一个问题,distanceFromLocation将找到地球表面上2个点之间的距离,即它遵循地球的曲率,但它将给出直线距离。所以我认为您是正确的。

第二个问题要困难得多。您想做的是称为路径查找的东西。路径查找不仅需要决定路径的搜索算法,还需要关于可能路径的数据。也就是说,如果您想找到一条穿过街道的路径,计算机必须知道街道如何相互连接。此外,如果您正在尝试制作一种考虑交通和采取两条不同可能路径之间时间差异的路径查找器,则需要更多的数据。正因为如此,我们通常将这些任务留给像Google和Yahoo这样拥有大量资源的大公司。

如果你仍然对此感兴趣,请查看以下链接:http://www.youtube.com/watch?v=DoamZwkEDK0

请查看编辑后的帖子,我不是指到达那里的路径,而是指应采取的方位角度,例如北方为0度,东方为90度等等... - iOS4Life

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接