Как я могу сопоставить значения компаса iphone с координатами экрана? - PullRequest
0 голосов
/ 27 октября 2010

Я делаю приложение AR, которое показывает UILabel в cameraView в зависимости от положения конкретного места.Когда компас iphone ведет к месту, в центре экрана отображается метка.
Моя проблема в том, что я хочу, чтобы эта метка поворачивалась влево или вправо, когда я поворачиваю iphone.Я предполагаю, что есть какой-то способ сопоставить градусы компаса с координатами экрана, чтобы я мог перерисовать метку в правильном положении экрана, но я не представляю, как это сделать.Мне не нужен акселерометр для этого, мне нужно только преобразовать значения компаса в координаты экрана.Кто-нибудь знает какое-нибудь решение?Спасибо!

1 Ответ

2 голосов
/ 27 октября 2010

Предполагая, что ваша текущая позиция и позиция назначения выражены в CLLocationCoordinate2D - используйте следующее, чтобы получить угол (в радианах) от вашего источника до пункта назначения:

- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc

{

    float fLat = [self angleToRadians:fromLoc.latitude];
    float fLng = [self angleToRadians:fromLoc.longitude];
    float tLat = [self angleToRadians:toLoc.latitude];
    float tLng = [self angleToRadians:toLoc.longitude];

    return atan2(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng));
}  

Затем просто вычтите текущий курс компаса в этот курс (или наоборот) и установите вращение вашей стрелки / маркера / вида метки или чего-либо еще.

Используйте это для angleToRadians:

-(float) angleToRadians:(float) a {
    return ((a/180)*M_PI);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...