首页 > 代码库 > iOS 系统地图实现及定位

iOS 系统地图实现及定位


1:加入库CoreLocation.framework,MApKit.framework;

2:@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) MKMapView *mapView;
@property (nonatomic, strong) CLLocation *checkinLocation;
@property (strong, nonatomic) NSString *currentLatitude; //纬度
@property (strong, nonatomic) NSString *currentLongitude; //经度

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title=@"地图";
    [self initRightBarButton];
    [self setupLocationManager];
    [self setupMapView];
}
-(void)initRightBarButton{
    UIButton* _btnRight = [UIButton buttonWithType:UIButtonTypeCustom];
    [_btnRight setFrame:CGRectMake(0, 0, 39, 34)];
    UIImage *imgNormal = [UIImage imageNamed:@"gpsbtn_dianji"];
    UIImage *imgSelect = [UIImage imageNamed:@"gpsbtn"];
    [_btnRight setBackgroundImage:imgNormal forState:UIControlStateNormal];
    [_btnRight setBackgroundImage:imgSelect forState:UIControlStateSelected];
    _btnRight.showsTouchWhenHighlighted = YES;
    [_btnRight addTarget:self action:@selector(showUserLocation:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:_btnRight];
    self.navigationItem.rightBarButtonItem = buttonItem;
}
- (void)setupLocationManager{
    _locationManager=[[CLLocationManager alloc]init];
    _locationManager.desiredAccuracy=kCLLocationAccuracyBestForNavigation;
    //每隔多少米定位一次(这里的设置为不论什么的移动)
    _locationManager.distanceFilter=kCLDistanceFilterNone;
    //iOS 8.0以后
    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
        [self.locationManager startUpdatingLocation];
    }
}
- (void)setupMapView{
    _mapView=[[MKMapView alloc]initWithFrame:self.view.bounds];
    [self.view addSubview:_mapView];
    _mapView.delegate=self;
    //用户位置追踪(用户位置追踪用于标记用户当前位置,此时会调用定位服务)
    _mapView.userTrackingMode=MKUserTrackingModeFollowWithHeading;
    _mapView.mapType=MKMapTypeStandard;
    [self initLocationData];
}
- (void)initLocationData{
    NSMutableArray *arr=[[NSMutableArray alloc]init];
    for (int i=0; i<1; i++) {
        CLLocationDegrees lat=[self.currentLatitude  doubleValue];
        CLLocationDegrees longi=[self.currentLongitude doubleValue];
        NSString *lacationName=@"当前位置";
        BasicMapAnnotation *anno=[[BasicMapAnnotation alloc]initWithLatitude:lat andLongitude:longi];
        anno.title=lacationName;
        anno.index=i;
        [arr addObject:anno];
    }
    [_mapView showAnnotations:arr animated:YES];
}
- (void)showUserLocation:(id)sender{
    MKCoordinateSpan span=MKCoordinateSpanMake(0.01, 0.02);
    MKCoordinateRegion region=MKCoordinateRegionMake(_mapView.userLocation.coordinate, span);
    [_mapView setRegion:region animated:YES];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
    NSLog(@"纬度:%f 经度:%f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
    self.currentLatitude  = [NSString stringWithFormat:@"%.4f",userLocation.location.coordinate.latitude];
    self.currentLongitude = [NSString stringWithFormat:@"%.4f",userLocation.location.coordinate.longitude];
    [self initLocationData];
    //设置地图显示范围(假设不进行区域设置会自己主动显示区域范围并指定当前用户位置为地图中心点)
    //MKCoordinateSpan span=MKCoordinateSpanMake(0.01, 0.01);
    //MKCoordinateRegion region=MKCoordinateRegionMake(_mapView.region.center, span);
    //[_mapView setRegion:region animated:true];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    if ([annotation isKindOfClass:[BasicMapAnnotation class]]) {
        static NSString *key=@"AnnotationKey";
        MKAnnotationView *annotationView=[_mapView dequeueReusableAnnotationViewWithIdentifier:key];
        BasicMapAnnotation *aa=(BasicMapAnnotation *)annotation;
        if (!annotationView) {
            annotationView=[[MKAnnotationView alloc]initWithAnnotation:aa reuseIdentifier:key];
            CGRect frame=annotationView.frame;
            frame.size.width=14;
            frame.size.height=35;
            annotationView.frame=frame;
            annotationView.canShowCallout=YES;
            UIImageView*imageview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"地图标注"]];
            imageview.frame=frame;
            [annotationView addSubview:imageview];
        }
        return annotationView;
    }
    return nil;
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

iOS 系统地图实现及定位