最近项目刚刚忙完,有空整理一下用到的相关技术点。地图是比较常见的功能模块,现在用的比较多的是地图当前位置显示,公交、骑行、步行路线信息,附近热点位置搜索。现在国内用的比较多的是高德、百度,国外的话可以用谷歌、腾讯。路线信息的内容之前博文里面有所提及,本文以高德地图为例,主要介绍一下其他两点。

  1、pod导入相应的地图库,添加引用和协议

      #import <MAMapKit/MAMapKit.h>

#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapLocationKit/AMapLocationKit.h>

#import <AMapSearchKit/AMapSearchKit.h>

      <MAMapViewDelegate,AMapLocationManagerDelegate,AMapSearchDelegate>

  2、定义地图、地图管理变量,热点搜索,经纬度信息变量

  

/**

高德地图

*/

@property (nonatomic,strong) MAMapView *mapView;

/**

定位管理

*/

@property (nonatomic,strong) AMapLocationManager *locService;

/**

用户当前位置

*/

@property (nonatomic,strong) MAPointAnnotation *curAnnotation;

/**

周边检索

*/

@property (nonatomic,strong) AMapSearchAPI *poiSearch;

/**

周边检索条件

*/

@property (nonatomic,strong) AMapPOIAroundSearchRequest *placeAround;

  3、实例化相关变量,并开启定位

  

-(void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

self.mapView.delegate    = self;

self.locService.delegate = self;

self.poiSearch.delegate  = self;

}

-(void)viewWillDisappear:(BOOL)animated{

[super viewWillDisappear:animated];

[self.mapView removeAnnotation:self.curAnnotation];

self.curAnnotation = nil;

self.mapView.delegate    = nil;

self.locService.delegate = nil;

self.poiSearch.delegate  = nil;

}

-(void)viewDidAppear:(BOOL)animated{

[super viewDidAppear:animated];

//    self.locService.delegate = self;

[self.locService startUpdatingLocation];

}

#pragma mark - 懒加载

-(MAMapView *)mapView{

if (!_mapView) {

_mapView = [[MAMapView alloc]initWithFrame:self.mapBackView.bounds];

[_mapView setMapType:MAMapTypeStandard];

_mapView.showsCompass = NO;

[_mapView setZoomLevel:16];

}

return _mapView;

}

-(AMapLocationManager *)locService{

if (!_locService) {

_locService = [[AMapLocationManager alloc] init];

//设置不允许系统暂停定位

[_locService setPausesLocationUpdatesAutomatically:NO];

//设置允许在后台定位

[_locService setAllowsBackgroundLocationUpdates:YES];

//设置允许连续定位逆地理

[_locService setLocatingWithReGeocode:YES];

}

return _locService;

}

-(AMapSearchAPI *)poiSearch{

if (!_poiSearch) {

_poiSearch = [[AMapSearchAPI alloc]init];

}

return _poiSearch;

}

-(AMapPOIAroundSearchRequest *)placeAround{

if (!_placeAround) {

_placeAround = [[AMapPOIAroundSearchRequest alloc]init];

_placeAround.radius = 1500;

_placeAround.offset = 10;

_placeAround.keywords = @"";

_placeAround.sortrule            = 0;

_placeAround.requireExtension    = YES;

_placeAround.types = @"220000|070700|120000|110000|160000|060000|170000|130000|150900|080304|141200";

//,事物,会议,大厦,公寓,广场,银行,商场,学校,停车场,酒吧

}

return _placeAround;

}

-(void)viewDidLoad {

[super viewDidLoad];

[AMapServices sharedServices].enableHTTPS = YES;

[self createSubviews];

}

  4、地图位置解析,设置地图上的当前经纬度信息,然后关闭定位,搜索周边热点位置

  

