2012-06-05 9 views
6

Sé cómo encontrar el rumbo verdadero/rumbo magnético para la ubicación en la que mi teléfono se encuentra actualmente, pero ¿es posible encontrar la desviación/declinación magnética para una ubicación remota?CLLocation - Encontrar declinación/desviación magnética en otra ubicación

Lo que me gustaría hacer es poder colocar un pin en un lugar en el mapa y encontrar tanto el rumbo verdadero como el rumbo con variación magnética desde ese punto.

Gracias!

+0

Una de mis ideas era escribirlo en la propiedad de ubicación de CLLocation, pero eso terminó siendo de solo lectura, por lo que está fuera de la ventana. –

Respuesta

4

¿Lo has resuelto? De lo contrario, puede calcular el ángulo acimutal de la ubicación remota. Primero con rumbo norte magnético y luego con rumbo norte verdadero. Finalmente restas los dos para obtener la desviación magnética.

Aquí es cómo calcular un ángulo de azimut para una ubicación remota:

-(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

Gracias, la solución terminó siendo un poco más complicada. Tuve que usar el modelo magnético mundial para descubrir la desviación de una determinada coordenada. –

+0

* variación. La desviación está en el sensor. –

+0

Esta solución es solo (aproximadamente) verdadera cerca del ecuador. A medida que se acerque a los polos, el azimut debe basarse en las distancias, no en las coordenadas lat/lon. – MikeMayer67

3

El código para calcular esto ya debe existir en un marco en algún lugar, ya que es utilizado por CLHeading cuando los servicios de ubicación están disponibles.

Si alguien puede encontrar ese código o tiene el Objetivo C para la publicación del modelo magnético mundial, será apreciado.

ACTUALIZACIÓN: ¡Encontré una gran envoltura de iOS de código abierto! Gracias Crookneck! https://github.com/stephent/ObjectiveWMM

Instalación simple como un submódulo 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 
Cuestiones relacionadas