首先需要在项目中导入MapKit
#import <MapKit/MapKit.h>
界面如下
获取'终点位置'
02.png
获取 ‘起点位置’, 进入MKMapItem.h文件可以看到有一个类方法(mapItemForCurrentLocation)直接获取用户当前位置, 注: 模拟器当中无法获取真实地址的, 需要在模拟器菜单点击Debug -> Location -> Custom Location设置
设置'起点位置'和'终点位置', launchOptions参数先设置nil, 调用系统自带的 地图app 进行导航,
此时运行程序, 需要手动点击'目的地'才会去规划路线
再次进入MKMapItem.h文件, 可以看到iOS10新增了一个导航模式:
MKLaunchOptionsDirectionsModeDefault
设置launchOptions
再次运行程序, 输入'目的地', 点击'开始导航', 系统调用自带地图时就会会选择最优路线 08.png
源码
- (IBAction)navigateClick:(id)sender {
/**
地图导航的实现思路:
需要知道起点和终点位置
终点位置的获取 --> 地理编码
起点位置的获取 --> MKMapItem 有一个类方法可以直接获取用户当前位置
*/
// 1. 创建地理编码对象
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
// 2. 实现地理编码方法
[geocoder geocodeAddressString:self.addressTF.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
// 3. 获取最后一个地标对象 --> 创建MKPlacemark对象
MKPlacemark *mkPlacemark = [[MKPlacemark alloc] initWithPlacemark:placemarks.lastObject];
// 4. 根据MKPlacemark对象来创建目的地所在的MKMapItem对象
MKMapItem *destinationItem = [[MKMapItem alloc] initWithPlacemark:mkPlacemark];
// 5. 获取起点位置
MKMapItem *sourceItem = [MKMapItem mapItemForCurrentLocation];
// 6. 调用open方法, 打开系统自带地图进行导航
// MKMapItem: 表示地图上的一个点的对象
NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDefault};
[MKMapItem openMapsWithItems:@[sourceItem, destinationItem] launchOptions:launchOptions];
}];
}
网友评论