0

Marker Movement from source to destinationWie man den Marker genau entlang der Polylinie bewegt?

Bild zeigt Marker Bewegung, die gerade Linie mit Marker in nur einer Richtung ist. Ich möchte meine Markierung entlang der Polylinie bewegen, wobei sich die Richtung der Markierung entlang der Richtung der Polylinie ändern sollte. Wie man das erreicht. Mein aktueller Code ist wie folgt:

Klasse MapScreenVC: BaseVC {

var path = GMSMutablePath() 
var arrayCoordinates : [CLLocationCoordinate2D] = [] 
var destCoord = CLLocationCoordinate2D() 
var marker = GMSMarker() 
var mapView : GMSMapView? = nil 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let camera = GMSCameraPosition.camera(withLatitude: 53.4545, longitude: -2.1811, zoom: 14) 
    mapView = GMSMapView.map(withFrame: .zero, camera: camera) 
    marker = GMSMarker() 
    marker.position = CLLocationCoordinate2DMake(53.4387, -2.1827) 
    marker.title = "Source" 
    marker.snippet = "Source" 
    marker.icon = UIImage(named: "car") 
    marker.map = mapView 



    let DestinationMarker = GMSMarker() 
    self.destCoord = CLLocationCoordinate2DMake(53.4645, -2.1873) 
    DestinationMarker.position = CLLocationCoordinate2DMake(53.4643, -2.1869) 
    DestinationMarker.title = "Destination" 
    DestinationMarker.snippet = "Destination" 
    DestinationMarker.icon = UIImage(named: "home") 
    DestinationMarker.map = mapView 

// PolyLine

path.addLatitude(53.4395, longitude:-2.1834) 
    path.addLatitude(53.4403, longitude:-2.1854) 
    path.addLatitude(53.4414, longitude:-2.1852) 
    path.addLatitude(53.4428, longitude:-2.1832) 
    path.addLatitude(53.4442, longitude:-2.1818) 
    path.addLatitude(53.4449, longitude:-2.1801) 
    path.addLatitude(53.4478, longitude:-2.1793) 
    path.addLatitude(53.4504, longitude:-2.1798) 
    path.addLatitude(53.4526, longitude:-2.1806) 
    path.addLatitude(53.4545, longitude:-2.1811) 
    path.addLatitude(53.4564, longitude:-2.1811) 
    path.addLatitude(53.4584, longitude:-2.1811) 
    path.addLatitude(53.4601, longitude:-2.1811) 
    path.addLatitude(53.4617, longitude:-2.1821) 
    path.addLatitude(53.4630, longitude:-2.1829) 
    path.addLatitude(53.4632, longitude:-2.1851) 
    path.addLatitude(53.4635, longitude:-2.1869) 
    path.addLatitude(53.4638, longitude:-2.1882) 
    path.addLatitude(53.4645, longitude:-2.1873) 


    let polyline = GMSPolyline(path: path) 
    polyline.strokeColor = .blue 
    polyline.strokeWidth = 6.0 
    polyline.geodesic = true 
    polyline.map = mapView 
    updateMarker(coordinates: destCoord) 
    view = mapView 
} 

func updateMarker(coordinates: CLLocationCoordinate2D) { 
    CATransaction.begin() 
    CATransaction.setAnimationDuration(10.0) 
    marker.position = coordinates 
    CATransaction.commit() 
} 

}

+0

Wie erreichen Sie das? Bitte helfen Sie mir, wie Sie sich nähern? –

Antwort

0

Ich bin nicht mit einer Bibliothek vertraut oder ähnlich das kann Ich gebe Ihnen dies, also werde ich einen manuellen Ansatz skizzieren, den Sie dazu verwenden können, dies relativ einfach zu tun.

Um die Markierung über die Polylinie zu bewegen, müssen Sie die Schritte berechnen, die die Markierung von jedem Punkt benötigt, um den nächsten Punkt zu erreichen.
Eine Möglichkeit ist die folgende für jede einzelne Zeile zu tun, dass die Polylinie definiert:
1) Definieren Sie eine Zeile f(x) = ax + b für je 2 Punkte Sie weiter here, wenn Sie in Hilfe benötigen bei der Berechnung der Steigung der Linie (a lesen die obige Gleichung)

2) Definieren Sie den Schritt, den der Marker dauert, bis er das Ende dieser Zeile erreicht. Sie können die Länge der Linie durch eine Konstante teilen, die Ihnen eine Konstante step gibt. Dies ist nicht ideal, da es die gleiche Anzahl von Schritten benötigt, um sich über kurze und längere Linien zu bewegen, aber es ist ein Anfang. Beachten Sie auch, dass der Abstand zwischen 2 Punkten/lb auf einer Kugel liegt und nicht so einfach wie in 2 Dimensionen. Sehen Sie sich https://en.wikipedia.org/wiki/Haversine_formula für weitere Informationen an.

3) Setzen Sie den Marker auf den ersten Punkt (x1,y1), und verschieben Sie ihn auf (x1+step, f(x1+step)).
Sie müssen bestimmen, ob Sie sich auf der Linie nach links oder rechts bewegen möchten.

4) Überprüfen Sie nach jeder Bewegung des Markers, ob er den Endpunkt der aktuellen Linie erreicht hat, und beginnen Sie dann erneut mit der nächsten Linie.

Verwandte Themen