Pergunta sobre gps, cllocation, iphone, altitude – Como obter altitude (altura do nível do mar) da minha localização no SDK do iPhone

4

Estou tentando obter Altitude da minha localização no meu aplicativo. Mas toda vez que tentoaltitude propriedade deCLLocation objeto que estou recebendo0.00 como resultado.

Eu pesquisei para minha consulta e recebi uma pergunta semelhanteAqui eAqui. Este link está dizendo que se eu acessar CLLocation com wifi ou torre de celular será nulo. Mesmo se eu tentar definirdesireAccuracy melhor do que até mesmo não se certificar de que o aplicativo irá usar o GPS. Também está dizendo que, se eu estiver dentro de casa, não poderei acessar o GPS.

Eu muitos casos não é certo que o aplicativo irá usar apenas GPS. Eu também quero uma maneira de obter o Altitude a partir do Wi-Fi ou da torre de celular. Por isso eu pesquisei mais e conseguiAPI do Google Earth mas acho que isso é apenas para a tecnologia Microsoft .net.

Agora, de acordo com essa situação, eu acho que para uma solução eu posso criar um serviço web em Tecnologia Microsoft e passar minha localização lá e eu posso obter altitude como resposta, mas eu não quero fazer isso.

Alguém pode me sugerir como obter a altitude da minha localização do ios. Existe alguma maneira disponível ou não? Se sim, por favor, me navegue na direção certa.

Desde já, obrigado.

Edit1

eu useiCLLocationManager para atualizar a localização e quando eu chegar a minha localização eu preciso de altitude.

Edit2

De acordo com a resposta do @ fishinear, tentei seguir o 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 é sempre-1. Não está mudando mesmo depois de executar o aplicativo para durar 30 minutos. Eu estou correndo ios 4.3.2 no meu 3GS. Eu sou indoor, então eu acho que não está acessando o GPS usando esse código.

Sua resposta

2   a resposta
0

Android - Obter Altitude Por Longitude e Latitude? existe uma solução Android, mas é facilmente adaptável ao iOS.

A resposta é usar oServiço da Web de consulta de elevação USGS

Do topo resposta lá, basicamente você acabou de enviar uma solicitação da Web em HTML para:

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"; 

Então você pode analisar o texto de resposta entre o<double>...</double> Tag

Editar: Parece que você está tentando obter elevação fora dos Estados Unidos.

A API do Google Maps fornece um serviço de elevação e documentação emhttps://developers.google.com/maps/documentation/javascript/elevation

obrigado. sua resposta editada ajudou :)developers.google.com/maps/documentation/javascript/elevation esse é o que eu estava procurando. Kapil Choubisa
Eu tentei usar este URL e passei os valores xey22.998851594142938 & 72.5317382812553173828125 respectivamente e a resposta é<double>-1.79769313486231E+308</double>. O que eu entendo com isso? Como obter altura com isso? Kapil Choubisa
4

o GPS sempre será usado se você definir desiredAccuracy como Best ou BestForNavigation, e distanceFilter como kCLDistanceFilterNone ao configurar o CLLocationManager. Você também obterá valores de altitude no evento CLLocation.

No entanto, demora um pouco antes que o GPS tenha "bloqueado" para satélites suficientes para poder relatar a altitude. Durante esse tempo, ele informará os eventos de CLLocation sem valores de altitude. Portanto, você deve ignorar o primeiro par de eventos até que o valor verticalAccuracy seja bom o suficiente para você. Além disso, verifique o timestamp, porque às vezes o primeiro evento de LLC é um antigo.

Verifique o campo verticalAccuracy em CLLocation. Isso indica a precisão do valor da altitude e é negativo se a altitude não foi determinada. fishinear
Você verificou que os Serviços de Localização estão definidos como "ativados" para este aplicativo? Dmorneault
Você afirma que está dentro de casa. Quando dentro de casa, o GPS pode ter problemas para "ver" satélites suficientes para determinar a altitude. Experimente ao ar livre primeiro, se funcionar lá, então essa é a causa. fishinear
Mas como posso ter certeza de qual valor de altitude está correto entre alguns valores, como você disse? Kapil Choubisa
Verifique meuedit2 em questão. Eu implementei sua sugestão, mas não funcionou. Kapil Choubisa

Perguntas relacionadas