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

作者:mrr 时间:2023-07-03 15:26:17 

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,百度地图,地理编码
0
投稿

猜你喜欢

  • 详解java中的PropertyChangeSupport与PropertyChangeListener

    2023-10-20 06:19:27
  • C#编程获取IP地址的方法示例

    2023-06-16 21:18:20
  • Flutter封装组动画混合动画AnimatedGroup示例详解

    2022-12-29 17:17:05
  • CentOS 7下JDK8的详细安装步骤

    2022-02-18 12:06:28
  • Flutter刷新组件RefreshIndicator自定义样式demo

    2023-07-06 15:56:45
  • 一文详解C#中重写(override)及覆盖(new)的区别

    2021-07-17 02:36:32
  • 值得收藏的2017年Java开发岗位面试题

    2023-11-29 15:22:01
  • 你所不知道的Spring自动注入详解

    2021-09-04 19:30:08
  • RocketMQ实现随缘分BUG小功能示例详解

    2023-01-20 04:21:05
  • C#文件下载实例代码(适用于各个浏览器)

    2022-12-28 06:25:48
  • C#之Expression表达式树实例

    2023-02-24 20:54:31
  • Mybatis SQL运行流程源码详解

    2023-04-27 12:46:27
  • 分别用ToolBar和自定义导航栏实现沉浸式状态栏

    2023-03-17 21:08:14
  • SpringBoot应用jar包启动原理详解

    2022-07-08 09:45:48
  • HashMap原理及手写实现部分区块链特征

    2023-10-15 03:27:27
  • spring-cloud-gateway动态路由的实现方法

    2021-07-25 15:24:37
  • c#学习之30分钟学会XAML

    2022-02-08 03:09:52
  • C#/VB.NET实现创建PDF/UA文件的示例代码

    2023-05-02 23:31:51
  • 面试Spring中的bean线程是否安全及原因

    2021-06-11 18:25:38
  • Java并发编程之LockSupport类详解

    2022-08-21 10:38:36
  • asp之家 软件编程 m.aspxhome.com