Программно двигаться в направлении камеры - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь переместить маркер положения пользователя в направлении камеры.Вроде как вы бы управляли персонажем в игре.Поскольку камера в 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 голосов
/ 30 декабря 2018

После еще нескольких попыток я обнаружил, что эта проблема называется «Прямая геодезическая задача». Здесь Я нашел все необходимые мне формулы, но в итоге использовал отличную библиотеку C .

...