ios百度地图的使用(普通定位、反地理编码)
作者:mrr 发布时间:2023-07-03 15:26:17
标签: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百度地图的使用(普通定位、反地理编码),希望对大家今后的工作和学习有所帮助。


猜你喜欢
- 更新了AS 3.1.2之后,发现新建Kotlin类,类注释依然木有,没办法只有自己动手了。方法很简单,编辑File Header就可以啦。只
- 1. 在原有工程目录右键-> new ->Module->:2. 选择library:3. 一路next,最后finish
- feign传输List的坑无法直接传输List错误方法1@RequestMapping(value = "/stat/mercha
- 需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的I
- 本文实例为大家分享了iOS新浪微博分享功能的具体代码,供大家参考,具体内容如下做新浪分享 需先去http://open.weibo.com/
- 前言为什么用动静态库我们在实际开发中,经常要使用别人已经实现好的功能,这是为了开发效率和鲁棒性(健壮性);因为那些功能都是顶尖的工程师已经写
- 一、写在前面数据结构中的队列应该是比较熟悉的了,就是先进先出,因为有序故得名队列,就如同排队嘛,在对尾插入新的节点,在对首删除节点.jdk集
- 因为mybatis好使,所以几乎需要操作数据库的时候,我都会使用mybatis,而且在一个正式的项目中,同时存在BS和CS的程序,都使用的M
- 前言本文将带您了解在 Flutter 中制作翻转卡片动画的两个完整示例。第一个示例从头开始实现,第二个示例使用第三方包。闲话少说,让我们动手
- UI 妹纸又给了个图叫我做,我一看是这样的:我们首先把这个控件划分成 几个部分:1.底下部分的直线 :2.左右两边的半圆
- 使用AS创建ADIL文件时AS会在main文件夹下给我们生成一个aidl文件夹和一个相同包名的包,通常我们会把所有和ADIL相关的类或文件放
- 本文实例讲述了C++语言实现线性表之链表实现方法。分享给大家供大家参考。具体分析如下:插入、删除结点的代码有点多,但这样提高了代码的可读性,
- 相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线void fitLine( InputArray points, Output
- 项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传
- 前言开发中,免不了会用到多边形、多角星等图案,比较常用的多边形比如雷达图、多角星比如评价星级的五角星等,本篇文章就使用Flutter绘制封装
- 在谈 JVM 内存区域划分之前,我们先来看一下 Java 程序的具体执行过程,我画了一幅图。Java 源代码文件经过编译器编译后生成字节码文
- 一、导航栏UINavigationBar1、导航栏的使用在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigati
- 讲这个例子前,咱们先来看一个简单的程序:字符串数组实现数字转字母:#include <stdio.h>#include <
- 本文主要介绍我为桌面和 Web 设计的一个超级秘密 Flutter 项目使用了画布和可拖动节点界面。本教程将展示我如何使用堆栈来使用小部件完
- 各位亲们可以尝试以下代码:注:这里我就只有一个html标签对来说明问题了,首部之类的东西,自己添加。<html> &n