利用系统的地图App进行导航,只需要传入起点和终点、启动参数,调用MKMapItem的类方法openMapWithItems:launchOptions:来实现定位,调用此方法后会打开系统的地图App。

下面我们来看看这个方法:

+ (BOOL)openMapsWithItems:(NSArray *)mapItems launchOptions:(NSDictionary *)launchOptions;

①第一个参数是一个MapItem数组,每个MapItem中可以包含一个地标,用两个MapItem,一个作起点,一个作终点。

可以利用MKPlacemark初始化,而MKPlacemark可以利用CLPlacemark初始化,要得到CLPlacemark,可以利用CLGeocoder对象对地名进行地理编码得到。

②第二个参数是一个字典,字典中的键和值都可以通过手册查到,值可以使用之前设置地图属性时的值,注意非对象需要包装。

下面的代码演示了通过两个TextField输入起点和终点的地名,通过点击开始定位按钮实现打开系统自带地图App进行定位。

注意block是回调方法,为了保证顺序获取起点终点的地标,要在第一个block内写第二个block代码。

#import "ViewController.h"
#import <MapKit/MapKit.h> @interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *startView;
@property (weak, nonatomic) IBOutlet UITextField *endView;
@property (strong, nonatomic) CLGeocoder *gcoder;
@property (strong, nonatomic) CLPlacemark *startMrk,*endMrk; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; _gcoder = [[CLGeocoder alloc] init]; } - (IBAction)startGeo:(id)sender { NSString *startStr = _startView.text;
NSString *endStr = _endView.text; [_gcoder geocodeAddressString:startStr completionHandler:^(NSArray *placemarks, NSError *error) {
if (!placemarks.count) return;
_startMrk = [placemarks firstObject];
[_gcoder geocodeAddressString:endStr completionHandler:^(NSArray *placemarks, NSError *error) {
if (!placemarks.count) return;
_endMrk = [placemarks firstObject];
[self startNavigation];
}];
}]; } - (void)startNavigation{ MKPlacemark *startMrk = [[MKPlacemark alloc] initWithPlacemark:_startMrk];
MKPlacemark *endMrk = [[MKPlacemark alloc] initWithPlacemark:_endMrk];
MKMapItem *startItem = [[MKMapItem alloc] initWithPlacemark:startMrk];
MKMapItem *endItem = [[MKMapItem alloc] initWithPlacemark:endMrk];
NSArray *items = @[startItem,endItem]; NSMutableDictionary *options = [NSMutableDictionary dictionary];
/*
启动参数的key
NSString * const MKLaunchOptionsDirectionsModeKey;
NSString * const MKLaunchOptionsMapTypeKey;
NSString * const MKLaunchOptionsMapCenterKey;
NSString * const MKLaunchOptionsMapSpanKey;
NSString * const MKLaunchOptionsShowsTrafficKey;
NSString * const MKLaunchOptionsCameraKey
一般键值也是常量字符串,有些是结构体需要用@包装
*/
options[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving;
options[MKLaunchOptionsMapTypeKey] = @(MKMapTypeStandard);
[MKMapItem openMapsWithItems:items launchOptions:options]; } @end

最新文章

  1. Spring基础知识
  2. Android -----listView的属性大全
  3. spinner下拉列表
  4. oracle linux 下卸载
  5. Linux驱动开发学习的一些必要步骤
  6. a:link visited hover active
  7. javascript小记一则:今天在写VS2005——.NET程序时,写的一个JS图片示例案例
  8. 简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作
  9. char在C语言一个字节表示的数据范围
  10. AtCoder瞎做第二弹
  11. Android的TextView设置加粗对汉字无效
  12. Luffy之课程详情页
  13. idea编译器光标变为insert状态
  14. Luogu
  15. [luogu P2294] [HNOI2005]狡猾的商人
  16. JAVA 第四章 数组
  17. 【转】探索 ConcurrentHashMap 高并发性的实现机制
  18. STL容器之一vector
  19. mysql 数据操作 单表查询 concat_ws() 定义显示格式
  20. Yii中使用RBAC完全指南

热门文章

  1. Win7删除文件夹提示找不到该项目无法删除
  2. Python爬取腾讯新闻首页所有新闻及评论
  3. 关于Matchvs一些使用心得与建议
  4. c# &amp;sqlserver
  5. electron-vue 初体验
  6. C# WMI 远程PC(开机、关机、重启)
  7. python的模块与包的导入
  8. 常见压缩格式分析,及 Linux 下的压缩相关指令
  9. Rabbitmq集群
  10. JUnit单元测试教程(翻译自Java Code Geeks)