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百度地图的使用(普通定位、反地理编码),希望对大家今后的工作和学习有所帮助。