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
Die gewünschte Genauigkeit ist KCLLocationAccuracyBest. – joey
Überprüfen Sie die horizontale Genauigkeit von CLLocation. Wenn es weniger als der erforderliche Schwellenwert ist, verwerfen Sie es. –