2016-06-29 10 views
0

Ich versuche, Polylinie in Echtzeit zu zeichnen, um Benutzern die Route zu zeigen, die sie bisher genommen haben. Ich benutze Google Map API, und bis jetzt zeigt es den aktuellen Standort der Benutzer ohne Probleme. Aber die Polylinie funktioniert nicht (Polylinie wird überhaupt nicht gezeichnet). Ich rufe startMonitoringSignificantLocationChanges auf, nachdem ich die Berechtigung überprüft und die Polylinie in didupdatelocations gezeichnet habe. Hier ist ein relevanter Teil meines Codes:Polylinie auf der Google-Karte in Echtzeit funktioniert nicht

extension MapViewController: CLLocationManagerDelegate { 
    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     if status == .AuthorizedAlways { 
      locationManager.startUpdatingLocation() 
      mapView.myLocationEnabled = true 
      mapView.settings.myLocationButton = true 
      locationManager.startMonitoringSignificantLocationChanges() 
    } 
} 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     if let location = manager.location { 
      mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0) 
      path.addCoordinate(CLLocationCoordinate2D(latitude: location.coordinate.latitude, 
      longitude: location.coordinate.longitude)) 
      let polyline = GMSPolyline(path: path) 
      polyline.strokeColor = UIColor.redColor() 
      polyline.strokeWidth = 3 
      polyline.map = mapView 

      locationManager.stopUpdatingLocation() 

    } 

} 

UPDATE-1

Nach Auskommen stopUpdatingLocation Linie, tut es die Grenze ziehen. Aber die Linie ist verstümmelt.

UPDATE-2

ich herausgefunden, warum die Linie ein Chaos statt einer geraden Linie ist. Das liegt daran, dass das iPhone den aktuellen Standort ständig ändert (obwohl es stationär ist), also mehrere Zeilen in einem kleinen Bereich zeichnet. Wie halte ich das iPhone davon ab?

UPDATE-3

ich gerade herausgefunden, dass "Jumpy" aktuelle Position nicht nur in meiner app passieren. Es passiert auch in der GoogleMap App. Das ist also wahrscheinlich Iphone/ios GPS-Problem.

+0

Sie müssen nur das Rauschen aus den Standortdaten entfernen. Grundsätzlich ignorieren neue Standortwerte, wenn der neue Wert nur einen Unterschied von nur 0,0001 hat (so etwas) – Nishant

+0

Eigentlich ist der Bereich nicht wirklich klein . Es ist groß genug, um sich mit dem Benutzer zu verwechseln, der sich in eine andere Straße verwandelt, um sie als Lärm herauszufiltern. Ich benutze IPhone 5 bty. – user30646

Antwort

1

Sie müssen nur ungültige Standortaktualisierungen oder Aktualisierungen mit geringer Genauigkeit ignorieren.

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
CLLocation *location = [locations lastObject]; 
    NSTimeInterval age = -[location.timestamp timeIntervalSinceNow]; 
    if (age > 120) return; // ignore old (cached) updates 
    if (location.horizontalAccuracy < 0) return; // ignore invalid updates 
    if (location.horizontalAccuracy <=10) //you can change 10 to 20 if you want more frequent updates 
    { 
    // this is a valid update 
    } 
} 

Hoffe das hilft.

Verwandte Themen