2012-06-05 3 views
6

Wiem, jak znaleźć prawdziwy nagłówek/nagłówek magnetyczny dla lokalizacji, w której aktualnie znajduje się mój telefon, ale czy jest możliwe znalezienie odchylenia/deklinacji magnetycznej dla lokalizacji zdalnej?CLLocation - Znajdź deklinację magnetyczną/odchylenie w innej lokalizacji

Co chciałbym zrobić, to upuścić szpilkę w miejscu na mapie i od tego momentu znaleźć prawdziwe łożysko i łożysko z odchyleniem magnetycznym.

Dzięki!

+0

Jednym z moich pomysłów było napisanie go do właściwości lokalizacji CLLocation, ale ostatecznie okazało się, że jest to plik tylko do odczytu, więc nie ma go w oknie. –

Odpowiedz

4

Rozwiązałeś to? W przeciwnym razie możesz obliczyć kąt azymutu zdalnej lokalizacji. Najpierw z północnym magnetycznym kierunkiem, a potem z prawdziwym północnym kierunkiem. Na koniec odejmujesz dwa, aby uzyskać odchylenie magnetyczne.

Oto jak obliczyć kąt azymutu do zdalnej lokalizacji:

-(float)azimuthFromLocations:(CLLocationCoordinate2D)first toCoordinate:(CLLocationCoordinate2D)second{ 
float longitudeDifference = second.longitude - first.longitude; 
float latitudeDifference = second.latitude - first.latitude; 
float possibleAzimuth = (M_PI * .5f) - atan(latitudeDifference/longitudeDifference); 

if (longitudeDifference > 0) 
    return possibleAzimuth; 
else if (longitudeDifference < 0) 
    return possibleAzimuth + M_PI; 
else if (latitudeDifference < 0) 
    return M_PI; 

return 0.0f; 
} 
+0

Dzięki temu rozwiązanie okazało się nieco bardziej skomplikowane. Musiałem użyć światowego modelu magnetycznego, aby obliczyć odchylenie dla danej współrzędnej. –

+0

* wariant. Odchylenie jest w czujniku. –

+0

To rozwiązanie jest tylko (w przybliżeniu) prawdziwe w pobliżu równika. Gdy zbliżysz się do biegunów, azymut musi opierać się na odległościach, a nie współrzędnych lat/lon. – MikeMayer67

3

Kod obliczyć ten musi już istnieć w ramach gdzieś ponieważ jest on używany przez CLHeading gdy usługi lokalizacyjne są dostępne.

Jeśli ktokolwiek może znaleźć ten kod lub ma Cel C do publikowania światowego modelu magnetycznego, byłby to docenione.

AKTUALIZACJA: Znalazłem świetną otokę iOS typu open source! Dzięki Crookneck! https://github.com/stephent/ObjectiveWMM

Prosty montaż jako modułem git

run this command: 
$git submodule add https://github.com/stephent/ObjectiveWMM.git ObjectiveWMM 

Add these files to your Xcode project: 
CCMagneticDeclination.h 
CCMagneticDeclination.m 
CCMagneticModel.h 
CCMagneticModel.m 
NSDate+DecimalYear.h 
NSDate+DecimalYear.m 
WMM/EGM9615.h 
WMM/GeomagnetismHeader.h 
WMM/GeomagnetismLibrary.c 
WMM/WMM.COF