确定两个坐标之间的距离和路线

时间:2011-06-19 19:32:55

标签: iphone coordinates distance

我有2个坐标,想做一些看似简单明了的事情。我想弄明白,给出:

1)坐标A. 2)Core Location提供的课程 3)坐标B

以下内容:

1)A和B之间的距离(目前可以使用distanceFromLocation完成),那个就可以了。 2)从A到B应该采取的课程(与当前旅行的课程不同)

有没有一种简单的方法可以实现这一点,任何第三方或内置API?

Apple似乎没有提供这个,但我可能是错的。

谢谢, 〜Arash的

编辑:

感谢快速反应,我相信可能会有一些混乱,我希望得到路线(从点a到点b以度为单位,使得0度=北,90度=东,类似于通过CLLocation返回课程值。不尝试计算实际的转弯方向。

4 个答案:

答案 0 :(得分:4)

我在github上有一些代码可以做到这一点。看看headingInRadians here。它基于余弦球面定律。我从this page上的算法中导出了代码。

/*-------------------------------------------------------------------------
* 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);
}

答案 1 :(得分:1)

答案 2 :(得分:0)

根据您想要在这个工作中投入多少工作,我建议您查看Tree Traversal Algorithms(请查看右侧列),A* alpha star之类的内容,您可以使用它来查找即使两者之间存在障碍,也要从一个点找到另一个点。

答案 3 :(得分:0)

如果我理解正确,您拥有当前位置,并且您还有其他位置。你想找到两点之间的距离(像乌鸦一样),并找到两点之间的行走路径。

为了回答你的第一个问题,distanceFromLocation将找到地球表面之间2点之间的距离,也就是它跟随地球的曲率,但是它会在乌鸦飞行时给你一个距离。所以我认为你是对的。

第二个问题要困难得多。你想做的是一种叫做寻路的东西。路径查找,不仅需要一个决定路径的搜索算法,还需要有关可能路径的数据。也就是说,如果你想在街道上找到一条路,计算机必须知道街道是如何相互连接的。此外,如果您正在尝试制作一个考虑到流量的路径查找器以及两个不同路径之间的时间差异,则需要更多的数据。正是出于这个原因,我们通常将这类任务留给大公司,拥有大量资源,如谷歌和雅虎。

但是,如果您仍然有兴趣这样做,请检查一下 http://www.youtube.com/watch?v=DoamZwkEDK0