LBS

来源:互联网 发布:上海微创软件怎么样 编辑:程序博客网 时间:2024/05/18 05:43

前提 那些KEY  资料都申请好     

由于项目只需要定位与导航  所以只添加了定位导航的第三方


1.配置plist 文件

定位权限

在项目的 Info.plist 添加 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription 字段,根据您的业务需求,任选其一即可。

其中:

  • NSLocationWhenInUseUsageDescription 表示应用在前台的时候可以搜到更新的位置信息。
  • NSLocationAlwaysUsageDescription 表示应用在前台和后台(suspend 或 terminated)都可以获取到更新的位置数据。
在APP delegate 设置key  


#import <AMapFoundationKit/AMapFoundationKit.h>

[AMapServicessharedServices].apiKey =@"f7e87824ce38a3efa48c03f08dced174";



在控制器创建视图与定位

 

- (MAMapView *)mapView{

    if (_mapView ==nil) {

        MAMapView *map = [[MAMapViewalloc]initWithFrame:self.view.frame];

        map.delegate =self;

        [self.viewaddSubview:map];

        _mapView = map;

    }

    return_mapView;

}

配置参数

- (void)configLocationManager

{

    self.locationManager = [[AMapLocationManageralloc]init];

    

    [self.locationManagersetDelegate:self];

    

    //设置不允许系统暂停定位

    [self.locationManagersetPausesLocationUpdatesAutomatically:NO];

    

    //设置允许在后台定位

//    [self.locationManager setAllowsBackgroundLocationUpdates:YES];

    

    [self.locationManagersetDesiredAccuracy:kCLLocationAccuracyKilometer];

//    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    //设置定位超时时间

    [self.locationManagersetLocationTimeout:4];



}

定位回调

- (void)initCompleteBlock

{

    __weak__typeof(&*self)weakSelf =self;

    self.completionBlock = ^(CLLocation *location,AMapLocationReGeocode *regeocode,NSError *error)

    {

        if (error)

        {

            NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);

            if (error.code ==AMapLocationErrorLocateFailed)

            {

                return;

            }

        }

        if (location)

        {

            MAPointAnnotation *annotation = [[MAPointAnnotationalloc]init];

            [annotation setCoordinate:location.coordinate];

            

            if (regeocode)

            {

                [annotation setTitle:[NSStringstringWithFormat:@"%@", regeocode.formattedAddress]];

                [annotation setSubtitle:[NSStringstringWithFormat:@"%@-%@-%.2fm", regeocode.citycode, regeocode.adcode, location.horizontalAccuracy]];

            }

            else

            {

                [annotation setTitle:[NSStringstringWithFormat:@"lat:%f;lon:%f;", location.coordinate.latitude, location.coordinate.longitude]];

                [annotation setSubtitle:[NSStringstringWithFormat:@"accuracy:%.2fm", location.horizontalAccuracy]];

            }

            

            [weakSelf addAnnotationToMapView:annotation];

        }

    };

}

- (void)addAnnotationToMapView:(id<MAAnnotation>)annotation

{

    [self.mapViewaddAnnotation:annotation];

    

    [self.mapViewselectAnnotation:annotationanimated:YES];

    [self.mapViewsetZoomLevel:15.1animated:NO];

    [self.mapViewsetCenterCoordinate:annotation.coordinateanimated:YES];

}

#pragma mark - AMapLocationManager Delegate


- (void)amapLocationManager:(AMapLocationManager *)manager didFailWithError:(NSError *)error

{

    NSLog(@"%s, amapLocationManager = %@, error = %@",__func__, [managerclass], error);

}


- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location

{

    NSLog(@"location:{lat:%f; lon:%f; accuracy:%f}", location.coordinate.latitude, location.coordinate.longitude, location.horizontalAccuracy);

    

    

    [self.mapViewsetCenterCoordinate:location.coordinate];

    [self.mapViewsetZoomLevel:15.1animated:NO];

}

#pragma mark - MAMapView Delegate


- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation

{

    if ([annotationisKindOfClass:[MAPointAnnotationclass]])

    {

        staticNSString *pointReuseIndetifier =@"pointReuseIndetifier";

        

        MAPinAnnotationView *annotationView = (MAPinAnnotationView *)[mapViewdequeueReusableAnnotationViewWithIdentifier:pointReuseIndetifier];

        if (annotationView ==nil)

        {

            annotationView = [[MAPinAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:pointReuseIndetifier];

        }

        

        annotationView.canShowCallout   =YES;

        annotationView.animatesDrop     =YES;

        annotationView.draggable        =NO;

        annotationView.pinColor         =MAPinAnnotationColorPurple;

        

        return annotationView;

    }

    

    returnnil;

}

 开启定位

[self.locationManagerstartUpdatingLocation];


开始定位接受回调

 [self.mapViewremoveAnnotations:self.mapView.annotations];

    

    //进行单次定位请求

 [self.locationManagerrequestLocationWithReGeocode:YEScompletionBlock:self.completionBlock];




进入APP就要拿到坐标与给用户提示   

willFinishLaunchingWithOptions


0 0