我正在开发一个应用程序,用于根据船只数量,目标时间,风向和风强度来安排帆船比赛路线。
当前,我将所有变量存储在设备上,并将竞赛委员会的起跑船固定在地图上。我发现了很多有关如何计算两个位置之间的距离的信息,但是找不到有关如何从起始容器放置xx米/轴承xx度的注释的任何信息。
起始船只在地图上(位置:纬度/经度)。我如何在距起始船只500米处放置90度角的注释?
答案 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)
}