dibujar polilínea en paralelo con marcador de animación en google maps

3 minutos de lectura

Avatar de usuario de Naufal
Naufal

Estoy usando Google Maps en mi aplicación en la que tengo que dibujar la polilínea paralela junto con el marcador de animación. Ambos deben moverse simultáneamente.

En este momento, mi solución funciona así. La primera polilínea se dibuja con nuevas coordenadas, luego el marcador de animación se mueve después.

Probé algunos enlaces en el desbordamiento de la pila… en los que la solución no estaba allí.

Esta es la solución que estoy buscando en iOS rápido… el siguiente enlace es para Android… que funciona perfectamente Cómo mover el marcador a lo largo de la polilínea usando el mapa de Google

Gracias si me pueden ayudar en estos..`

@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)
}`

  • conseguiste alguna solucion? esto es lo que estoy buscando…

    – jayant rawat

    5 de febrero de 2020 a las 6:21

  • He usado este método desde este enlace a continuación, … developers.google.com/maps/documentation/ios-sdk/reference/…

    – Naufal

    6 de febrero de 2020 a las 4:38

  • 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!, longitud: oldLon!) let newloc = CLLocationCoordinate2D(latitud: newLat!, longitud: newLon!)let t = GMSGeometryInterpolate(oldloc, newloc, self.count)

    – Naufal

    6 de febrero de 2020 a las 4:40


  • gracias por la respuesta @Naufal … ¿puede proporcionar el código para el método mediante el cual puede lograr una animación simultánea? Será de mucha ayuda..

    – jayant rawat

    7 de febrero de 2020 a las 5:53

  • funciona si la distancia entre los puntos es menor, pero no si la distancia es mayor y la parte fraccionaria tampoco me queda clara…

    – jayant rawat

    7 de febrero de 2020 a las 12:09

¿Ha sido útil esta solución?