You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.4 KiB
68 lines
1.4 KiB
![]()
2 years ago
|
//
|
||
|
// Util.m
|
||
|
// test
|
||
|
//
|
||
|
// Created by yi chen on 3/24/15.
|
||
|
// Copyright (c) 2015 yi chen. All rights reserved.
|
||
|
//
|
||
|
|
||
|
#import "Util.h"
|
||
|
|
||
|
@implementation Util
|
||
|
|
||
|
+ (CLLocationDirection)calculateCourseFromMapPoint:(MKMapPoint)p1 to:(MKMapPoint)p2
|
||
|
{
|
||
|
//20级坐标y轴向下,需要反过来。
|
||
|
MKMapPoint dp = MKMapPointMake(p2.x - p1.x, p1.y - p2.y);
|
||
|
|
||
|
if (dp.y == 0)
|
||
|
{
|
||
|
return dp.x < 0? 270.f:0.f;
|
||
|
}
|
||
|
|
||
|
double dir = atan(dp.x/dp.y) * 180.f / M_PI;
|
||
|
|
||
|
if (dp.y > 0)
|
||
|
{
|
||
|
if (dp.x < 0)
|
||
|
{
|
||
|
dir = dir + 360.f;
|
||
|
}
|
||
|
|
||
|
}else
|
||
|
{
|
||
|
dir = dir + 180.f;
|
||
|
}
|
||
|
|
||
|
return dir;
|
||
|
}
|
||
|
|
||
|
+ (CLLocationDirection)calculateCourseFromCoordinate:(CLLocationCoordinate2D)coord1 to:(CLLocationCoordinate2D)coord2
|
||
|
{
|
||
|
MKMapPoint p1 = MKMapPointForCoordinate(coord1);
|
||
|
MKMapPoint p2 = MKMapPointForCoordinate(coord2);
|
||
|
|
||
|
return [self calculateCourseFromMapPoint:p1 to:p2];
|
||
|
}
|
||
|
|
||
|
+ (CLLocationDirection)fixNewDirection:(CLLocationDirection)newDir basedOnOldDirection:(CLLocationDirection)oldDir
|
||
|
{
|
||
|
//the gap between newDir and oldDir would not exceed 180.f degrees
|
||
|
CLLocationDirection turn = newDir - oldDir;
|
||
|
if(turn > 180.f)
|
||
|
{
|
||
|
return newDir - 360.f;
|
||
|
}
|
||
|
else if (turn < -180.f)
|
||
|
{
|
||
|
return newDir + 360.f;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return newDir;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
@end
|