2012-07-08 7 views
8

Chcę uzyskać odchylenie urządzenia od północy magnetycznej w stopniach i użyć tej wartości w jakimś kodzie, który piszę.Która klasa/kod iOS zwraca północ magnetyczną?

Nie chcę korzystać z usług lokalizacyjnych urządzenia i dlatego nie jestem zainteresowany uzyskaniem Prawdziwej Północy, ale raczej Magnetyczną Północą (używając wyłącznie magnetometru urządzenia).

Która klasa (lub proces kodowania ...) mogłaby mi zapewnić tę wartość (polegając wyłącznie na magnetometrze)?

klasa CLLocationManager i jego właściwości polegają na usługi lokalizacyjne są włączone/dostępny

gdzie jako ramy Rdzeń Projekt z klasą CMMagnetometerData dostarcza nam następującej własności:

@property(readonly, nonatomic) CMMagneticField magneticField 

A structure containing 3-axis magnetometer data 

typedef struct { 
    double x; 
    double y; 
    double z; 
} CMMagneticField; 

Jak mogę dostać z tego jakieś stopnie? czy jest jakiś inny sposób (klasa/własność/metoda) do uzyskiwania stopni z magnetometru wyłącznie?

Z góry dziękujemy wszystkim, którzy mają przydatne informacje na ten temat! :)

Odpowiedz

12

Stwierdza, że ​​dane CMMagneticField są nieprzetworzone, co oznacza, że ​​obejmuje błąd wprowadzony z samego urządzenia i jego otoczenia. CMDeviceMotion zapewnia takie same wartości pola magnetycznego, które są filtrowane.

Aby określić północ magnetyczną, należy użyć filtrowanych wartości, a urządzenie powinno znajdować się na poziomie powierzchni Ziemi.

Jeżeli X i Y wartości pola magnetycznego kąt (deklinacji z północy magnetycznej w stopniach) można obliczyć z następującego formula:

if (y>0): heading = 90.0 - [arcTan(x/y)]*180/π 
if (y<0): heading = 270.0 - [arcTAN(x/y)]*180/π 
if (y=0, x<0): heading = 180.0 
if (y=0, x>0): heading = 0.0 

W obj-C, zakładając, że mają CMMagnetometerData przedmiotu nazywa magnetometerData, że będzie wyglądać następująco:

double heading = 0.0; 
double x = magnetometerData.magneticField.x; 
double y = magnetometerData.magneticField.y; 
double z = magnetometerData.magneticField.z; 

if (y > 0) heading = 90.0 - atan(x/y)*180.0/M_PI; 
if (y < 0) heading = 270.0 - atan(x/y)*180.0/M_PI; 
if (y == 0 && x < 0) heading = 180.0; 
if (y == 0 && x > 0) heading = 0.0; 
+0

co, jeśli chcę uzyskać Północ Magnetyczną, niezależnie od tego, jak trzymam urządzenie? na przykład cyfrowy kompas na iPhone 4S zwraca północ magnetyczną (usługi lokalizacyjne wyłączone), niezależnie od tego, jak trzymam urządzenie. Jak mogę to osiągnąć? –

+0

Formuła, którą zasugerowałeś, jest nieprawidłowa Cel-C –

+0

Przekształciłem ją w prawidłowy kod Celu-C, ale cały czas otrzymuję 0 stopni .. –

-2

trzeba bezpiecznik czujniki naśladować aplikacje apple. Korzystają z przyspieszeniomierza żyroskopowego i magnetometru, a zaawansowani matematycy mogą lub nie nauczyli się produkować tak czyste wyniki. Powodzenia. Prawdopodobnie nie będziesz w stanie naśladować ich.

+1

Czy czytasz pytanie? Sprawdź dokładnie, o co prosił autor. – Trinimon

Powiązane problemy