ios百度地图的使用(普通定位、反地理编码)

 更新时间:2015年08月10日 11:18:49   投稿:mrr  
iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置)使用代码如何实现呢,下面小编就给大家详解ios百度地图的使用(普通定位、反地理编码,有需要的朋友可以参考下

iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下:

#import <CoreLocation/CoreLocation.h> 使用到的头文件 要引入CoreLocation这个包
<CLLocationManagerDelegate>    使用的代理名称
//1.使用定位服务
 //设置app有访问定位服务的权限
 //在使用应用期间 / 始终(app在后台)
 //info.plist文件添加以下两条(或者其中一条):
 //NSLocationWhenInUseUsageDescription 在使用应用期间
 //NSLocationAlwaysUsageDescription 始终
 //2.LocationManager 对象管理相关的定位服务
 _manager = [[CLLocationManager alloc] init];
 //manager判断: 手机是否开启定位 / app是否有访问定位的权限
 //[CLLocationManager locationServicesEnabled]; //手机是否开启定位
 //[CLLocationManager authorizationStatus]; //app访问定位的权限的状态
 if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
  [_manager requestWhenInUseAuthorization]; //向用户请求访问定位服务的权限
 }
 _manager.delegate = self;
 _manager.desiredAccuracy = kCLLocationAccuracyBest;
 _manager.distanceFilter = 1.0f;
 [_manager startUpdatingLocation];
//定位代理经纬度回调
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
 [_manager stopUpdatingLocation];
 CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
 [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
  for (CLPlacemark * placemark in placemarks) {
   NSDictionary *test = [placemark addressDictionary];
   // Country(国家) State(城市) SubLocality(区) Name全称
   NSLog(@"%@", [test objectForKey:@"Name"]);
  }
 }];
}

ios百度地图的使用(普通定位、反地理编码)

1.首先接受基本的地图功能

新建一个地图类,xib拖也行,我这边是代码实现的。

 

_mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.height)];//添加mapVIew
 [self.view addSubview:_mapView];
#pragma mark - 设置mapView属性
-(void)setMapViewProperty
{
 _mapView.mapType = BMKUserTrackingModeFollowWithHeading;
 _mapView.showsUserLocation = YES; //是否显示定位图层(即我的位置的小圆点)
 _mapView.zoomLevel = 16;//地图显示比例
 _mapView.rotateEnabled = NO; //设置是否可以旋转
  
 [self passLocationValue];
}
#pragma mark -传入定位坐标 
//设置定位到得用户的位置,这里是简单的应用方法(必须打开程序时已经获取到地理位置坐标,为了解决地图定位时总是先显示天安门)
-(void)passLocationValue
{
 BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake([UserLocationManager sharedInstance].clloction.coordinate, BMKCoordinateSpanMake(0.02f,0.02f));
 BMKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion];
 [_mapView setRegion:adjustedRegion animated:YES];
  
}
#pragma mark -设置定位圆点属性
-(void)setUserImage
{
 //用户位置类
 BMKLocationViewDisplayParam* param = [[BMKLocationViewDisplayParam alloc] init];
 param.locationViewOffsetY = 0;//偏移量
 param.locationViewOffsetX = 0;
 param.isAccuracyCircleShow =NO;//设置是否显示定位的那个精度圈
 param.isRotateAngleValid = NO;
 [_mapView updateLocationViewWithParam:param];
}

这样基本的地图界面就出来了

如果你需要在地图上做一些请求,可以实现BMKMapViewDelegate,以下是mapView的一些协议方法

**
 *地图区域即将改变时会调用此接口
 *@param mapview 地图View
 *@param animated 是否动画
 */
- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
 //TODO
}
 
/**
 *地图区域改变完成后会调用此接口
 *@param mapview 地图View
 *@param animated 是否动画
 */
- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
 //TODO
}
/**
 *地图状态改变完成后会调用此接口
 *@param mapview 地图View
 */
- (void)mapStatusDidChanged:(BMKMapView *)mapView
{
 //TODO
}

2.地图定位

我这边是将定位封装了一个独立的manager类来管理定位和地图上滑动到的位置,是将定位功能和地图mapVIew独立开来,管理地理移动位置的变化

