文章目录

  • 前言
  • 需要用到的库
  • 显示基础地图
  • 地图定位
  • 位置搜索
  • 路线规划

前言

关于如何调用高德地图的SDK,项目前需要下载哪些库,还有正式开始写项目前的一些注意事项可见这篇博客【iOS】调用百度、高德地图SDK

需要用到的库

PodFile中写入以下:

platform :ios, '7.0'
target '你的工程名字' do
pod 'AMap3DMap'
pod 'AMapLocation'
pod 'AMapSearch'
end
  • AMap3DMap是用来显示地图等有关操作的库
  • AMapLocation是有关定位功能的库
  • AMapSearch是用来搜索位置等功能的库

显示基础地图

  • 在AppDelegate.m中,先声明好头文件#import <AMapFoundationKit/AMapFoundationKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[AMapServices sharedServices].apiKey = @"你的KEY值";return YES;
}
  • ViewController.h中,提前声明好属性,以便使用该属性
@property (strong, nonatomic) MAMapView* mapView;
  • ViewController.m中,以下有关于mapView的一些其他属性设置
//把地图添加至view_mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height * 0.12, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height * 0.88)];_mapView.showsIndoorMap = YES;       //设置显示室内地图_mapView.zoomLevel = 18;         //设置缩放比例_mapView.zoomEnabled = YES;            //NO表示禁用缩放手势,YES表示开启_mapView.rotateEnabled = NO;        //NO表示禁用旋转手势,YES表示开启_mapView.delegate = self;           //设置代理[self.view addSubview:_mapView];
  • 此外,如果您需要进入地图就显示定位小蓝点,则需要下面两行代码
 开启定位//是否显示用户的位置_mapView.showsUserLocation = YES;_mapView.userTrackingMode = MAUserTrackingModeFollow;

地图定位

  • 先声明定位的头文件#import <AMapLocationKit/AMapLocationKit.h>,再声明一个属性
@property (strong, nonatomic) AMapLocationManager* locationManager;
  • 自定义一个方法对定位初始化
//初始化定位
- (void)initLocation {//持续定位self.locationManager = [[AMapLocationManager alloc] init];self.locationManager.delegate = self;self.locationManager.distanceFilter = 10;[self.locationManager setLocatingWithReGeocode:YES];//开启持续定位[self.locationManager startUpdatingLocation];
}
  • 下面这个是一个回调函数(定位每次改变时都会调用)
//在回调函数中,获取定位坐标,进行业务处理。
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation {NSLog(@"location:{纬度:%f; 经度:%f;}", userLocation.coordinate.latitude, userLocation.coordinate.longitude);
}

位置搜索

  • 当我在输入框里每打出一个字,相关位置信息都会实时更改,并由tableView展示出来
  • 我新创建了一个视图控制器,专门用来呈现搜索的页面
  • 这里用到了新接触的一个控件UISearchController,专门用于搜索的一个控件
  • 在新视图提前声明头文件#import <AMapSearchKit/AMapSearchKit.h>,在.h中用到了如下属性
#import "ViewController.h"
#import <AMapSearchKit/AMapSearchKit.h>NS_ASSUME_NONNULL_BEGIN@interface SearchViewController : UIViewController <UITextFieldDelegate, UISearchBarDelegate, UISearchResultsUpdating, UISearchControllerDelegate, UITableViewDelegate, UITableViewDataSource, AMapSearchDelegate>@property (strong, nonatomic) NSString* searchString;
@property (strong, nonatomic) UISearchController* searchController;
@property (strong, nonatomic) UITableView* searchTableView;
@property (strong, nonatomic) NSMutableArray* listArray;
@property (strong, nonatomic) NSMutableArray* listNameArray;
@property (strong, nonatomic) AMapSearchAPI* searchAPI;@endNS_ASSUME_NONNULL_END
  • 定义好searchController的相关属性
 _searchController = [[UISearchController alloc] initWithSearchResultsController:nil];_searchTableView.tableHeaderView = _searchController.searchBar;  //这句代码意义是将searchController添加在视图上_searchController.searchResultsUpdater = self;_searchController.searchBar.delegate = self;_searchController.searchBar.placeholder = @"搜索";_searchController.searchBar.barTintColor = [UIColor colorWithWhite:0.93 alpha:1];
  • 搜索框激活时,使用提示搜索
//搜索框激活时,使用提示搜索
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {//发起输入提示搜索AMapInputTipsSearchRequest *tipsRequest = [[AMapInputTipsSearchRequest alloc] init];//关键字tipsRequest.keywords = _searchController.searchBar.text;//城市tipsRequest.city = @"西安";//执行搜索[_searchAPI AMapInputTipsSearch: tipsRequest];
}
  • 实现输入提示的回调函数
