前提 那些KEY 资料都申请好
由于项目只需要定位与导航 所以只添加了定位导航的第三方
1.配置plist 文件
- NSLocationWhenInUseUsageDescription 表示应用在前台的时候可以搜到更新的位置信息。
- NSLocationAlwaysUsageDescription 表示应用在前台和后台(suspend 或 terminated)都可以获取到更新的位置数据。
#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