1、使用iOS定位功能 需要使用此类 CLLocationManager* locationManager,首先引入库文件
#import <CoreLocation/CoreLocation.h>,在工程配置中添加CoreLocation的静态库。
2、在定位的类实现此协议 <CLLocationManagerDelegate>
3、初始化类,新建locationManager对象。
-(id)initLocationManager
{
self.locationManager=[[CLLocationManager alloc]init];
[[self locationManager] setDelegate:self];
self.locationManager.headingFilter=0;
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
self.locationManager.distanceFilter = 10.0f;
return self;
}
4、获得当前定位位置
-(CLLocation*) userLocation
{
return [locationManager location];
}
5、根据需要实现当定位位置变化的方法
-(void) locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation
{
self.preLocation = self.lastLocation;
self.lastLocation=[newLocation coordinate];
self.lastTime = [NSDate date];
// NSLog(@"newLocation=%f,%f",self.lastLocation.latitude,self.lastLocation.longitude);
if (userLocationAccuracyIndicator == nil)
{
RMCircle* circle = [[RMCircle alloc] initWithContents:self.mapView radiusInMeters:[newLocation horizontalAccuracy] latLong:[newLocation coordinate]];
[circle setLineWidthInPixels:2.0f]; // b2bed4
[circle setLineColor:[UIColor colorWithRed:1.f/255.f green:92.f/255.f blue:244.f/255.f alpha:1.0f]];
[circle setFillColor:[UIColor colorWithRed:178.f/255.f green:190.f/255.f blue:221.f/255.f alpha:0.5f]];
[self setUserLocationAccuracyIndicator:circle];
// add the user location's accuracy indicator as the first layer
// [[self overlay] insertSublayer:circle atIndex:0];
circle.name=@"MYLOCATION";
[self.mapView.markerManager addRMCircle:circle];
}
else
{
[userLocationAccuracyIndicator moveToLatLong:[newLocation coordinate]];
[userLocationAccuracyIndicator setRadiusInMeters:[newLocation horizontalAccuracy]];
}
if (userLocationMarker == nil)
{
RMMarker* marker = [[RMMarker alloc] initWithUIImage:[UIImage imageNamed:@"image/gps_arrow.png"] anchorPoint:CGPointMake(0.5f,0.5f)];
UIView* view=[NSUIUtil bubbleView:@"我的位置"];
RMMarker* mark=[[RMMarker alloc]initWithUIView:view placename:@"我的位置"];
NSPlace* point=[[NSPlace alloc]init];
point.point=[newLocation coordinate];
point.name=@"我的位置";
marker.place=point;
mark.name=@"MYLOCATION";
marker.name=@"MYLOCATION";
[self setUserLocationMarker:marker];
[self.mapView.markerManager addMarker:marker AtLatLong:point.point];
//[self.mapView.markerManager addMarker:mark AtLatLong:point.point];
}
else{
[self.mapView.markerManager moveMarker:userLocationMarker AtLatLon:[newLocation coordinate]];
}
}
#pragma mark CLLocationManagerDelegate protocol
-(void) locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error
{
NSLog(@"Location manager failed with error: %@",[error localizedDescription]);
}
-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
if (userLocationMarker&&newHeading.headingAccuracy>0){
double nowAngle = 0;
NSDate *nowTime = [NSDate date];
double del_lat = self.lastLocation.latitude - self.preLocation.latitude;
double del_lon = self.lastLocation.longitude - self.preLocation.longitude;
if(self.preLocation.latitude!=0.0 && self.preLocation.longitude!=0.0 && fabs(del_lat) + fabs(del_lon)> 0.0001 && [nowTime timeIntervalSinceDate:self.lastTime] < 3.0)
{
nowAngle = atan2(del_lon, del_lat);
}
else{
[userLocationMarker setAffineTransform:CGAffineTransformIdentity];
nowAngle=1.0*M_PI*(newHeading.magneticHeading+[self getDeviceOrientation])/180.0;
}
CGAffineTransform angle=CGAffineTransformMakeRotation(nowAngle);
[userLocationMarker setAffineTransform:angle];
}
}
-(int)getDeviceOrientation{
UIInterfaceOrientation or= [UIApplication sharedApplication].statusBarOrientation;
switch (or) {
case UIInterfaceOrientationLandscapeLeft:
return -90;
break;
case UIInterfaceOrientationLandscapeRight:
return 90;
break;
default:
break;
}
return 0;
}
本文详细介绍如何在iOS应用中实现定位功能。从引入CoreLocation库开始,到创建CLLocationManager实例并设置代理,再到获取用户当前位置及更新位置信息。此外,还介绍了如何处理定位失败的情况以及如何根据磁北方向调整图标方向。
1415

被折叠的 条评论
为什么被折叠?



