Pergunta

Eu quero saber azimute (curso) de objeto distante (no mapa). Eu tenho coordenadas desse objeto distante. Eu tentei fazer isso:

CLLocation *distLoc = [CLLocation alloc] initWithLatitude:40.725405 
                                                longitude:-74.003906]; // NY city

NSLog(@"loc: %f", distLoc.course);

A saída é: loc: -1.0...

mas por que?

Eu quero saber este curso da minha direção atual. Eu também tenho atualização de localização com startUpdatingLocation Método e Atualização delegada.

O que eu faço de errado?

Por que não consigo simplesmente obter o curso de objeto distante da minha posição atual? Obrigado.

Foi útil?

Solução

-Course retorna a direção de um objeto em movimento. Então você ligaria para -claro no local atual dos seus usuários. Não lhe dá uma direção da sua localização para outro local. Portanto, a menos que Nova York esteja se movendo, ele sempre retornará -1

Se você quiser o título de encontro que você deve estar em movimento, você pode fazer isso:

#define RAD_TO_DEG(r) ((r) * (180 / M_PI))

...    

CLLocationCoordinate2D coord1 = currentLocation.coordinate;
CLLocationCoordinate2D coord2 = distLoc.coordinate;

CLLocationDegrees deltaLong = coord2.longitude - coord1.longitude;
CLLocationDegrees yComponent = sin(deltaLong) * cos(coord2.latitude);
CLLocationDegrees xComponent = (cos(coord1.latitude) * sin(coord2.latitude)) - (sin(coord1.latitude) * cos(coord2.latitude) * cos(deltaLong));

CLLocationDegrees radians = atan2(yComponent, xComponent);
CLLocationDegrees degrees = RAD_TO_DEG(radians) + 360;

CLLocationDirection heading = fmod(degrees, 360);

Outras dicas

Use o código abaixo para obter o curso

CLLocation *distLoc =  [[CLLocation  alloc] initWithCoordinate:loc altitude:location.altitude horizontalAccuracy:location.horizontalAccuracy verticalAccuracy:location.verticalAccuracy  course:location.course speed:location.speed timestamp:location.timestamp];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top