上面已经给大家讲解了简单百度地图API的方法,下面为大家介绍进行定位和模拟器模拟位置定位
首先需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
建议添加NSLocationAlwaysUsageDescription
在.h文件中添加代理BMKLocationServiceDelegate
然后在.m文件中配置它的初始化方法,需要注意的是跟百度地图一样,在离开控制器的时候一定要取消代理,因为定位也是比较消耗的
_locService.delegate = nil; //定位指向空
然后我们初始化定位
- (BMKLocationService *)locService{
if (_locService == nil){
//初始化BMKLocationService
_locService = [[BMKLocationService alloc]init];
//设定定位精度
_locService.desiredAccuracy = kCLLocationAccuracyBest;
//开启定位服务
[_locService startUserLocationService];
_mapView.showsUserLocation = NO;//先关闭显示的定位图层
_mapView.userTrackingMode = BMKUserTrackingModeNone;//设置定位的状态 (普通模式)
_mapView.showsUserLocation = YES;//显示定位图层
}
return _locService;
}
最终还有定位的代理方法,我们这里需要用来判断方向更新和位置更新
#pragma mark - -----------方向更新后调用的方法
//实现相关delegate 处理位置信息更新
//处理方向变更信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
//刷新我在地图上面的位置
[_mapView updateLocationData:userLocation];
}
#pragma mark - 位置更新之后调用方法
//位置坐标更新后刷新我在地图上面的位置
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
//刷新我在地图上的位置
[_mapView updateLocationData:userLocation];
}
但是这样掉出来之后,你会发现你的位置竟然还是在北京市啊,不要着急我们接下来需要配置一下
首先我们要调用反地理编码
在定位的代理方法里面的位置更新之后调用的方法里面调用
#pragma mark - 位置更新之后调用方法
//位置坐标更新后刷新我在地图上面的位置
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
//刷新我在地图上的位置
[_mapView updateLocationData:userLocation];
if (_isOPEN==NO) //我定义的一个全局变量,用来控制反地理编码次数的
{
//反地理编码出地理位置
CLLocationCoordinate2D pt=(CLLocationCoordinate2D){0,0};
pt=(CLLocationCoordinate2D){userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude};
BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
reverseGeocodeSearchOption.reverseGeoPoint = pt;
BMKGeoCodeSearch *_geocodesearch = [[BMKGeoCodeSearch alloc]init];
_geocodesearch.delegate = self;
BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
if(flag)
{
NSLog(@"反geo检索发送成功");
_isOPEN = YES; //如果发送反地理编码成功,就只是发送一次,获取一次,通过bool值isOPEN关闭反地理编码
}
else
{
NSLog(@"反geo检索发送失败");
}
}
}
百度地图的反地理编码,这是一个神奇的东西!
首先我们需要在.h中添加百度地图地理编码的代理
BMKGeoCodeSearchDelegate
然后我们在.m文件中调用代理的方法
#pragma mark - 反地理编码代理方法 输入坐标 返回地点名称
/*
通过反地理编码可以根据左边的到所在位置的信息
*/
- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
NSLog(@"result.address = %@",result.address); //定位所在地址
NSLog(@"result.detail.address.city = %@",result.addressDetail.city); //定位所在城市
NSLog(@"result.businessCircle = %@",result.businessCircle); //用户所在商圈(发布动态)
NSLog(@"result.addressDetail.district = %@",result.addressDetail.district); //用户所在区
//让地图的位置处于搜索处的位置
_mapView.centerCoordinate = result.location;
}
这样我们的定位还不算是完整,我们需要模拟器,模拟出一个位置
因为我是在上海,所以我输入了一个上海的经纬度坐标
不过有一点不太好,就是我这边因为有需求,所以在位置改变的时候获取了自己的位置,所以会一直反地理编码,不过我添加了一个判断,你们可以定义一个bool值来判断开启关闭反地理
最终的运行结果图如下
本人长期混迹于这两个群里面吹牛逼,如果有同样爱好的人可以加群
341545727
98787555