根据距离(米)和距当前位置的方位在地图上放置注释

时间:2018-10-15 21:50:24

标签: swift mapkit cllocation

我正在开发一个应用程序,用于根据船只数量,目标时间,风向和风强度来安排帆船比赛路线。

当前,我将所有变量存储在设备上,并将竞赛委员会的起跑船固定在地图上。我发现了很多有关如何计算两个位置之间的距离的信息,但是找不到有关如何从起始容器放置xx米/轴承xx度的注释的任何信息。

起始船只在地图上(位置:纬度/经度)。我如何在距起始船只500米处放置90度角的注释?

1 个答案:

答案 0 :(得分:0)

我相信有很多关于如何在经纬度位置上放置注释的示例。因此,我将对如何获取目标位置有所帮助

首先,您可以看到Haversine公式以获取经纬度位置 Get lat/long given current point, distance and bearing

有一个很好的python示例

要迅速操作,您可以使用此功能,假设目标是距当前用户航向90米(500米)

   func getNewTargetCoordinate(position: CLLocationCoordinate2D, userBearing: Float, distance: Float)-> CLLocationCoordinate2D{

    let r = 6378140.0
    let latitude1 = position.latitude * (Double.pi/180) // change to radiant
    let longitude1 = position.longitude * (Double.pi/180)
    let brng = Double(userBearing+90) * (Double.pi/180)

    var latitude2 = asin(sin(latitude1)*cos(Double(distance)/r) + cos(latitude1)*sin(Double(distance)/r)*cos(brng));
    var longitude2 = longitude1 + atan2(sin(brng)*sin(Double(distance)/r)*cos(latitude1),cos(Double(distance)/r)-sin(latitude1)*sin(latitude2));

    latitude2 = latitude2 * (180/Double.pi)// change back to degree
    longitude2 = longitude2 * (180/Double.pi)

    // return target location
    return CLLocationCoordinate2DMake(latitude2, longitude2)
}