2012-04-12 24 views
1

Grundsätzlich möchte ich wissen, in welche Richtung das iPhone mit hoher Präzision zeigt, ich habe versucht, CLLocationManager: das Problem ist die CLHeading.magneticHeading gibt ein Doppel zum Beispiel 36.44323, aber wenn ich das Gerät zu drehen, aktualisiert CLLocationManager nur die Richtung, wenn es erreicht 1 Grad, so die Zahlen wie folgt lesen: 36.44323, 37.44323, 38.44323 und so weiter. Ist es möglich, mehr Genauigkeit zu haben?Ist es möglich, weniger als ein Grad Genauigkeit in iOS Kompass Kopf zu erwerben?

+0

Haben Sie die 'savedAccuracy' auf' CLLocationManager' auf 'kCLLocationAccuracyBestForNavigation' gesetzt? Dies wird mehr als nur das Magnetometer (wie Gyro) nutzen. Vielleicht bekommst du dadurch bessere Genauigkeit? – larsacus

+0

Ja getestet, aber das Ergebnis ist das gleiche, ich habe auch diese ohne Glück: 1- Einstellung headingFilter auf weniger als 1 und auch auf kCLHeadingFilterNone, 2- setzen Sie einen separaten Thread CLLocationManager Daten manuell zwischen Updates und zu lesen 3- Aufruf von stopUpdatingHeading am Ende der Methode didUpdateHeading und erneutes Einschalten mit einem separaten Thread, aber das Ergebnis ist nicht zuverlässig, da es einige Zeit dauert, bis die Ergebnisse stabil sind. – sadegh

Antwort

1

Nicht, dass ich weiß, nein.

Und verwechseln Genauigkeit nicht mit Korrektheit; nur weil es 36.44323 heißt nicht, dass es auf 5 Dezimalstellen genau ist, die Fehlergrenzen auf diesem Wert können ± 1 Grad sein :(

Ich glaube nicht, dass der Kompass auf einem iPhone hoch genug Präzision zu sagen hat Mit jedem echten Vertrauen, in welche Richtung Sie auf die Genauigkeit zeigen, die Sie wollen. Entschuldigung!

+2

Ich interessiere mich nicht für die Richtigkeit der Zahl, aber ich bin interessiert an sehr kleine Änderung in der Richtung des Gerätes, Es sollte einen Grund geben, die resultierende Zahl ist doppelt statt Ganzzahl, – sadegh

1

Wenn Sie sich nicht für die Genauigkeit interessieren, aber an den kleinen Richtungsänderungen interessiert sind, dann sollten Sie sich vielleicht CMMotionManager ansehen eine Eigenschaft (deviceMotion), mit der Sie die attitude des Geräts erhalten können, insbesondere die yaw. Durch die Aufnahme der Differenz (z. B. x) zwischen der Gier & magnetischen Kurs Bei jeder Aktualisierung der Überschrift erhalten Sie die ungefähre Überschrift zwischen den Aktualisierungen als yaw + x. Sie erhalten zeitnahe Updates von CMMotionManager, weil Sie die deviceMotionUpdateInterval selbst einstellen können.

Wenn ich mich richtig erinnere der yaw Wert in Radianten zwischen -pi und pi zurückgegeben wird, so müssen Sie zurück in Grad konvertieren, wenn x als CLLocationManager Berechnung wird die magnetische Position zurückzukehren Grad (0 bis 360).

Sie werden wahrscheinlich auch Einstellungen für die Geräteausrichtung vornehmen müssen. Der Kompass gibt die Kursdaten von der Oberseite des Geräts zurück. Wenn Sie sich also in LandscapeLeft befinden, müssen Sie 90 ° vom Kurswert subtrahieren. Für den Kurswert müssen Sie 90 ° hinzufügen, und für portraitUpsideDown ist eine Anpassung von 180 ° erforderlich .

0

Sie sollten den Gyro verwenden, wenn Sie mehr Genauigkeit benötigen. Die Gerätebewegungsdaten von CoreMotion sollten Ihnen dabei helfen. Kompass ist wirklich nicht genau genug.

4

Set CLLocationManagerheadingFilter zu kCLHeadingFilterNone oder etwas weniger als die Standard 1 Grad.

+0

dies wird die Genauigkeit nicht erhöhen , es wird nur häufiger aktualisiert –