Pregunta sobre gps, altitude, iphone, cllocation – Obtención de la altitud (altura desde el nivel del mar) de mi ubicación en el iPhone SDK

4

Estoy tratando de obtener la altitud de mi ubicación en mi aplicación. Pero cada vez que lo intentoaltitude propiedad deCLLocation objeto que estoy recibiendo0.00 como resultado.

Busqué en Google para mi consulta y recibí una pregunta similaraquí yaquí. Este enlace dice que si accedo a CLLocation con wifi o torre de telefonía celular, será nulo. Incluso si trato de configurardesireAccuracy Lo mejor de todo es que no se asegura de que la aplicación utilice GPS. También está diciendo que si estoy en el interior no podré acceder al GPS.

En muchos casos no es seguro que la aplicación use solo el GPS. También quiero alguna forma de obtener Altitude desde el wifi o la torre celular. Para eso busqué más en Google y me dieronAPI de Google Earth pero creo que esto es solo para la tecnología .net de Microsoft.

Ahora, de acuerdo con esta situación, creo que para una solución puedo crear un servicio web en la tecnología de Microsoft y pasar mi ubicación allí y puedo obtener la altitud como respuesta, pero no quiero hacer esto.

¿Alguien puede sugerirme cómo obtener la altitud de mi ubicación desde iOS? ¿Hay alguna forma disponible o no? Si es así, por favor navegue en la dirección correcta.

Gracias por adelantado.

Edit1

solíaCLLocationManager para actualizar la ubicación y cuando obtengo mi ubicación necesito altitud.

Edit2

De acuerdo con la respuesta de @ fishinear, intenté el siguiente código:

- (void)viewDidLoad
{
    [super viewDidLoad];
    manager = [[CLLocationManager alloc] init];
    [manager setDesiredAccuracy:kCLLocationAccuracyBestForNavigation];
    [manager setDistanceFilter:kCLDistanceFilterNone];
    [manager setDelegate:self];
    [manager startUpdatingLocation];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    if ([newLocation verticalAccuracy] >= 0) {
        NSLog(@"Altitude = %lf",newLocation.altitude);
    }
    NSLog(@"Vertical Accuracy : %lf",newLocation.verticalAccuracy);
}

verticalAccuracy es siempre-1. No está cambiando, incluso después de ejecutar la aplicación a los últimos 30 minutos. Estoy corriendo ios 4.3.2 en mi 3GS. Estoy en interiores, así que creo que no está accediendo al GPS incluso con este código.

Tu respuesta

2   la respuesta
4

Para responder a su pregunta original: el GPS siempre se utilizará si configura la precisión deseada en Mejor o Mejor navegación, y el filtro de distancia en kCLDistanceFilterNone cuando configure CLLocationManager. También obtendrá valores de altitud en el evento CLLocation.

Sin embargo, se tarda un poco antes de que el GPS se haya "bloqueado" a suficientes satélites para poder informar la altitud. Durante ese tiempo, informará eventos de CLLocation sin valores de altitud. Por lo tanto, debe ignorar el primer par de eventos hasta que el valor de VerticalAccuracy sea lo suficientemente bueno para usted. Además, verifique la marca de tiempo, porque a veces el primer evento CLLocation es uno antiguo.

Pero, ¿cómo puedo asegurarme de que el valor de altitud sea correcto entre algunos valores como dijiste? Kapil Choubisa
¿Has verificado que los servicios de ubicación están configurados en "on" para esta aplicación? Dmorneault
Revisa miedit2 en cuestión. Implementé tu sugerencia pero no funcionó. Kapil Choubisa
Verifique el campo de exactitud vertical en CLLocation. Eso indica la precisión del valor de la altitud y es negativo si la altitud no se determinó. fishinear
Usted declara que está en el interior. Cuando está en el interior, el GPS puede tener problemas para "ver" suficientes satélites para determinar la altitud. Pruébelo primero al aire libre, si funciona allí, entonces esa es la causa. fishinear
0

VerAndroid - ¿Obtener altitud por latitud y longitud? Existe una solución de Android pero es fácilmente adaptable a iOS.

La respuesta es usar elServicio web de consultas de elevación de USGS

Desde la respuesta superior, básicamente, solo envías una solicitud de HTML a:

http://gisdata.usgs.gov/xmlwebservices2/elevation_service.asmx/getElevation?X_Value=" + 
             String.valueOf(longitude)   + 
             "&Y_Value=" + String.valueOf(latitude)             
             + "&Elevation_Units=METERS&Source_Layer=-1&Elevation_Only=true"; 

A continuación, puede analizar el texto de respuesta entre la<double>...</double> etiquetas

Editar: Parece que podrías estar tratando de obtener una elevación fuera de los Estados Unidos.

La API de Google Maps proporciona un servicio y documentación de Elevation enhttps://developers.google.com/maps/documentation/javascript/elevation

Intenté usar esta URL y pasé los valores xey22.998851594142938 & 72.5317382812553173828125 respectivamente y la respuesta es<double>-1.79769313486231E+308</double>. ¿Qué entiendo con esto? ¿Cómo conseguir altura con esto? Kapil Choubisa
Gracias. tu respuesta editada ayudó :)developers.google.com/maps/documentation/javascript/elevation Este es el que estaba buscando. Kapil Choubisa

Preguntas relacionadas