定位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

PhotonVPS:美国Linux VPS半价促销2.5美元/月起,可选美国洛杉矶/达拉斯/芝加哥/阿什本等四机房

photonvps怎么样?photonvps现在针对旗下美国vps推出半价促销优惠活动,2.5美元/月起,免费10Gbps DDoS防御,Linux系统,机房可选美国洛杉矶、达拉斯、芝加哥、阿什本。以前觉得老牌商家PhotonVPS贵的朋友可以先入手一个月PhotonVPS美国Linux VPS试试了。PhotonVPS允许合法大人内容,支持支付宝、paypal和信用卡,30天退款保证。Photo...

随风云-内蒙古三线BGP 2-2 5M 25/月 ,香港CN2 25/月 ,美国CERA 25/月 所有云服务器均支持5天无理由退款

公司成立于2021年,专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、三线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新”的价值观,坚持”以微笑收获友善, 以尊重收获理解,以责任收获支持,以谦卑收获成长”的行为观向客户提供全面优质的互...

优林70/月,西南高防地区最低70/月

优林怎么样?优林好不好?优林 是一家国人VPS主机商,成立于2016年,主营国内外服务器产品。云服务器基于hyper-v和kvm虚拟架构,国内速度还不错。今天优林给我们带来促销的是国内西南地区高防云服务器!全部是独享带宽!续费同价!官方网站:https://www.idc857.com​地区CPU内存硬盘流量带宽防御价格购买地址德阳高防4核4g50G无限流量10M100G70元/月点击购买德阳高防...

反百度为你推荐
马云将从软银董事会辞职马云离职??什么原因?????天玑1000plus和骁龙865哪个好CPU型号 MediaTek MT6853 5G,和天玑1000+哪个好?p图软件哪个好用什么P图软件好用?ps软件哪个好怎么ps啊,哪个软件好苹果手机助手哪个好苹果手机助手哪个好加速器哪个好加速器哪个好用?51空间登录怎样登51个人空间网页qq空间登录为什么我用网页登录QQ空间时,没有登录界面,直接进去一个QQ空间,请问是怎么回事?yy空间登录怎么登陆YY空间辽宁联通网上营业厅网中国联通的初始服务密码一般是多少
云南服务器租用 工信部域名备案 新秒杀 awardspace ix主机 便宜建站 美国便宜货网站 godaddy域名优惠码 patcha 傲盾官网 cloudlink 1元域名 shuang12 电信宽带测速软件 测试网速命令 重庆服务器 512内存 美国主机 卡巴斯基免费下载 iptables 更多