рисовать полилинию параллельно с анимационным маркером в картах google

Я использую карты Google в своем приложении, в котором я должен рисовать полилинию параллельно с маркером анимации. Оба должны двигаться одновременно.,

Прямо сейчас мое решение работает следующим образом. Сначала полилиния рисуется с новыми координатами, а затем перемещается маркер анимации.

Я пробовал несколько ссылок в переполнении стека... где решения не было.

Это решение, которое я ищу в быстрой iOS... ссылка ниже предназначена для Android..., которая отлично работает Как перемещать маркер вдоль полилинии с помощью Google Map

Спасибо, если вы можете помочь мне в этом..`

@objc func pocDrawPolyline() {
    if poclastShownIndex < (vehicleLocationArray.count) {
        let dict = vehicleLocationArray[poclastShownIndex]
        if let lati = dict["latitude"], let logi = dict["longitude"] {
            let lat = Double(lati as! String)
            let log = Double(logi as! String)
            let location = dict["location"] as? String
            pocCreateVehicleMarkerWith(address: location ?? "School Bus", latitude: lat!, and: log!)
            pocPath.add(CLLocationCoordinate2DMake(lat!, log!))
        }
        polyline.path = pocPath
        polyline.strokeWidth = 3.0
        polyline.strokeColor = UIColor.red
        polyline.map = googleMapView
        poclastShownIndex += 1
    } else {
        //No update from "NOW" API call
    }
}

func pocCreateVehicleMarkerWith(address: String, latitude: Double, and Longitude: Double) {
    // Creates a marker for Vehicle.
    if vechicleMarker.map == nil {
        vechicleMarker.position = CLLocationCoordinate2D(latitude: latitude, longitude: Longitude)
        vechicleMarker.title = address
        vechicleMarker.icon = UIImage(named: "bus1")
        vechicleMarker.map = googleMapView
    } else {
        CATransaction.begin()
        CATransaction.setAnimationDuration(0.5)
        vechicleMarker.position = CLLocationCoordinate2D(latitude: latitude, longitude: Longitude)
        vechicleMarker.title = address
        vechicleMarker.icon = UIImage(named: "bus1")
        CATransaction.commit()

        if poclastShownIndex > 0 {
            if let oldLatitude = vehicleLocationArray[poclastShownIndex-1]["latitude"],
                let oldLongitude = vehicleLocationArray[poclastShownIndex-1]["longitude"],
                let newLatitude = vehicleLocationArray[poclastShownIndex]["latitude"],
                let newLongitude = vehicleLocationArray[poclastShownIndex]["longitude"] {

                let oldLat = Double(oldLatitude as! String)
                let oldLon = Double(oldLongitude as! String)
                let newLat = Double(newLatitude as! String)
                let newLon = Double(newLongitude as! String)
                let oldloc = CLLocationCoordinate2D(latitude: oldLat!, longitude: oldLon!)
                let newloc = CLLocationCoordinate2D(latitude: newLat!, longitude: newLon!)

                let distanceInMeters = distance(from: oldloc, to: newloc)
                if distanceInMeters > 0 {
                    print("Rotation Degree ------ \(CLLocationDegrees(getHeadingForDirection(fromCoordinate: oldloc, toCoordinate: newloc)))")
                    vechicleMarker.groundAnchor = CGPoint(x: CGFloat(0.5), y: CGFloat(0.5))
                    vechicleMarker.rotation = CLLocationDegrees(getHeadingForDirection(fromCoordinate: oldloc, toCoordinate: newloc))
                    googleMapView.animate(toLocation: newloc)
                }
            }
        }

    }
}func timerMethod() {
    pocTimer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(pocDrawPolyline), userInfo: nil, repeats: true)
}`

