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 静态库和Framework区别

    IOS 静态库和Framework区别

    这篇文章主要介绍了IOS 静态库和Framework区别的相关资料,这里对动态库与静态库做比较,选择什么时候使用库文件,需要的朋友可以参考下
    2016-12-12
  • iOS WKWebview 白屏检测实现的示例

    iOS WKWebview 白屏检测实现的示例

    这篇文章主要介绍了iOS WKWebview 白屏检测实现的示例,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下
    2020-10-10
  • iOS自定义转场动画的几种情况

    iOS自定义转场动画的几种情况

    这篇文章主要给大家介绍了关于iOS自定义转场动画的几种情况,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • iOS设计模式——Category简单介绍

    iOS设计模式——Category简单介绍

    这篇文章主要介绍了iOS设计模式——Category简单介绍,有兴趣学习的同学可以了解一下。
    2016-11-11
  • 实例讲解iOS中的UIPageViewController翻页视图控制器

    实例讲解iOS中的UIPageViewController翻页视图控制器

    UIPageViewController更像是一个视图容器,将每页不同的ViewController整合,这里我们将以实例讲解iOS中的UIPageViewController翻页视图控制器:
    2016-06-06
  • iOS实现卡片堆叠效果

    iOS实现卡片堆叠效果

    这篇文章主要为大家详细介绍了iOS实现卡片堆叠效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 30分钟快速带你理解iOS中的谓词NSPredicate

    30分钟快速带你理解iOS中的谓词NSPredicate

    NSPredicate类是用来定义逻辑条件约束的获取或内存中的过滤搜索。下面这篇文章将通过30分钟快速带大家理解iOS中的谓词NSPredicate类,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • 如何在IOS中使用Cordova插件

    如何在IOS中使用Cordova插件

    这篇文章主要介绍了如何在IOS中使用Cordova插件,包括搭建和使用方法,如果对Cordova感兴趣的同学,可以参考下
    2021-04-04
  • iOS 拦截重定向302跳转的方法详解

    iOS 拦截重定向302跳转的方法详解

    这篇文章主要介绍了iOS 拦截重定向302跳转的方法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • iOS开发实现简单计算器功能

    iOS开发实现简单计算器功能

    这篇文章主要为大家详细介绍了iOS开发实现简单计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论