【发布时间】:2011-11-02 16:30:25
【问题描述】:
在我的应用程序中,我有 1 个固定位置的经纬度。现在使用 iPhone 设备的用户可以在任何地方移动,即使他旋转他的设备,箭头(一些 uiimageview)应该指向那个固定位置,这样用户每次都会得到指向那个位置的方向。我尝试如下。
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
CLLocationCoordinate2D here = newLocation.coordinate;
[self calculateUserAngle:here];
}
-(void) calculateUserAngle:(CLLocationCoordinate2D)user {
NSLog(@"my destination is %f ; %f", fixlocLat, fixlocLon);
degrees = degrees + atan2(sin(fixlocLon-user.longitude)*cos(fixlocLat),cos(user.latitude)*sin(fixlocLat) - sin(user.latitude)*cos(fixlocLat)*cos(fixlocLon-user.longitude));
//get angle between user location and fix location
}
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
arrow.transform = CGAffineTransformMakeRotation((degrees-newHeading.trueHeading) * M_PI / 180);
}
但上面的代码总是将箭头旋转到大约。每个位置都向北 2-3 度。
我的问题看起来类似于this Stack Overflow question.但是使用此链接中的代码我得到了错误的方向。 请帮帮我。
如果有任何使用加速度计或陀螺仪数据的想法对我有帮助。
提前感谢。
【问题讨论】:
-
位置有多远?如果很远,可能需要great circle distance 计算。
-
我们如何在 xcode(objective c) 中使用大圆距离计算,距离可以远至大约。 1000 公里。
-
距离是可变的,它会随着用户移动而更新,但范围在 0 到 1000 公里左右。
-
我不确定这确实是您遇到的问题,大圆只是角度不准确的原因之一。除了这件事,我看到你没有实现设备方向。使用“if ([CLLocationManager headingAvailable]) [locationsManager startUpdatingHeading];”从指南针获取航向(方位角)更新,并实现委托方法 didUpdateHeading,它为您提供设备的最新航向。使用 heading.trueHeading 或 Magnetic 获取设备面向的方向,并在您的 calculateUserAngle 中使用生成的角度。
-
在这里查看可能的答案:*.com/questions/7298193/…
标签: iphone objective-c xcode cllocationmanager compass-geolocation