iOS 系统地图实现及定位

Posted lxjshuju

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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];
    [email protected]"地图";
    [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 *[email protected]"当前位置";
        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 *[email protected]"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 系统地图实现及定位的主要内容,如果未能解决你的问题,请参考以下文章

iOS 地图源及目的地定位划线和系统导航的使用

地图与定位系统地图

iOS 之使用系统定位获取当前经纬度和地理信息

Android实现百度离线地图+gps定位

IOS_地图与定位

iOS - 地图