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

  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. Jmeter二次开发函数 - 将指定时间转换为时间戳

    1.达到效果:在jmeter的函数助手增加一个"timeStamp"函数,调用"timeStamp"函数可以将用户传入的时间转换为时间戳. 2.eclipse项 ...

  2. 【Java】MultiThread 多线程 Re02 线程通讯

    一.等待与唤醒 /** * 线程通讯问题 * Object wait, notify, notifyAll * Condition await signal signAll * CountDownLa ...

  3. 【SVN】文件解锁

    提交代码莫名其妙的把文件上锁了 然后找到文件右键的SVN的选项也不能解锁: 原来是这样解锁的: 对上锁文件的所在目录右键找到SVN选项 然后勾选第二项: 这样就解锁了.如果还说没有解锁,说明是对方自己 ...

  4. 举例说明:ChatGPT和百度文心一言的差距

    翻译: we employ ten sub-generators against one discriminator 百度的表现: ChatGPT的表现:

  5. 如何查看华为的大模型(AI模型),华为官方的mindspore下的大模型???

    由于华为官方的mindspore网站的设计比较反人性话,操作起来十分的复杂,因此如果想要在华为的官方网站上查找这个华为的官方大模型还是比较困难的,为此直接给出链接地址. PS. 要注意,华为的AI官方 ...

  6. NOI2024 集合 题解

    给个链接:集合. 很神秘的题目.基本上看到之后就可以想到哈希. 首先想到一个比较神秘的暴力.就是对于每个询问,扫一遍所有 \(a\) 中的数出现的位置,把它弄成一个哈希值(具体怎么弄随意)存到 set ...

  7. dfs剪枝与优化

    搜索树 剪枝方法 1.优化搜索顺序 2.排除等效冗余 3.可行性 4.最优性(估价) 5.记忆化(树形不会重复计算时不需要) A.针对每个维度边界信息缩放.推倒 B.计算未来最少花费 C.结合各维度的 ...

  8. PPT或Visio比较舒适的RGB配色参数

    1.187 204 235 2.222 156 83 3.117 156 83 4.64 116 52 5.117 121 74 6.69 137 148 7.182 194 154 8.207 19 ...

  9. 最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!

    嵌入式STM32单片机开发环境配置教学Win/Mac · 本教程支持Windows和Mac · Windows可选的开发软件为Keil.Clion.STM32CubeMX,可自由选择开发方式 · Ma ...

  10. 将微信小程序的代码上传到github

    在微信小程序端上传的时候会报错,昨天整了一晚上,没有解决.今天偶然发现了解决方案,下面分为两种情况来说. 一.未生成git仓库 将一号区域的代码粘贴到微信小程序的终端即可 二.已生成了git仓库 将二 ...