以编程方式朝相机朝向的方向移动

时间:2018-12-28 20:45:43

标签: ios swift geolocation mapkit geo

我正在尝试沿相机朝向的方向移动用户位置标记。有点像在游戏中控制角色。 由于MapKit中的摄像头是向北对齐的,因此我想向前移动一些纬度,然后将生成的点旋转到摄像头角度。

我有一些转换器,可以转换为米到多少度:

class Converter {
  fileprivate static let earthRadius = 6378000.0 // meter

  class func latitudeDegrees(fromMeter meter: Double) -> Double {
    return meter / earthRadius * (180 / Double.pi)
  }

  class func longitudeDegress(fromMeter meter: Double, latitude: Double) -> Double {
    return meter / earthRadius * (180 / Double.pi) / cos(latitude * Double.pi / 180)
  }
}

因此,为了向前发展,我的代码如下:

let latitudeDelta = Converter.latitudeDegrees(fromMeter: speed)
let y = userLocation.latitude + latitudeDelta
let x = userLocation.longitude
let a = -self.mapView.camera.heading * Double.pi / 180
self.userLocation = CLLocationCoordinate2D(latitude: x*sin(a) + y*cos(a), longitude:x*cos(a) - y*sin(a))

我尝试了不同的方法,但似乎都没有用。根本上有错吗?在计算中是否还需要考虑地球曲率?

1 个答案:

答案 0 :(得分:0)

经过更多的努力,我发现此问题称为“直接测地线问题”。 Here我找到了我需要的所有公式,但最后使用了很棒的C library