Вопрос

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

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

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

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

но почему?

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

Что я делаю не так?

Почему я не могу просто получить курс отдаленного объекта с моей текущей позиции? Спасибо.

Это было полезно?

Решение

-Кос возвращает направление движущегося объекта. Таким образом, вы бы позвонили в текущее местоположение вашего пользователя. Это не дает вам направления от вашего местоположения в другое место. Поэтому, если Нью -Йорк не движется, он всегда вернется -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);

Другие советы

Используйте ниже код, чтобы получить курс

CLLocation *distLoc =  [[CLLocation  alloc] initWithCoordinate:loc altitude:location.altitude horizontalAccuracy:location.horizontalAccuracy verticalAccuracy:location.verticalAccuracy  course:location.course speed:location.speed timestamp:location.timestamp];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top