1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > ios 百度地图指定区域_ios百度地图的使用(普通定位 反地理编码)

ios 百度地图指定区域_ios百度地图的使用(普通定位 反地理编码)

时间:2021-09-26 13:43:44

相关推荐

ios 百度地图指定区域_ios百度地图的使用(普通定位 反地理编码)

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

#import 使用到的头文件 要引入CoreLocation这个包

使用的代理名称

//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

#import "BMapKit.h"

@interface UserLocationManager : NSObject

{

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百度地图的使用(普通定位、反地理编码),希望对大家今后的工作和学习有所帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。