使用当前位置和目的地位置的纬度和经度,我们如何在iphone中获得方向

时间:2011-01-08 07:46:29

标签: iphone google-maps direction

我在1个iphone应用程序中工作,我们需要显示从1个地方到其他地方的方向 这是从目的地的方向(N或E或W或S或NE或NW或SE或SW)的当前位置。 我知道如何从一个地方到另一个地方获取方向,但我正在寻找显示方向。 我的问题清楚了吗?如果有人知道怎么做,请帮助我 谢谢大家!

2 个答案:

答案 0 :(得分:3)

您知道这两个地点的坐标吗?

查看CLLocationCoordinate2D

  

<强>纬度   纬度(度)。正值表示赤道以北的纬度。负值表示赤道以南的纬度。

     

<强>经度   经度为度。测量值相对于零子午线,正值在子午线以东延伸,负值在子午线以西延伸。

纬度是非常简单的,如果目的地的纬度小于当前位置的纬度,那么它位于北方,如果它大于当前位置的纬度,那么它位于南方。

latitudinal_distance = destination.latitude - origin.latitude

经度稍微复杂一点,你应该考虑到东边地球四分之三的目的地可能更好地表达为向西。再次比较经度值,考虑东西方的距离,穿过子午线,选择较短的距离。

distance_east = (origin.longitude > 0 && destination.longitude < 0) ? 180 - origin.longitude + destination.longitude - -180 : destination.longitude - origin.longitude; if (distance_east < 0) distance_east += 360

distance_west = (origin.longitude < 0 && destination.longitude > 0) ? -180 - origin.longitude - 180 - destination.longitude : origin.longitude - destination.longitude; if (distance_west < 0) distance_west += 360

longitudinal_distance = min(distance_east, distance_west)

一旦您知道经度和经度的多少度将您的两个点分开,您就可以计算到目的地的航向并决定哪个航向应显示为哪个指南针。在只有四个点(N,E,S,W)的罗盘上,每个点将覆盖90度。在具有8个点的罗盘上,每个点将覆盖45度。希望你明白了。

heading = arctan(longitudinal_distance / latitudinal_distance) if (heading >= -45 || heading < 45) return 'N'; else if (heading >= 45 && heading < 135) return 'E'; else if ...

现在已经很晚了,我没有测试那些表达式,所以如果它们看起来有用,请确保你理解并测试它们,而不是试图盲目地应用它们。不幸的是,我转换了一个符号或坐标对的可能性很高。

答案 1 :(得分:0)

查看Apple的磁力计/核心位置示例:Teslameter