定位iOS百度地图反编码个人见解

反百度  时间:2021-01-31  阅读:()

iOS百度地图反编码个人见解

类似于微信中的发送位置拖拽从新定位以及反编码列表附近的位置。

百度地图拖拽更新位置.gif

思路就是将一个UIImageView 固定在地图中间每次更新位置给UIImageView添加劢画即可。

代码如下

#import "FTBasicControl ler.h"typedef void (^SelectBlock) (NSString *address,CLLocationCoordinate2D select);@interface FTUploadAddressControl ler : FTBasicControl ler

@property(nonatomic, copy)SelectBlock selectBlock;

@end

#import "FTUploadAddressControl ler.h"

#import "FTBMKPoiInfo.h"

#import "FTPoiCel l.h"

@interface FTUploadAddressControl ler

()<BMKMapViewDelegate,BMKLocationServiceDelegate,UITableViewDelegate,UITableViewDataSource,BMKGeoCodeSearchDelegate>

@property(nonatomic,strong)BMKLocationService *locService;

@property(nonatomic,strong)BMKUserLocation *userLocation;

@property(nonatomic,strong)BMKMapView*mapView;

@property(nonatomic,strong)UITableView*tableview;

@property(nonatomic,strong)BMKGeoCodeSearch *geocodesearch;

@property(nonatomic,strong)UIImageView*loactionView;

@property(nonatomic,strong)NSMutableArray*dataA;

@property(nonatomic,strong)LxButton *poiBackBtn;

@property(nonatomic,assign)CLLocationCoordinate2D selectedCoordinate;

@property(nonatomic,strong)NSString *selectAddress;

@end

@implementation FTUploadAddressControl ler

-(void)viewWi l lAppear:(BOOL)animated{

[superviewWi l lAppear:animated];self.fd_interactivePopDisabled =YES;if (!([CLLocationManager authorizationStatus] ==kCLAuthorizationStatusAuthorizedAlways | | [CLLocationManager authorizationStatus] ==

kCLAuthorizationStatusAuthorizedWhenInUse)&&[CLLocationManagerauthorizationStatus] != kCLAuthorizationStatusNotDetermined){

[self judgeOpenlocation] ;

}else{

[_mapView viewWi l lAppear] ;

_mapView.delegate = self; //此处记得丌用的时候需要置ni l 否则影响内存的释放

_locService.delegate = self;

_geocodesearch.delegate= self;//此处记得丌用的时候需要置ni l 否则影响内存的释放

_mapView.showsUserLocation= NO;//先关闭显示的定位图层

_mapView.userTrackingMode = 0;

_mapView.showsUserLocation=YES;//显示定位图层

[self. locService startUserLocationService] ;

}

}

-(void)judgeOpenlocation{

UIAlertControl ler *alertVC= [UIAlertControl ler alertControl lerWithTitle:@"打开[定位服务]来允许[应用名字]确定您的位置"message:@"请在系统设置中开启定位服务(设置>隐私>定位服务>应用名字>始终) "preferredStyle:UIAlertControl lerStyleAlert];

[alertVC addAction:[UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancel handler:ni l] ];

[alertVC addAction:[UIAlertActionactionWithTitle:@"去设置"style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnul l action) {if ([ [[UIDevice currentDevice] systemVersion] floatValue] >= 10.000000) {

//跳转到定位权限页面

NSURL *url = [NSURL URLWithString:UIAppl icationOpenSettingsURLString];if( [[UIAppl ication sharedAppl ication]canOpenURL:url] ) {

[[UIAppl ication sharedAppl ication]openURL:url] ;

}

}else{

//跳转到定位开关界面

NSURL *url = [NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];if( [[UIAppl ication sharedAppl ication]canOpenURL:url] ) {

[[UIAppl ication sharedAppl ication]openURL:url] ;

}

}

}] ];

[self presentViewControl ler:alertVC animated:YES completion:ni l];

}

-(void)viewWi l lDisappear:(BOOL)animated

{self.fd_interactivePopDisabled = NO;

[_mapViewviewWi l lDisappear];

_mapView.delegate = ni l; //丌用时置ni l

[self. locService stopUserLocationService];

_geocodesearch.delegate = ni l ;//丌用时置ni l

_locService.delegate = ni l;

}

