ios百度地图的使用(普通定位、反地理编码)
iOS定位-普通定位(没有地图)-反地理编码(得到具体位置),下面通过代码给大家详解,代码如下:
#import<CoreLocation/CoreLocation.h>使用到的头文件要引入CoreLocation这个包 <CLLocationManagerDelegate>使用的代理名称 //1.使用定位服务 //设置app有访问定位服务的权限 //在使用应用期间/始终(app在后台) //info.plist文件添加以下两条(或者其中一条): //NSLocationWhenInUseUsageDescription在使用应用期间 //NSLocationAlwaysUsageDescription始终 //2.LocationManager对象管理相关的定位服务 _manager=[[CLLocationManageralloc]init]; //manager判断:手机是否开启定位/app是否有访问定位的权限 //[CLLocationManagerlocationServicesEnabled];//手机是否开启定位 //[CLLocationManagerauthorizationStatus];//app访问定位的权限的状态 if(![CLLocationManagerlocationServicesEnabled]||[CLLocationManagerauthorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse){ [_managerrequestWhenInUseAuthorization];//向用户请求访问定位服务的权限 } _manager.delegate=self; _manager.desiredAccuracy=kCLLocationAccuracyBest; _manager.distanceFilter=1.0f; [_managerstartUpdatingLocation]; //定位代理经纬度回调 -(void)locationManager:(CLLocationManager*)managerdidUpdateToLocation:(CLLocation*)newLocationfromLocation:(CLLocation*)oldLocation{ [_managerstopUpdatingLocation]; CLGeocoder*geoCoder=[[CLGeocoderalloc]init]; [geoCoderreverseGeocodeLocation:newLocationcompletionHandler:^(NSArray*placemarks,NSError*error){ for(CLPlacemark*placemarkinplacemarks){ NSDictionary*test=[placemarkaddressDictionary]; //Country(国家)State(城市)SubLocality(区)Name全称 NSLog(@"%@",[testobjectForKey:@"Name"]); } }]; }
ios百度地图的使用(普通定位、反地理编码)
1.首先接受基本的地图功能
新建一个地图类,xib拖也行,我这边是代码实现的。
_mapView=[[BMKMapViewalloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];//添加mapVIew [self.viewaddSubview:_mapView]; #pragmamark-设置mapView属性 -(void)setMapViewProperty { _mapView.mapType=BMKUserTrackingModeFollowWithHeading; _mapView.showsUserLocation=YES;//是否显示定位图层(即我的位置的小圆点) _mapView.zoomLevel=16;//地图显示比例 _mapView.rotateEnabled=NO;//设置是否可以旋转 [selfpassLocationValue]; } #pragmamark-传入定位坐标 //设置定位到得用户的位置,这里是简单的应用方法(必须打开程序时已经获取到地理位置坐标,为了解决地图定位时总是先显示天安门) -(void)passLocationValue { BMKCoordinateRegionviewRegion=BMKCoordinateRegionMake([UserLocationManagersharedInstance].clloction.coordinate,BMKCoordinateSpanMake(0.02f,0.02f)); BMKCoordinateRegionadjustedRegion=[_mapViewregionThatFits:viewRegion]; [_mapViewsetRegion:adjustedRegionanimated:YES]; } #pragmamark-设置定位圆点属性 -(void)setUserImage { //用户位置类 BMKLocationViewDisplayParam*param=[[BMKLocationViewDisplayParamalloc]init]; param.locationViewOffsetY=0;//偏移量 param.locationViewOffsetX=0; param.isAccuracyCircleShow=NO;//设置是否显示定位的那个精度圈 param.isRotateAngleValid=NO; [_mapViewupdateLocationViewWithParam:param]; }
这样基本的地图界面就出来了
如果你需要在地图上做一些请求,可以实现BMKMapViewDelegate,以下是mapView的一些协议方法
** *地图区域即将改变时会调用此接口 *@parammapview地图View *@paramanimated是否动画 */ -(void)mapView:(BMKMapView*)mapViewregionWillChangeAnimated:(BOOL)animated { //TODO } /** *地图区域改变完成后会调用此接口 *@parammapview地图View *@paramanimated是否动画 */ -(void)mapView:(BMKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated { //TODO } /** *地图状态改变完成后会调用此接口 *@parammapview地图View */ -(void)mapStatusDidChanged:(BMKMapView*)mapView { //TODO }
2.地图定位
我这边是将定位封装了一个独立的manager类来管理定位和地图上滑动到的位置,是将定位功能和地图mapVIew独立开来,管理地理移动位置的变化
#import<Foundation/Foundation.h> #import"BMapKit.h" @interfaceUserLocationManager:NSObject<BMKMapViewDelegate,BMKLocationServiceDelegate> { CLLocation*cllocation; BMKReverseGeoCodeOption*reverseGeoCodeOption;//逆地理编码 } @property(strong,nonatomic)BMKLocationService*locService; //城市名 @property(strong,nonatomic)NSString*cityName; //用户纬度 @property(nonatomic,assign)doubleuserLatitude; //用户经度 @property(nonatomic,assign)doubleuserLongitude; //用户位置 @property(strong,nonatomic)CLLocation*clloction; //初始化单例 +(UserLocationManager*)sharedInstance; //初始化百度地图用户位置管理类 -(void)initBMKUserLocation; //开始定位 -(void)startLocation; //停止定位 -(void)stopLocation; @end #import"UserLocationManager.h" @implementationUserLocationManager +(UserLocationManager*)sharedInstance { staticUserLocationManager*_instance=nil; @synchronized(self){ if(_instance==nil){ _instance=[[selfalloc]init]; } } return_instance; } -(id)init { if(self==[superinit]) { [selfinitBMKUserLocation]; } returnself; } #pragma初始化百度地图用户位置管理类 /** *初始化百度地图用户位置管理类 */ -(void)initBMKUserLocation { _locService=[[BMKLocationServicealloc]init]; _locService.delegate=self; [selfstartLocation]; } #pragma打开定位服务 /** *打开定位服务 */ -(void)startLocation { [_locServicestartUserLocationService]; } #pragma关闭定位服务 /** *关闭定位服务 */ -(void)stopLocation { [_locServicestopUserLocationService]; } #pragmaBMKLocationServiceDelegate /** *用户位置更新后,会调用此函数 *@paramuserLocation新的用户位置 */ -(void)didUpdateUserLocation:(BMKUserLocation*)userLocation { cllocation=userLocation.location; _clloction=cllocation; _userLatitude=cllocation.coordinate.latitude; _userLongitude=cllocation.coordinate.longitude; [selfstopLocation];(如果需要实时定位不用停止定位服务) } /** *在停止定位后,会调用此函数 */ -(void)didStopLocatingUser { ; } /** *定位失败后,会调用此函数 *@paramerror错误号 */ -(void)didFailToLocateUserWithError:(NSError*)error { [selfstopLocation]; }
以上代码就是本文ios百度地图的使用(普通定位、反地理编码),希望对大家今后的工作和学习有所帮助。