GMSMarker не движется по маршруту - PullRequest
0 голосов
/ 27 ноября 2018

Я получил направление, используя приведенный ниже API.

https://maps.googleapis.com/maps/api/directions/json?origin=XYZ&destination=XYZ&sensor=false&mode=driving&key=XYZ

Я нарисовал полилинию, используя mode=driving от моего Current Location coordinatesна Destination Location Coordinates, и он успешно отрисован, и теперь я хочу переместить этот маркер из текущего местоположения в место назначения, и для этого я попробовал приведенный ниже код, но маркер перемещается только по прямой, не двигаясь, как другие навигационные приложения.

Issue

Маркер не двигается по полилинии, он движется прямо по карте.

Хочу достичь

Я хочу переместитьсямаркер в виде полилинии, нарисованной как UBER и другие приложения.

Я перешел по этой ссылке: Переместить GMSMarker на карту Google Like UBER

let driverMarker = GMSMarker()
driverMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
driverMarker.rotation = CLLocationDegrees(getHeadingForDirection(fromCoordinate: currentCordinate, toCoordinate: destinationCordinate))
//found bearing value by calculation when marker add
driverMarker.position = currentCordinate
//this can be old position to make car movement to new position
driverMarker.map = mapView

//marker movement animation
CATransaction.begin()
CATransaction.setValue(Int(2.0), forKey: kCATransactionAnimationDuration)
CATransaction.setCompletionBlock({() -> Void in
    driverMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
    //driverMarker.rotation = CDouble(data.value(forKey: "bearing"))
    //New bearing value from backend after car movement is done
})

driverMarker.position = destinationCordinate
//this can be new position after car moved from old position to new position with animation
driverMarker.map = mapView
driverMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
driverMarker.rotation = CLLocationDegrees(getHeadingForDirection(fromCoordinate: currentCordinate, toCoordinate: destinationCordinate))
//found bearing value by calculation
CATransaction.commit()



func getHeadingForDirection(fromCoordinate fromLoc: CLLocationCoordinate2D, toCoordinate toLoc: CLLocationCoordinate2D) -> Float {
    let fLat: Float = Float((fromLoc.latitude).degreesToRadians)
    let fLng: Float = Float((fromLoc.longitude).degreesToRadians)
    let tLat: Float = Float((toLoc.latitude).degreesToRadians)
    let tLng: Float = Float((toLoc.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
    }
}

Любое предложение будет оцененодобиться этого.

Заранее спасибо

...