2016-08-02 16 views
0

Ich versuche, CLLocationDistances hinzuzufügen und seltsame Ergebnisse zu erhalten. Hier ist mein Code:CLLocationDistances hinzufügen

var locations = [CLLocation]() 
var totalDistance = CLLocationDistance() 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    self.locations.append(locations.first!) 
    if self.locations.count > 1 { 
     self.calculateTotalDistance() 
    } 
} 

func calculateTotalDistance() -> CLLocationDistance { 
    var y = 0 
    self.totalDistance = 0 
    while y < (locations.count - 1) { 
     let firstLocation = self.locations[y] 
     let secondLocation = self.locations[y + 1] 
     let distance = firstLocation.distanceFromLocation(secondLocation) 
     print(distance) 
     totalDistance += distance 
     y++ 
    } 
    self.updateLabelWithText() 
    return totalDistance 
} 

private func updateLabelWithText() { 
    let distance = String(self.totalDistance) 
    let message = "Distance in meters: " + distance 
    self.distanceTextLabel.text = message 
} 

Im Wesentlichen jedes Mal wenn ich ein neues CLLocation Objekt aus dem System zu bekommen, ich es meinem Array anhängen. Dann iteriere ich durch das Array und erhalte den Abstand zwischen den einzelnen Punkten und füge sie dann zusammen. Ich teste den Code auf einem tatsächlichen Gerät. Wenn ich jetzt diesen Code ausführe, selbst wenn ich mich gerade hinsetze, erreicht die totalDistance-Variable in 10 Sekunden eine Zählung von 100 oder so, obwohl ich mich nicht annähernd 100 Meter bewegt habe.

Auch in der Funktion CalculateTotalDistance, drucke ich die berechnete Entfernung, und die Abstände scheinen überhaupt nicht richtig. Hier ist ein Beispiel dafür, was auf die Konsole nach dem für einige Sekunden ins Leben gerufen App gedruckt wurde:

0.0 
1.15645918113224 
1.06166528806247 
1.06006756503664 
1.05847219105153 
16.1407724137949 
9.67662215264722 
0.0 
1.15645918113224 
1.06166528806247 
1.06006756503664 
1.05847219105153 
16.1407724137949 
9.6766221526472 

Auch diese Werte sind nur aus, wenn ich sitze, so dass ich natürlich nicht bewegen 16 Meter oder 9 Meter gleichzeitig.

Irgendeine Idee, was ich hier falsch mache?

danke

Antwort

0

Dies ist wegen der Genauigkeit von GPS. Überprüfen Sie horizontalAccuracy von CLLocation vor dem Hinzufügen zu Array. Sie sollten auch desiredAccuracy von CLLocationManger auf kCLLocationAccuracyBest setzen.

+0

Die gewünschte Genauigkeit ist KCLLocationAccuracyBest. – joey

+0

Überprüfen Sie die horizontale Genauigkeit von CLLocation. Wenn es weniger als der erforderliche Schwellenwert ist, verwerfen Sie es. –