Definitiver Algorithmus zur Bestimmung der genauesten Antwort vom iPhone CoreLocation?

8

Hat jemand das schon erledigt? Ich habe viele Forenbeiträge gelesen und kann immer noch nicht sagen, ob das eine geklärte Frage ist ...

Gegeben, dass didUpdateToLocation () zwischengespeicherte oder ungenaue Informationen zurückgeben kann, wie können Sie feststellen, wann Sie eine genaue Lösung gefunden haben?

Wenn Sie die gewünschte Genauigkeit für kCLLocationAccuracyNearestTenMeters, HundredMeters, Kilometre, ThreeKilometer festlegen, ist es offensichtlich, dass Sie die horizontale Genauigkeit der zurückgegebenen Punkte mit der gewünschten Genauigkeit vergleichen können, um zu entscheiden, wann ein Punkt akzeptiert wird.

Aber die Werte von kCLLocationAccuracyBestForNavigation und kCLLocationAccuracyBest sind -2 bzw. -1. Wie weiß ich also, wann ich die gewünschte Genauigkeit habe?

Ich überprüfe derzeit das Alter des Fixes und lehne jedes Fix ab, das zu alt ist. Ich überprüfe dann, ob die horizontale Genauigkeit negativ ist und lehne das ab, wenn dies der Fall ist. Wenn ich eine positive vertikale Genauigkeit erhalte, dann benutze ich normalerweise diesen Fix, da die entsprechende horizontale Genauigkeit auch gut ist.

Aber diese Kontrollen wurden verwendet, wenn ich nach Genauigkeit in den 10-100 Metern von Metern suche ... Ich weiß nicht, ob und wann ich etwas überprüfen soll ... AccuracyBestForNavigation oder ... AccuracyBest ?? Soll ich den locationManager ständig nivellieren und niemals erwarten, ihn auszuschalten und keine Ergebnisse zu filtern?

Wer weiser als ich mit einer Antwort?

Danke

    
morgman 06.10.2010, 22:24
quelle

2 Antworten

3

Es ist nicht wirklich ein definitiver, perfekter Algorithmus (ich bezweifle, dass es einen für diese Aufgabe gibt, aufgrund äußerer Bedingungen, ich meine, du kannst versuchen, deinen Standort auf dem Feld oder in einem Grab zu finden), es ist ein Ad-hoc-Algorithmus und es funktioniert für mich.

Ich habe einen Wrapper für LocationManager erstellt, wie

%Vor%

Implementierung

%Vor%

Der Code ist nicht exzellent (keine Formatierung), aber die Idee, denke ich, ist einfach und klar, erhalte den ersten Ort, wirf ihn raus, es ist ein Cache, mach 3 Versuche maximal für den genauesten Ort. Es kann lange dauern, und wenn der Benutzer wartet (wie in meinem Fall), ein Zeitlimit definieren. Noch einmal, es funktioniert für meine App, aber fühlen Sie sich frei, es zu ändern oder einen anderen Ansatz zu nehmen.

    
fspirit 12.10.2010, 11:37
quelle
2

Ich weiß, dass dies ein alter Faden ist, den ich zurück bringe, aber ich bin auf diese Frage gestoßen, weil ich auch nach einer genauesten Lösung gesucht habe, und nachdem ich eure Lösung fspirit gelesen habe, mag ich sie sehr. Wie Morgman habe ich auch etwas ähnliches gedacht, aber du hast unsere Gedanken nur in Code geschrieben, lol. Auch ich mag dein Vorwärts-Multi-Threading-Denken;)

Aber ich habe tatsächlich eine Frage / einen Vorschlag, wenn Sie so wollen. Wenn ich versuche, Positionsdaten auf dem iPhone zu erhalten, erhalte ich sofort mindestens 3 Koordinatensätze mit derselben horizontalen Genauigkeit. Also eine gute Anzahl von Versuchen müsste mehr als 4 sein. Aber die Frage ist dann, wie viele Versuche gut sind?

Also schlage ich vor, dass wir, anstatt die Anzahl der Versuche zu ändern, den Code ein wenig optimieren können, so dass der Zähler für die Anzahl der Versuche steigt. Nur wenn die horizontale Genauigkeit wesentlich geringer ist als die vorherige der genaueste, so etwas. Ich denke hier nur laut nach. Weil ich mir alle Standortdaten angesehen habe, die ich von meinem iPhone 4 bekommen habe (und ich bin nicht sicher, wie es auf anderen Geräten funktioniert), und nach dem, was ich gesehen habe, wird der Standort ziemlich konstant aktualisiert und die horizontale Genauigkeit bleibt für die ersten paar Updates relativ gleich, springt dann nach einer Weile plötzlich von 400 auf 100 herunter und springt dann nach einer oder zwei weiteren Sekunden wieder auf etwa 30 herunter. All dies ist im Laufe von ungefähr 30-50 Updates, also könnte in dieser Situation eine maximale Anzahl von Versuchen von 4 nicht funktionieren, außer Sie zählen nur die Sprünge. Was denkst du?

    
Omar 22.12.2010 17:26
quelle

Tags und Links