iOS:从没有地图的当前位置获取地理位置的角度

时间:2012-05-23 11:35:25

标签: iphone ios xcode geolocation accelerometer

我正在开发一些iPhone应用程序,我想制作一个轴承,一个移动到特定地理位置的图像,具体取决于使用加速度计的用户位置。

我在这里读了很多答案,但没有得到解决方案。

我有当前的位置坐标和目的地坐标。

您有任何想法或示例代码吗?感谢。

1 个答案:

答案 0 :(得分:9)

在顶部定义此

#define RadiansToDegrees(radians)(radians * 180.0/M_PI)
#define DegreesToRadians(degrees)(degrees * M_PI / 180.0)

在.h文件中定义变量

float GeoAngle;

在您的位置管理员的委托方法中: -

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{
    GeoAngle = [self setLatLonForDistanceAndAngle:newLocation];
}

功能如下: -

-(float)setLatLonForDistanceAndAngle:(CLLocation *)userlocation
{
    float lat1 = DegreesToRadians(userlocation.coordinate.latitude);
    float lon1 = DegreesToRadians(userlocation.coordinate.longitude);

    float lat2 = DegreesToRadians(locLat);
    float lon2 = DegreesToRadians(locLon);

    float dLon = lon2 - lon1;

    float y = sin(dLon) * cos(lat2);
    float x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
    float radiansBearing = atan2(y, x);
    if(radiansBearing < 0.0)
    {
        radiansBearing += 2*M_PI;
    }

    return radiansBearing;
}

您将在GeoAngle变量中获得不断更新的角度。 将箭头旋转到目标位置,取箭头图像并将其指定给arrowImageView的IBOutlet,并在标题更新方法上旋转它。

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading 
{
    float direction = -newHeading.trueHeading;

    arrowImageView.transform=CGAffineTransformMakeRotation((direction* M_PI / 180)+ GeoAngle);
}