地图篇-05.导航

地图篇-05.导航

上一节讲了大头针的一些知识,这节来讲讲导航,这个非常简单

步骤:  1.获取用户输入的地址

   2.创建目的地在地图上的点

     3.创建当前位置在地图上的点

     4.调用系统自带的地图App导航

代码前准备:

拖入上图中三个控件,并且脱线到ViewController.m中

然后上代码:

 1 //
 2 //  ViewController.m
 3 //  05.导航
 4 //
 5 //  Created by admin on 16/5/31.
 6 //  Copyright © 2016年 KXZDJ. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 //导入头文件
11 #import <MapKit/MapKit.h>
12 
13 @interface ViewController ()
14 @property (weak, nonatomic) IBOutlet UITextField *destinationFiled;
15 
16 @end
17 
18 @implementation ViewController
19 - (IBAction)navigation:(id)sender {
20     
21     //1.获取用户输入的位置
22     NSString *address = self.destinationFiled.text;
23     //判断
24     if (address.length == 0) {
25         NSLog(@"请输入目的地");
26         return;
27     }
28     
29     //2.创建目的地在地图上的点
30     CLGeocoder *geo = [[CLGeocoder alloc] init];
31     
32     //地理编码
33     [geo geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
34         
35         if (placemarks.count == 0 || error) {
36             NSLog(@"地理编码失败");
37             return ;
38         }
39         //获取到placemarks中的一个元素(这里可能返回多个地标,但是我们只随便取一个,重点不在这里)
40         CLPlacemark *clp = [placemarks lastObject];
41         
42         //这里需要一个CLPlacemark的参数,那么这个参数在前面地理编码的时候用到过,同样创建一个,但是这里需要地理编码才能获取到placemarks👆
43         MKPlacemark *mkp = [[MKPlacemark alloc] initWithPlacemark:clp];
44         //创建用户在地图上的点用下面这个方法,需要一个MKPlacemark的参数,我们就创建一个👆
45         MKMapItem *destinationItem = [[MKMapItem alloc] initWithPlacemark:mkp];
46         
47         //3.创建用户在地图上的点(MKMapItem的一个类方法,从当前位置获取一个点)
48         MKMapItem *currentItem = [MKMapItem mapItemForCurrentLocation];
49         
50         //4.调用系统自带的地图App进行导航
51         
52         //MKMapTypeStandard = 0, 标准地图
53         //MKMapTypeSatellite,   卫星地图
54         //MKMapTypeHybrid       混合地图
55         //MKLaunchOptionsDirectionsModeKey:出行方式      MKLaunchOptionsMapTypeKey:地图类型     MKLaunchOptionsShowsTrafficKey:路况信息   (不明白的command + 左键/单机触控板点进去看)
56         NSDictionary *option = @{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsMapTypeKey:@0,MKLaunchOptionsShowsTrafficKey:@YES};
57         
58         [MKMapItem openMapsWithItems:@[currentItem,destinationItem] launchOptions:option];
59         
60         
61     }];
62     
63     
64     
65     
66 }

 

在上面的代码中,有几个参数之前没有用到过,下面有图解:

这是MKMapItem,是获取用户和目的地在地图上的点用的

这是调用系统自带的地图的方法

这个字典要去哪里找呢?

command + 左键/单击触控板 点击MKMapItem :

这里面已经标记了三个.

MKLaunchOptionsMapTypeKey这个键的值在:

MKLaunchOptionsShowsTrafficKey这个键的值是boolean类型的

运行效果 

 

以上就是一个对调用系统自带的地图进行导航的简单实现,如有不足,敬请指教.

posted on 2016-05-31 23:17  Xib'sStory  阅读(538)  评论(0编辑  收藏  举报

导航