iOS 定位

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)