-(void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode{

if (location) {

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

WS(weakSelf)

[geocoder reverseGeocodeLocation:[[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude] completionHandler:^(NSArray *placemarks, NSError *error){

if (error) {

weakSelf.errorLabel.hidden = NO;

[CCErrorView showErrorWithText:K_CC_LOCAL_STR(@"location.error")];

}else{

if (placemarks.count>0) {

if (weakSelf.curAnnotation) {

[weakSelf.mapView removeAnnotation:weakSelf.curAnnotation];

weakSelf.curAnnotation = nil;

}

weakSelf.errorLabel.hidden = YES;

weakSelf.curAnnotation = [[MAPointAnnotation alloc]init];

weakSelf.curAnnotation.coordinate = location.coordinate;

CLPlacemark *placemark = [placemarks objectAtIndex:0];

NSDictionary *addressDic = placemark.addressDictionary;

NSString *address = [[addressDic objectForKey:@"FormattedAddressLines"] firstObject];

if (K_CC_EMPTY_STR(address)) {

address = @"";

}

if (!K_CC_EMPTY_STR(addressDic[@"Country"])) {

address = [address stringByReplacingOccurrencesOfString:[addressDic objectForKey:@"Country"]  withString:@""];

}

weakSelf.curAnnotation.title = address;

weakSelf.curStreet = [addressDic objectForKey:@"Name"];

weakSelf.curProvince = [addressDic objectForKey:@"State"];

weakSelf.curCity = [addressDic objectForKey:@"City"];

weakSelf.curArea = [addressDic objectForKey:@"SubLocality"];

[weakSelf.datalist removeAllObjects];

CCSignInModel *model = [[CCSignInModel alloc]init];

model.name = [addressDic objectForKey:@"Name"];

model.address = address;

model.location =location.coordinate;

model.curCity = [addressDic objectForKey:@"City"];

model.curArea = [addressDic objectForKey:@"SubLocality"];

model.curStreet = [addressDic objectForKey:@"Name"];

[weakSelf.datalist addObject:model];

weakSelf.curModel = model;

[weakSelf.listTableView reloadData];

}else{

weakSelf.errorLabel.hidden = NO;

[CCErrorView showErrorWithText:K_CC_LOCAL_STR(@"location.error")];

}

[weakSelf.mapView setCenterCoordinate:location.coordinate animated:NO];

[weakSelf.mapView addAnnotation:weakSelf.curAnnotation];

[weakSelf.mapView selectAnnotation:weakSelf.curAnnotation animated:YES];

[weakSelf.locService stopUpdatingLocation];

AMapGeoPoint *centerPoint = [AMapGeoPoint locationWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];

[weakSelf.placeAround setLocation:centerPoint];

[weakSelf.poiSearch AMapPOIAroundSearch:weakSelf.placeAround];

}

}];

}else{

self.errorLabel.hidden = NO;

}

}

#pragma mark - AMapSearchDelegate

-(void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error

{

NSLog(@"Error: %@ ", error);

if (self.datalist.count>0 && self.placeAround.page!=1) {

[self.listTableView.mj_footer endRefreshingWithNoMoreData];

}

[self.listTableView reloadData];

}

-(void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response

{

[self.listTableView.mj_footer endRefreshing];

if (response.pois.count>0) {

for (AMapCloudPOI *info in response.pois) {

CCSignInModel *model = [[CCSignInModel alloc]init];

model.name     = info.name;

model.address  = info.address;

model.curCity = self.curCity;

model.curArea = self.curArea;

model.curStreet = self.curStreet;

model.location = CLLocationCoordinate2DMake(info.location.latitude,info.location.longitude);

[self.datalist addObject:model];

}

if (response.pois.count == 10 && self.placeAround.page == 1) {

@K_CC_WEAK(self)

self.listTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{

@K_CC_STRONG(self)

self.placeAround.page++;

[self.poiSearch AMapPOIAroundSearch:self.placeAround];

}];

}else if(response.pois.count < 10 && self.placeAround.page != 1){

[self.listTableView.mj_footer endRefreshingWithNoMoreData];

}

}else{

if (self.placeAround.page == 1 && self.datalist.count == 0) {

[CCNoDataView nodataViewShowWithTableView:self.listTableView isShow:YES];

}

}

[self.listTableView reloadData];

}

iOS关于高德地图定位和热点搜索使用小结的更多相关文章

  1. 高德地图定位不到 报错 location Error, ErrCode:7, errInfo:KEY错误 请到http://lbs.amap.com/api/android-location-sdk/abouterrorcode/查看错误码说明.

    出现该问题的可能是高德地图的配置不准确: 仔细配对一下 看sha1 是否是通过应用签名生成的  要区分发布版的sha1 跟调试版的sha1  是不相同的 (小编我第一次反这种错误的时候 是因为我把高得 ...

  2. ios开发--高德地图SDK使用简介

    高德LBS开放平台将高德最专业的定位.地图.搜索.导航等能力,以API.SDK等形式向广大开发者免费开放.本章节我们来简单学习一下如何使用它的定位及地图SDK. 一.相关框架及环境配置 地图SDK 对 ...

  3. iOS导入高德地图出现缺失armv7--"Undefined symbols for architecture armv7"

    在已有项目中使用pod导入高德地图,报了以下错误: ld: warning: directory not found for option '-L/Users/paul/iOS/yun-hui-yi/ ...

  4. android开发对应高德地图定位服务进度一

    进行android的高德地图开发首先需要进入高德地图的控制台进行注册登录.之后创建新的应用并且绑定软件得到相应的key. 这里面需要找到自己软件对应的多个SHA1.这里有发布版和调试版,以及对应的软件 ...

  5. iOS的高德地图标注特定位置

    在开发时有时候遇到项目里面需要展示公司的位置,这时如果导入百度地图什么的就太浪费资源,而且还占内存 这时只要调用自动高德地图的就行了 自己写一个控制器,导入框架 现在导入系统框架只要多打次就能出来了, ...

  6. iOS 利用高德地图WMS服务

    Demo:  https://github.com/xushiyou23/AMapTesting 转: 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net ...

  7. iOS 去除高德地图下方的 logo 图标

    [self.mapView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, ...

  8. 160913、ionic + 高德地图定位

    实例一: var AMapArea=document.getElementById('amap'); AMapArea.parentNode.style.height="100%" ...

  9. ios调用百度地图定位遇到的奇葩问题

    app项目过程中需要用到百度地图,然后网上可以查资料看官网文档,最后弄了好几天还是不行,找了各位前辈帮忙虽然解决了,但是把代码拷贝到我的项目时又无法定位了,最后查看了下原因是info配置出了问题,不是 ...

  10. iOS进阶_地图定位

    一.定位步骤 1.Xcode自带地图,直接先引入头文件 #import <CoreLocation/CoreLocation.h> 2.CLLocation框架中的CLLocationMa ...

随机推荐

  1. python 私有属性的作用

    python 私有属性的作用 class Player(): def __init__(self, name, power, skill): self.name = name self.power = ...

  2. pycham配置GitHub环境【一文了解window上GitHub的基本操作】

    基础用户设置[包含用户登录.密钥生成] 网络配置 外观->系统设置->https代理->检查连接 我这里测试网址是GitHub,连接成功即可后续操作[不成功别找我,我也不知道] gi ...

  3. 【Python】Word文档操作

    依赖库下载: pip install python-docx -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install docx2pdf -i ...

  4. 【Java】逻辑错误BUG

    开局一张图来解释就够了 查询 COUNT() 结果数,有且仅有一条记录 好死不死判断查询的结果数量等等于0, 这不永远都是取TRUE返回 花了一个下午的时间就为了解决这个BUG

  5. 手把手使用 SVG + CSS 实现渐变进度环效果

    效果 轨道 使用 svg 画个轨道 <svg viewBox="0 0 100 100"> <circle cx="50" cy=" ...

  6. Jax计算框架的MPI通讯的扩展库 —— mpi4jax

    地址: https://github.com/mpi4jax/mpi4jax PS. 关于这个library的性能表现并不是很清楚,没有亲自手动安装并测试过.这里只作为链接收藏之用,毕竟这个属于比较小 ...

  7. 使用GPU计算时,单精度float32类型和半精度float16类型运算效率的区别

    最近在看资料时发现写着使用float16 半精度类型的数据计算速度要比float32的单精度类型数据计算要快,因为以前没有考虑过数据类型对计算速度的影响,只知道这个会影响最终的计算结果精度.于是,好奇 ...

  8. WarpDrive 教程 第一部分修改版

    本文参考: https://www.cnblogs.com/devilmaycry812839668/p/15327509.html warpDrive是一个python库,目的是使用GPU并行运行多 ...

  9. 再用国产操作系统deepin出现拖影现象

    问题如题,使用deepin系统后发现不论是网页的拖动.滑动都会出现明显拖影现象,最神奇的是使用爱奇艺的客户端播放器时同样出现拖影现象. 不过这个拖影现象截图还体现不出来这个拖影的效果,估计只有录屏才可 ...

  10. Vue Vine:带给你全新的 Vue 书写体验!

    你好,我是 Kagol,个人公众号:前端开源星球. 上个月和 TinyVue 的小伙伴们一起参加了 VueConf 24 大会,有幸认识沈青川大佬,并了解了他的 Vue Vine 项目,Vue Vin ...