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; }