person Naufal    schedule 21.05.2019    source источник
comment
Вы получили какое-либо решение? это то, что я ищу...   -  person jayant rawat    schedule 05.02.2020
comment
Я использовал этот метод по этой ссылке ниже. Developers.google.com/maps/documentation/ios-sdk/reference/   -  person Naufal    schedule 06.02.2020
comment
let oldLat = Double(oldLatitude as! String) let oldLon = Double(oldLongitude as! String) let newLat = Double(newLatitude as! String) let newLon = Double(newLongitude as! String) let oldloc = CLLocationCoordinate2D(широта: oldLat!, долгота: oldLon!) let newloc = CLLocationCoordinate2D(широта: newLat!, долгота: newLon!) let t = GMSGeometryInterpolate(oldloc, newloc, self.count)   -  person Naufal    schedule 06.02.2020
comment
спасибо за ответ @Naufal ... можете ли вы предоставить код для метода, с помощью которого вы можете добиться одновременной анимации. Это будет действительно полезно..   -  person jayant rawat    schedule 07.02.2020
comment
это работает, если расстояние между точками меньше, но не если расстояние больше, и дробная часть мне тоже не ясна...   -  person jayant rawat    schedule 07.02.2020
comment
// для вычисления расстояния между двумя функциями широты и долготы. Distance(from: CLLocationCoordinate2D, to: CLLocationCoordinate2D) -> CLLocationDistance {let from = CLLocation(latitude: from.latitude, longitude: from.longitude) let to = CLLocation(latitude: to .latitude, longitude: to.longitude) return from.distance(from: to) }   -  person Naufal    schedule 11.02.2020
comment
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, если степень ›= 0 {возврат степени} else {возврат 360 + степень}}   -  person Naufal    schedule 11.02.2020
comment
Спасибо за ответ @Naufal ... что вы делаете после расчета расстояния? Я уже использую функцию getHeading. Можете ли вы предоставить мне кодовую базу для контроллера представления, отвечающего за анимацию?   -  person jayant rawat    schedule 11.02.2020
comment
привет @naufal .... единственная функция, которая мне нужна, это как вы устанавливаете продолжительность анимации в зависимости от расстояния между двумя точками?   -  person jayant rawat    schedule 14.02.2020
comment
Можете ли вы предоставить мне пример кода для решения?   -  person jayant rawat    schedule 12.03.2020
comment
Я добавил пример кода в приведенных выше комментариях.., просто передайте две широты и долготы вышеуказанному методу.. вы можете получить результат.   -  person Naufal    schedule 12.03.2020
comment
Мне просто нужно понять, как использовать GMSGeometryInterpolate(oldloc, newloc, self.count) в коде... Я получаю правильный заголовок и направления... единственное, чего я не могу добиться, это одновременная анимация маркера и пути. .   -  person jayant rawat    schedule 12.03.2020
comment
Чтобы нарисовать путь, нам нужен этот вышеупомянутый метод, о котором вы упомянули. Для этого нам нужны две широты и две долготы. нарисуйте линию. см. это для справки: let oldLat = Double (oldLatitude as! String) let oldLon = Double (oldLongitude as! String) let newLat = Double (newLatitude as! String) let newLon = Double (newLongitude as! String) let oldloc = CLLocationCoordinate2D (широта: старая широта!, долгота: старая долгота!) let newloc = CLLocationCoordinate2D (широта: новая широта!, долгота: новая долгота!)   -  person Naufal    schedule 12.03.2020
comment
спасибо за ответ. У меня есть последний вопрос. Я делаю это так: GMSStrokeStyle.solidColor(.clear), GMSStrokeStyle.solidColor(.black)] пусть длины: [NSNumber] = [10, 10] прямоугольник.spans = GMSStyleSpans(прямоугольник.путь!, стили, длины,GMSLengthKind.rhumb)... все еще путь рисуется до маркера.. как я могу обрабатывать продолжительность анимации?   -  person jayant rawat    schedule 12.03.2020
comment
назначить static var updateDuration = 0.0 static var movingDuration = 0.0 let animation DurationGap = 1.0/Constants.movingDuration _ = Timer.scheduledTimer (withTimeInterval: 1, повторы: true) { tim in self.count += self.animationDurationGap self.count = self .count.roundToDecimal(2) print(self.count) if self.count › 1.0 { self.createVehicleMarker(address: , latitude: newLat!, and: newLon!) self.pocPath.add(CLLocationCoordinate2DMake(newLat!, newLon! )) self.createPolyLineWithPath(path: self.pocPath).. просто добавьте таймер к вышеуказанному методу   -  person Naufal    schedule 13.03.2020