//实现输入提示的回调函数
- (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest*)request response:(AMapInputTipsSearchResponse *)response {if(response.tips.count == 0) {return;}//通过AMapInputTipsSearchResponse对象处理搜索结果//先清空数组[_listArray removeAllObjects];[_listNameArray removeAllObjects];for (AMapTip *obj in response.tips) {//把搜索结果存在数组[_listArray addObject:obj];[_listNameArray addObject:obj.name];}//_isSelected = NO;//刷新表视图[_searchTableView reloadData];
}
  • 在刷新tableView后就可以将搜索出来的相关位置展示出来了
  • 之后在点击cell后退出当前视图,并将点击的位置的相关信息通过通知传值传入到地图界面,并进行路线规划

路线规划

  • 先明确起始位置和终止位置,起始位置就是自己当前的位置,终止位置就是刚才通知传值传过来的位置。
//路径规划
- (void)pathPlan {AMapWalkingRouteSearchRequest *navi = [[AMapWalkingRouteSearchRequest alloc] init];/* 出发点. */navi.origin = [AMapGeoPoint locationWithLatitude:_mapView.userLocation.coordinate.latitude longitude:_mapView.userLocation.coordinate.longitude];/* 目的地. */navi.destination = [AMapGeoPoint locationWithLatitude:_tipTemp.location.latitude longitude:_tipTemp.location.longitude];//发起路线规划[_searchAPI AMapWalkingRouteSearch:navi];
}
  • 然后实现路径搜索的回调函数
//实现路径搜索的回调函数
- (void)onRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapRouteSearchResponse *)response {if (response.route == nil) {return;}//通过AMapNavigationSearchResponse对象处理搜索结果NSString *route = [NSString stringWithFormat:@"Navi: %@", response.route];NSLog(@"%@", route);AMapPath *path = response.route.paths[0]; //选择一条路径AMapStep *step = path.steps[0]; //这个路径上的导航路段数组NSLog(@"%@",step.polyline);   //此路段坐标点字符串NSLog(@"%@",response.route.paths[0]);if (response.count > 0) {//移除地图原本的遮盖[_mapView removeOverlays:_pathPolylines];_pathPolylines = nil;// 只显示第⼀条 规划的路径_pathPolylines = [self polylinesForPath:response.route.paths[0]];NSLog(@"%@",response.route.paths[0]);//添加新的遮盖,然后会触发代理方法进行绘制[_mapView addOverlays:_pathPolylines];}
}
  • 绘制遮盖时执行的代理方法
//绘制遮盖时执行的代理方法
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay {/* 自定义定位精度对应的MACircleView. *///画路线if ([overlay isKindOfClass:[MAPolyline class]]) {//初始化一个路线类型的viewMAPolylineRenderer *polygonView = [[MAPolylineRenderer alloc] initWithPolyline:overlay];//设置线宽颜色等polygonView.lineWidth = 8.f;polygonView.strokeColor = [UIColor colorWithRed:0.015 green:0.658 blue:0.986 alpha:1.000];polygonView.fillColor = [UIColor colorWithRed:0.940 green:0.771 blue:0.143 alpha:0.800];polygonView.lineJoinType = kMALineJoinRound;//连接类型//返回view,就进行了添加return polygonView;}return nil;
}
  • 路线解析
//路线解析
- (NSArray *)polylinesForPath:(AMapPath *)path {if (path == nil || path.steps.count == 0) {return nil;}NSMutableArray *polylines = [NSMutableArray array];[path.steps enumerateObjectsUsingBlock:^(AMapStep *step, NSUInteger idx, BOOL *stop) {NSUInteger count = 0;CLLocationCoordinate2D *coordinates = [self coordinatesForString:step.polylinecoordinateCount:&countparseToken:@";"];MAPolyline *polyline = [MAPolyline polylineWithCoordinates:coordinates count:count];[polylines addObject:polyline];(void)((free(coordinates))), coordinates = NULL;}];return polylines;
}
  • 解析经纬度
- (CLLocationCoordinate2D *)coordinatesForString:(NSString *)stringcoordinateCount:(NSUInteger *)coordinateCountparseToken:(NSString *)token {if (string == nil) {return NULL;}if (token == nil) {token = @",";}NSString *str = @"";if (![token isEqualToString:@","]) {str = [string stringByReplacingOccurrencesOfString:token withString:@","];}else {str = [NSString stringWithString:string];}NSArray *components = [str componentsSeparatedByString:@","];NSUInteger count = [components count] / 2;if (coordinateCount != NULL) {*coordinateCount = count;}CLLocationCoordinate2D *coordinates = (CLLocationCoordinate2D*)malloc(count * sizeof(CLLocationCoordinate2D));for (int i = 0; i < count; i++) {coordinates[i].longitude = [[components objectAtIndex:2 * i] doubleValue];coordinates[i].latitude  = [[components objectAtIndex:2 * i + 1] doubleValue];}return coordinates;
}

