2013-11-07 2 views
0

Я хочу знать азимут (курс) удаленного объекта (на карте). У меня есть координаты этого удаленного объекта. Я пытался сделать это:Получить курс удаленного объекта с CLLocation

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

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

выход: loc: -1.0...

, но почему?

Я хочу знать этот курс с моего текущего направления. У меня также есть обновление местоположения с помощью метода startUpdatingLocation и делегирования.

Что я делаю неправильно?

Почему я не могу просто получить курс отдаленного объекта с моего текущего положения? Благодарю.

+0

Почтовый код о том, как вы получаете дистанцию. (кроме выхода журнала выше). – random

ответ

3

-course возвращает направление движущегося объекта. Таким образом, вы бы назвали текущим местоположением своих пользователей. Это не дает вам направление из вашего местоположения в другое место. Так что, если Нью-Йорк не движется, он всегда будет возвращать -1

Если вы хотите, чтобы найти компас заголовок вы должны двигаться вы можете сделать это:

#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); 
+0

Я вызываю это через несколько минут после первого обновления. Мне не нужна дистанция, я ищу курс. 'distLoc', это отдаленное местоположение, я имею в виду. –

+0

Я обновил свой ответ – random

+0

О, я вижу, я должен делать заголовок один, нет такой функции. Спасибо за образец кода, я помечаю этот ответ как принятый. Благодарю. –

1

использовать ниже код, чтобы получить Конечно

CLLocation *distLoc = [[CLLocation alloc] initWithCoordinate:loc altitude:location.altitude horizontalAccuracy:location.horizontalAccuracy verticalAccuracy:location.verticalAccuracy course:location.course speed:location.speed timestamp:location.timestamp]; 
Смежные вопросы