Gmsmap просмотр вращения в Swift - PullRequest
0 голосов
/ 03 октября 2018

На этом снимке GMSMapView имеет два маркера

  1. Зеленый маркер - это место получения, а
  2. Красный маркер - это маркер места падения

Я хочу повернуть mapView в соответствии с местоположением захвата, местоположение захвата хотите начать с левой стороны mapView, а местоположение отбрасывания - с правой стороны mapView

Повернуть: GMSMapView с использованием метода делегата или любых пользовательских методов

https://i.stack.imgur.com/Re5Mp.png

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете попробовать вот так

extension FloatingPoint {
    var degreesToRadians: Self { return self * .pi / 180 }
    var radiansToDegrees: Self { return self * 180 / .pi }
}

В ViewController

func getHeadingForDirection(fromCoordinate fromLoc: CLLocationCoordinate2D, toCoordinate toLoc: CLLocationCoordinate2D) -> Float {

let fLat: Float = Float((self.mapView.camera.target.latitude).degreesToRadians)
let fLng: Float = Float((self.mapView.camera.target.longitude).degreesToRadians)
let tLat: Float = Float((fromLoc.latitude).degreesToRadians)
let tLng: Float = Float((fromLoc.longitude).degreesToRadians)
let degree: Float = (atan2(sin(tLng - fLng) * cos(tLat), cos(fLat) * sin(tLat) - sin(fLat) * cos(tLat) * cos(tLng - fLng))).radiansToDegrees
if degree >= 0 {
     return degree
} else {
     return 360 + degree
 }
}

В mapView (_ mapView: GMSMapView, idleAt position: GMSCameraPosition)

self.mapView.animate(toBearing: CLLocationDirection((self.getHeadingForDirection(fromCoordinate: self.pickUpMarker.position, toCoordinate: self.dropOffMarker.position) + 100) ))
...