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

HostWebis:美国/法国便宜服务器,100Mbps不限流量,高配置大硬盘,$44/月起

hostwebis怎么样?hostwebis昨天在webhosting发布了几款美国高配置大硬盘机器,但报价需要联系客服。看了下该商家的其它产品,发现几款美国服务器、法国服务器还比较实惠,100Mbps不限流量,高配置大硬盘,$44/月起,有兴趣的可以关注一下。HostWebis是一家国外主机品牌,官网宣称1998年就成立了,根据目标市场的不同,以不同品牌名称提供网络托管服务。2003年,通过与W...

CheapWindowsVPS$4.5/月,美国VPS/免费Windows系统/1Gbps不限流量/,可选美洲、欧洲、亚洲等8大机房

国外商家提供Windows系统的并不常见,CheapWindowsVPS 此次提供的 2 款 VPS 促销套餐,提供 5 折永久优惠码,优惠后月付 4.5 美元起,价格还是挺诱人的,VPS 不限流量,接入 1Gbps 带宽,8 个机房皆可选,其中洛杉矶机房还提供亚洲优化网络供选择,操作系统有 Windows 10 专业版、2012 R2、2016、Linux等。Cheap Windows VPS是...

腾讯云CVM云服务器大硬盘方案400GB和800GB数据盘方案

最近看到群里的不少网友在搭建大数据内容网站,内容量有百万篇幅,包括图片可能有超过50GB,如果一台服务器有需要多个站点的话,那肯定默认的服务器50GB存储空间是不够用的。如果单独在购买数据盘会成本提高不少。这里我们看到腾讯云促销活动中有2款带大数据盘的套餐还是比较实惠的,一台是400GB数据盘,一台是800GB数据盘,适合他们的大数据网站。 直达链接 - 腾讯云 大数据盘套餐服务器这里我们看到当前...

反百度为你推荐
集成显卡和独立显卡哪个好集成显卡和独立显卡是什么区别呢哪个好?腾讯空间登录腾讯qq空间进入登陆个人QQ空间qq网盘在哪里QQ网盘在哪里电信dns服务器地址电信光纤的dns地址怎么设置上海dns服务器地址中国主要城市DNS服务器IP地址列表360云盘360云盘和百度云盘哪个更好360云网盘下载360云盘与百度云盘的对比360云盘同步版网络正常的。 提示360云盘同步版同步失败 ,文件被占用中,无法更新是什么原因360云盘同步版360云盘 单向同步 与 双向同步 的区别?360云盘怎么用360云盘怎么运用和有什么用法
域名是什么 域名升级访问 域名查询软件 怎么申请域名 阿里云搜索 美国主机评测 liquidweb 堪萨斯服务器 isatap win8升级win10正式版 免费个人网站申请 台湾谷歌网址 京东商城双十一活动 静态空间 服务器托管什么意思 上海服务器 双12 登陆空间 架设邮件服务器 贵阳电信 更多