我正在开发一些 iPhone 应用程序,我想制作一个方位,一个移动到特定地理位置的图像,具体取决于使用加速度计的用户位置。
我在这里阅读了很多答案,但没有得到解决方案。
我有当前位置坐标和目的地坐标。
您有任何想法或示例代码吗?谢谢。
我正在开发一些 iPhone 应用程序,我想制作一个方位,一个移动到特定地理位置的图像,具体取决于使用加速度计的用户位置。
我在这里阅读了很多答案,但没有得到解决方案。
我有当前位置坐标和目的地坐标。
您有任何想法或示例代码吗?谢谢。
在顶部定义这个
#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);
}