效果如下:

【iOS】高德地图SDK的详细使用相关推荐

  1. flutter引入高德地图_Flutter笔记-调用原生IOS高德地图sdk

    一.前言 2017年底因公司业务组合部门调整,新的团队部分维护的项目用React Native技术混合开发.为适应环境变化,开启疯狂RN学习之旅,晚上回来啃资料看视频.可能由于本身对RN技术体验不感冒 ...

  2. [iOS]高德地图SDK开发--准备篇

    本文是对高德地图SDK使用的总结,对于高德地图不做过多介绍,可直接登录其官网开放平台进行了解; PS: 这里主要是讲解地图使用的准备工作,最后,以显示地图并定位到当前位置来验证;对于其他的使用,可参看 ...

  3. iOS高德地图SDK定位和搜索附近信息的具体使用

    2019独角兽企业重金招聘Python工程师标准>>> https://www.cnblogs.com/-yun/p/7699769.html 转载于:https://my.osch ...

  4. 【iOS】—— 高德地图SDK基础使用

    最近稍微学了学iOS调用高德的SDK,就随便做做笔记.注意:本篇博客基于高德地图SDK的3D地图来写的,若使用的是2D地图可能有的方法可能有所不同,比如自定义定位蓝点之类的. 一.准备工作: 具体的准 ...

  5. iOS调用高德地图SDK

    准备工作: 安装CocoaPods 使用下载第三方库相同的方法下载SDK 方法如下: (1)打开终端,cd 文件路径 进入到所创建的项目文件中 (2)输入pod init为该项目创建Podfile文件 ...

  6. 【iOS】调用百度、高德地图SDK

    文章目录 调用百度地图SDK 调用高德地图SDK 可能会遇到的问题 调用百度地图SDK 先去百度地图开放平台登陆账号,如果没有注册过需要先注册一个账号.然后进入控制台,选择我的应用,进行创建应用. 其 ...

  7. iOS——调用高德地图SDK

    当今的app中,地图随处可见.不管是美团.饿了吗的骑手位置,还是共享单车的扫车.还车,都少不了地图的使用.小组的项目计划也有地图部分,这里记录一下调用高德地图sdk的过程. 官方指南 通过CocoaP ...

  8. iOS—— 调用高德地图SDK

    iOS-- 调用高德地图SDK 我们在许多App中可以发现关于地图的调用以及定位等等功能都是什么重要的,比如滴滴打车,美团外卖等等都是十分依赖于地图的.所以我们就应该学会如和去调用地图.本周我就学习了 ...

  9. 用百度地图sdk返回详细地址描述

    入职新公司之后,需要对现有的手机项目进行改版 第一个改版就是在应用中添加定位的功能,可以用百度地图和高德地图sdk实现. 要求:gps或者网络定位到当前位置,取精度高的位置并返回详细地址描述 先来看看 ...

最新文章

  1. Select函数实现原理分析
  2. 2021年去中心化金融平台22亿美元加密货币被盗
  3. 开发日记-201909024 关键词 linux基础
  4. Nutanix:将IT基础架构“隐形”,让云更简单
  5. 中国农业大学计算机研究生分数线,中国农业大学2017年硕士研究生招生考试复试分数线...
  6. ES分布式机制的透明性,垂直扩容和水平扩容,数据rebalance,master节点,节点平等的分布式架构,shard和replica机制(学习)
  7. 网页中的宽高度(网页视口宽高度,网页滚动宽高度,网页宽高度........)
  8. ssl1562-局域网
  9. python爬虫 selenium模块的学习
  10. MySQL基础思维导图
  11. 云计算将逐渐成为支撑SaaS应用的基础
  12. JS实现new关键字的功能
  13. [Matlab科学绘图] Matlab画图常用函数和命令
  14. nginx autoindex美化
  15. 【路径规划】基于A星算法实现栅格地图全路径规划matlab源码
  16. Android实现省市区三级联动效果
  17. -verbose:gc 和 -XX:+PrintGC 的区别
  18. 花椒母公司花房更新招股书:年利润4亿 周鸿祎是大股东
  19. 感悟:君子不立于危墙之下
  20. 个人理解ToB和ToC业务的不同点

热门文章

  1. Dockerhub最新的toomanyrequests问题
  2. spring boot 使用 bboss 操作 ES
  3. 文读懂安防视频监控系统中H.265、SVAC、GB/T28181、ONVIF、PSIA的区别。
  4. make xconfig详解
  5. Jekyll+GitHub搭建个人博客
  6. Python学习(1)——小甲鱼零基础入门python学习笔记(更新-ing)
  7. c语言给bmp图片加滤镜,图片编辑器PixelStyle: 图像处理,滤镜特效
  8. sql server 2005安装内存不能读
  9. windows下 MikTex的安装和初步使用
  10. Python:'string'字符串内置函数的用法