(八十一)利用系统自带App来实现导航

来源:互联网 发布:二维平移变换矩阵 编辑:程序博客网 时间:2024/04/29 08:59

利用系统的地图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


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 客服遇到客户骂怎么办 商场保证金不退怎么办 淘宝被投诉侵权怎么办 电脑wifi链接不见了怎么办 无线设备坏了怎么办 电脑网页默认了怎么办 淘宝商家停止服务怎么办? 淘宝商家停止了怎么办 做淘宝不会美工怎么办 做客服打字慢怎么办 淘宝客服学不会怎么办 代购不给退货怎么办 淘宝不能发照片怎么办 兼职刷手被骗怎么办 淘宝店商品被降权怎么办 淘宝宝贝被降权了怎么办 淘宝违规降权怎么办 淘宝商品降权怎么办 公司不想要了怎么办 派派被客服禁言怎么办 淘宝收款不发货怎么办 新品标签没了怎么办 商家签收不退款怎么办 微信号存在风险怎么办 建网站不会管理怎么办 淘宝代销厂家发错货卖家怎么办 来分期退货退款怎么办 淘宝售后不退货怎么办 手机淘宝不退货怎么办 淘宝店不肯退款怎么办 退货快递丢件怎么办 淘宝客服不退款怎么办 淘宝被拉进黑名单怎么办 被买家举报假货怎么办 淘宝店售假3次怎么办 支付宝被骗200怎么办 淘宝被同行投诉怎么办 淘宝同行恶意投诉怎么办 淘宝被恶意举报怎么办 买到假的gucci包怎么办 淘宝买家退假货怎么办