#import <Foundation/Foundation.h>
#import "BMapKit.h"
@interface UserLocationManager : NSObject <BMKMapViewDelegate,BMKLocationServiceDelegate>
{
 CLLocation *cllocation;
 BMKReverseGeoCodeOption *reverseGeoCodeOption;//逆地理编码
}
@property (strong,nonatomic) BMKLocationService *locService;
//城市名
@property (strong,nonatomic) NSString *cityName;
//用户纬度
@property (nonatomic,assign) double userLatitude;
//用户经度
@property (nonatomic,assign) double userLongitude;
//用户位置
@property (strong,nonatomic) CLLocation *clloction;
//初始化单例
+ (UserLocationManager *)sharedInstance;
//初始化百度地图用户位置管理类
- (void)initBMKUserLocation;
//开始定位
-(void)startLocation;
//停止定位
-(void)stopLocation;
@end
#import "UserLocationManager.h"
@implementation UserLocationManager
+ (UserLocationManager *)sharedInstance
{
 static UserLocationManager *_instance = nil;
 @synchronized (self) {
  if (_instance == nil) {
   _instance = [[self alloc] init];
  }
 }
 return _instance;
}
-(id)init
{
 if (self == [super init])
 {
  [self initBMKUserLocation];
 }
 return self;
}
#pragma 初始化百度地图用户位置管理类
/**
 * 初始化百度地图用户位置管理类
 */
- (void)initBMKUserLocation
{
 _locService = [[BMKLocationService alloc]init];
 _locService.delegate = self;
 [self startLocation];
}
#pragma 打开定位服务
/**
 * 打开定位服务
 */
-(void)startLocation
{
 [_locService startUserLocationService];
}
#pragma 关闭定位服务
/**
 * 关闭定位服务
 */
-(void)stopLocation
{
 [_locService stopUserLocationService];
}
#pragma BMKLocationServiceDelegate
/**
 *用户位置更新后,会调用此函数
 *@param userLocation 新的用户位置
 */
- (void)didUpdateUserLocation:(BMKUserLocation *)userLocation
{
  cllocation = userLocation.location;
 _clloction = cllocation;
 _userLatitude = cllocation.coordinate.latitude;
 _userLongitude = cllocation.coordinate.longitude;
 [self stopLocation];(如果需要实时定位不用停止定位服务)
}
/**
 *在停止定位后,会调用此函数
 */
- (void)didStopLocatingUser
{
;
}
/**
 *定位失败后,会调用此函数
 *@param error 错误号
 */
- (void)didFailToLocateUserWithError:(NSError *)error
{
 [self stopLocation];
}

以上代码就是本文ios百度地图的使用(普通定位、反地理编码),希望对大家今后的工作和学习有所帮助。

相关文章

  • iOS工程中怎么判断下载的流是PDF文件

    iOS工程中怎么判断下载的流是PDF文件

    iOS工程中怎么判断下载的流是PDF文件?下面小编就为大家分享一篇iOS工程中判断下载的流是PDF文件的方法。希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 使用iOS控件UICollectionView生成可拖动的桌面的实例

    使用iOS控件UICollectionView生成可拖动的桌面的实例

    本篇文章主要介绍了使用iOS控件UICollectionView生成可拖动的桌面,具有一定的参考价值,有需要的可以了解一下。
    2016-12-12
  • iOS常用组件之高效切圆角的方法汇总

    iOS常用组件之高效切圆角的方法汇总

    最近在研究切圆角的方法,也找了下网上的资料,所以下面这篇文章主要给大家总结介绍了关于iOS常用组件之高效切圆角的一些方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-01-01
  • UILabel显示定时器文本跳动问题的解决方法

    UILabel显示定时器文本跳动问题的解决方法

    这篇文章主要给大家介绍了关于UILabel显示定时器文本跳动问题的解决方法,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • iOS监控笔记之启动crash

    iOS监控笔记之启动crash

    iOS崩溃是让iOS开发人员比较头痛的事情,app崩溃了,说明代码写的有问题,下面这篇文章主要给大家介绍了关于iOS监控笔记之启动crash的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • iOS NSTimer循环引用的几种解决办法

    iOS NSTimer循环引用的几种解决办法

    本篇文章主要介绍了iOS NSTimer循环引用的几种解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • IOS 基础之设置 tableview 的分割线

    IOS 基础之设置 tableview 的分割线

    这篇文章主要介绍了IOS 基础之设置 tableview 的分割线的相关资料,需要的朋友可以参考下
    2017-03-03
  • 详解使用jquery.i18n.properties 实现web前端国际化

    详解使用jquery.i18n.properties 实现web前端国际化

    本篇文章主要介绍了使用jquery.i18n.properties 实现web前端国际化,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • iOS开发之获取LaunchImage启动图的实例

    iOS开发之获取LaunchImage启动图的实例

    下面小编就为大家分享一篇iOS开发之获取LaunchImage启动图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • iOS 底部按钮和应用图标显示未读消息(带数字)

    iOS 底部按钮和应用图标显示未读消息(带数字)

    本文主要介绍了iOS 底部按钮和应用图标显示未读消息的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04

最新评论