- (void)viewDid Load{

[superviewDidLoad];

//Doanyadditional setup after loading the view.self.title =@"所在位置";self. locService = [[BMKLocationService al loc] init] ;self.geocodesearch= [ [BMKGeoCodeSearchal loc] init];

[self setup];self.navigationItem. leftBarButtonItem=[[UIBarButtonItemal loc] initWithImage:[ [UIImageimageNamed:@"return"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(backReturn)];}

-(void)backReturn{if (self.selectBlock) {self.selectBlock(self.selectAddress, self.selectedCoordinate);

[self.navigationControl ler popViewControl lerAnimated:YES];

}

}

-(void)setup{

[self.viewaddSubview:self.mapView] ;

[self.viewaddSubview:self.tableview];

[self.mapViewaddSubview:self. loactionView];

[self.mapViewaddSubview:self.poiBackBtn] ;

[self.poiBackBtn LX_SetShadowPathWith:[UIColorgrayColor] shadowOpacity:0.5shadowRadius:5 shadowSide:LXShadowPathBottom shadowPathWidth:3];

FTWS(weakSelf);

[self.poiBackBtnaddCl ickBlock:^(UIButton *button) {

[weakSelf.mapViewsetCenterCoordinate:weakSelf.userLocation. location.coordinate];

}] ;

}

- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation

{

// NSLog(@"didUpdateUserLocationlat%f, long%f",userLocation. location.coordinate. latitude,userLocation. location.coordinate. longitude);

[_mapView updateLocationData:userLocation];self.userLocation = userLocation;

[self.mapViewsetCenterCoordinate:userLocation. location.coordinate];

BMKReverseGeoCodeOption *option = [ [BMKReverseGeoCodeOption al loc] init] ;option.reverseGeoPoint= userLocation. location.coordinate;

BOOLflag = [_geocodesearch reverseGeoCode:option];if (flag) {

}

//更新位置之后必须停止定位

[_locService stopUserLocationService];

}

-(void)mapView:(BMKMapView*)mapViewregionDidChangeAnimated:(BOOL)animated{

NSLog(@"地图拖劢");

[UIViewanimateWithDuration:0.30animations:^{self. loactionView.centerY-=8;

} completion:^(BOOL finished) {self. loactionView.centerY+=8;

}] ;

CGPoint touchPoint = self.mapView.center;

CLLocationCoordinate2D touchMapCoordinate =

[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];//这里touchMapCoordinate就是该点的经纬度了

NSLog(@"touching%f,%f",touchMapCoordinate. latitude,touchMapCoordinate. longitude);

//选择的上传地址self.selectedCoordinate = touchMapCoordinate;

BMKReverseGeoCodeOption *option = [ [BMKReverseGeoCodeOption al loc] init] ;option.reverseGeoPoint= touchMapCoordinate;

BOOLflag = [_geocodesearch reverseGeoCode:option];if (flag) {

}

}

#pragma mark---获取反编码的数据---

-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcherresult:(BMKReverseGeoCodeResult *)resulterrorCode:(BMKSearchErrorCode)error{

BMKAddressComponent *component=[ [BMKAddressComponental loc]init] ;component=result.addressDetai l;

[self.dataA removeAl lObjects];for (int i =0; i< result.poiList.count; i++) {

BMKPoiInfo*info = result.poiList[i];

FTBMKPoiInfo*ftInfo=[[FTBMKPoiInfo al loc]init];ftInfo.address = info.address;ftInfo.seleced =NO;

if (i == 0) {ftInfo.seleced =YES;self.selectAddress = ftInfo.address;

}

[self.dataA addObject:ftInfo] ;

}

[self.tableview reloadData];

}

#pragma mark---定位的方法--

- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation

{

[_mapView updateLocationData:userLocation];

// NSLog(@"heading is%@",userLocation.heading);

}

-(BMKMapView*)mapView{if (!_mapView) {

_mapView=[ [BMKMapViewal loc] initWithFrame:CGRectMake(0,NAVH,Device_Width, 350)] ;

_mapView.zoomLevel = 18;

_mapView.minZoomLevel = 3;

_mapView.maxZoomLevel = 21;

// BMKLocationViewDisplayParam*displayParam=

[ [BMKLocationViewDisplayParam al loc] init] ;

// displayParam. isRotateAngleVal id = true;//跟随态旋转角度是否生效// displayParam. isAccuracyCircleShow= false;//精度圈是否显示// displayParam. locationViewOffsetX= 0;//定位偏移量(经度)

// displayParam. locationViewOffsetY= 0;//定位偏移量纬度

// [_mapView updateLocationViewWithParam:displayParam];

}return_mapView;

}

-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{returnself.dataA.count;

}

-(UITableViewCel l *)tableView:(UITableView*)tableViewcel lForRowAtIndexPath:(NSIndexPath *)indexPath{

FTPoiCel l *cel l =[tableViewdequeueReusableCel lWithIdentifier:@"cel l "forIndexPath: indexPath];if (!cel l) {cel l =[ [FTPoiCel l al loc] initWithStyle:UITableViewCel lStyleDefaultreuseIdentifier:@"cel l "];

}

FTBMKPoiInfo*info = self.dataA[indexPath.row] ;cel l. info= info;returncel l ;

}

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath

*)indexPath{

[tableView deselectRowAtIndexPath: indexPath animated:YES] ;

FTBMKPoiInfo*info = self.dataA[indexPath.row] ;self.selectAddress = info.address;

[self.dataAenumerateObjectsUsingBlock:^(FTBMKPoiInfo*obj,NSUInteger idx,BOOL *_Nonnul l stop) {i f (o bj == info) {obj.seleced =YES;

}else{obj.seleced =NO;

}

[self.tableviewreloadData] ;

}] ;if (self.selectBlock) {self.selectBlock(self.selectAddress,self.selectedCoordinate);

[self.navigationControl ler popViewControl lerAnimated:YES];

}

}

-(UITableView*)tableview{if (!_tableview) {

_tableview=[ [UITableViewal loc]initWithFrame:CGRectMake(0,self.mapView.bottom,Device_Width,Device_Height - self.mapView.bottom)style:UITableViewStylePlain];

_tableview.delegate = self;

_tableview.dataSource = self;

_tableview.showsVerticalScrol lIndicator= NO;

_tableview.showsHorizontalScrol lIndicator= NO;

_tableview.tableFooterView= [UIView new];

_tableview.rowHeight= 44;

[_tableview registerNib: [UINib nibWithNibName:@"FTPoiCel l "bundle:ni l]forCel lReuseIdentifier:@"cel l "] ;

// [_tableview registerClass:[UITableViewCel l class] forCel lReuseIdentifier:@"cel l "];}return_tableview;

}

-(NSMutableArray*)dataA{i f (!_d a ta A) {

_dataA=[NSMutableArrayarray];

}return_dataA;

}

-(UIImageView*)loactionView{if (!_loactionView) {

_loactionView=[[UIImageViewal loc] initWithImage: [UIImageimageNamed:@"ditu_red"]] ;

_loactionView.center = CGPointMake(self.mapView.width/2,self.mapView.height/2);

}return_loactionView;

}

-(LxButton *)poiBackBtn{if (!_poiBackBtn) {

_poiBackBtn =[LxButton LXButtonWithTitle:ni l titleFont:ni l Image:ni lbackgroundImage:ni l backgroundColor:[UIColorwhiteColor] titleColor:ni lframe:CGRectMake(Device_Width - 75, self.mapView.height - 75, 50, 50)];

[_poiBackBtn setFTCornerdious:25] ;

UIImageView*imageView=[[UIImageViewal loc] initWithImage:[UIImageimageNamed:@"poi_back"] ];imageView.center = CGPointMake(25,25);

[_poiBackBtnaddSubview: imageView] ;

}return_poiBackBtn;

}

@end

UCloud:全球大促降价,云服务器全网最低价,1核1G快杰云服务器47元/年

ucloud:全球大促活动降价了!这次云服务器全网最低价,也算是让利用户了,UCloud商家调低了之前的促销活动价格,并且新增了1核1G内存配置快杰型云服务器,价格是47元/年(也可选2元首月),这是全网同配置最便宜的云服务器了!UCloud全球大促活动促销机型有快杰型云服务器和通用型云服务器,促销机房国内海外都有,覆盖全球20个城市,具体有北京、上海、广州、香港、 台北、日本东京、越南胡志明市、...

Central美国65折优惠,美国达拉斯机房VPS季付赠送双倍内存

Central美国独立日活动正在进行中,旗下美国达拉斯机房VPS 65折优惠,季付赠送双倍内存(需要发工单),Central租用的Hivelocity的机房,只支持信用卡和加密货币付款,不支持paypal,需要美国独服的可以谨慎入手试试。Central怎么样?Central便宜服务器,Central自称成立于2019年,主营美国达拉斯机房Linux vps、Windows vps、专用服务器和托管...

无忧云:洛阳/大连BGP云服务器38.4元/月,雅安物理机服务器315元/月起,香港荃湾CN2限时5折优惠

无忧云怎么样?无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点,目前商家开启了夏日清凉补贴活动,商家的机器还是非常...

反百度为你推荐
ddr2内存价格DDR2比DDR先进,可是价钱怎么还是DDR2便宜骁龙750g和765g哪个好麒麟970跟骁龙730哪个更好麒麟990和骁龙865哪个好目前高通哪款处理器可以与麒麟990匹敌?浏览器哪个好用浏览器哪个好电视直播软件哪个好电视直播软件哪个好手机杀毒软件哪个好手机用什么杀毒软件好苹果手机助手哪个好苹果手机助手哪个好用些谁知道电陶炉和电磁炉哪个好电磁炉跟电陶炉哪个好车险哪个好人保和平安车险哪个好oppo和vivo哪个好vivo和oppo建议买哪个
虚拟主机管理软件 域名网站 .cn域名注册 域名备案批量查询 net主机 赵容 bandwagonhost 名片模板psd lighttpd eq2 qingyun 大容量存储器 广州服务器 美国在线代理服务器 河南移动m值兑换 常州联通宽带 便宜空间 东莞主机托管 防cc攻击 华为k3 更多