系统导航


#import "ViewController.h"

#import <MapKit/MapKit.h>

#import <CoreLocation/CoreLocation.h>


@interface ViewController ()

@property (weak, nonatomic) IBOutlet MKMapView *mapView;

@property (weak, nonatomic) IBOutlet UITextField *sourcePoint;

@property (weak, nonatomic) IBOutlet UITextField *endPoint;


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}


- (IBAction)startLocation:(id)sender {

    /* MKMapItem

     

     // 地标对象

     @property (nonatomic, readonly) MKPlacemark *placemark;

     

     // 是否是当前位置

     @property (nonatomic, readonly) BOOL isCurrentLocation;

     

     // 名称

     @property (nonatomic, copy, nullable) NSString *name;

     

     // 电话

     @property (nonatomic, copy, nullable) NSString *phoneNumber;

     

     // 网址

     @property (nonatomic, strong, nullable) NSURL *url;

     

     // 时区

     @property (nonatomic, copy, nullable) NSTimeZone *timeZone NS_AVAILABLE(10_11, 9_0);

     

     

     // 获取当前位置的地图项

     + (MKMapItem *)mapItemForCurrentLocation;

     

     // 通过地标对象来创建地图项

     - (instancetype)initWithPlacemark:(MKPlacemark *)placemark;

     

     // 打开系统地图

     - (BOOL)openInMapsWithLaunchOptions:(nullable NSDictionary<NSString *, id> *)launchOptions __TVOS_PROHIBITED;

     

     // 打开系统地图(导航)

     + (BOOL)openMapsWithItems:(NSArray<MKMapItem *> *)mapItems launchOptions:(nullable NSDictionary<NSString *, id> *)launchOptions __TVOS_PROHIBITED;

     */

    

    //取出用户输入的起点后终点

    NSString *sourceAddress = self.sourcePoint.text;

    NSString *endAddress = self.endPoint.text;

    

    //1.通过地理编码创建起点地图项

    CLGeocoder *coder = [CLGeocoder new];

    

    //1.1地理编码

    [coder geocodeAddressString:sourceAddress completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

        

        //错误处理

        if (error || placemarks.count == 0) {

            return ;

        }

        

        //1.2获取地标对象

        CLPlacemark *clsourcePlacemark = placemarks.firstObject;

        

        //1.3 转换 CLPlacemark -> MKPlacemark

        MKPlacemark *mksoucePlacemark = [[MKPlacemark alloc]initWithPlacemark:clsourcePlacemark];

        

        //1.4创建起点地图项

        MKMapItem *sourceMapItem = [[MKMapItem alloc]initWithPlacemark:mksoucePlacemark];

        

        //2.创建终点地图项

        [coder geocodeAddressString:endAddress completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

            //错误处理

            if (error ||placemarks.count == 0) {

                return ;

            }

            

            //2.1获取地标对象

            CLPlacemark *clEndPlacemark = placemarks.firstObject;

            

            //2.2 CLPlacemark转为MKPlacemark

            MKPlacemark *mkEndPlacemark = [[MKPlacemark alloc]initWithPlacemark:clEndPlacemark];

            

            //2.3创建的终点地图项

            MKMapItem *endMapItem = [[MKMapItem alloc]initWithPlacemark:mkEndPlacemark];

            

            // 3. 打开系统进行导航

            NSDictionary *options = @{

                                      MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,

                                      MKLaunchOptionsMapTypeKey:@(MKMapTypeStandard),

                                      MKLaunchOptionsShowsTrafficKey:@(YES)

                                      //                                      MKLaunchOptionsMapCenterKey:[NSValue valueWithMKCoordinate:<#(CLLocationCoordinate2D)#>],

                                      //                                      MKLaunchOptionsMapSpanKey:[NSValue valueWithMKCoordinateSpan:<#(MKCoordinateSpan)#>]

                                      };

            

            [MKMapItem openMapsWithItems:@[sourceMapItem,endMapItem] launchOptions:options];

            

            

            /*

             // 导航模式

             MK_EXTERN NSString * const MKLaunchOptionsDirectionsModeKey     NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED; // Key to a directions mode

             // Directions modes

             // 驾驶模式

             MK_EXTERN NSString * const MKLaunchOptionsDirectionsModeDriving NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED;

             // 步行模式

             MK_EXTERN NSString * const MKLaunchOptionsDirectionsModeWalking NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED;

             // 公交模式

             MK_EXTERN NSString * const MKLaunchOptionsDirectionsModeTransit NS_AVAILABLE(10_11, 9_0) __TVOS_PROHIBITED;

             

             

             // 地图类型

             MK_EXTERN NSString * const MKLaunchOptionsMapTypeKey            NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED; // Key to an NSNumber corresponding to a MKMapType

             

             // 是否显示交通状况

             MK_EXTERN NSString * const MKLaunchOptionsShowsTrafficKey       NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED; // Key to a boolean NSNumber

             

             

             // 地图的中心点

             MK_EXTERN NSString * const MKLaunchOptionsMapCenterKey          NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED; // Key to an NSValue-encoded CLLocationCoordinate2D

             

             // 地图的跨度

             MK_EXTERN NSString * const MKLaunchOptionsMapSpanKey            NS_AVAILABLE(10_9, 6_0) __TVOS_PROHIBITED; // Key to an NSValue-encoded MKCoordinateSpan

             

             // 航拍相机

             MK_EXTERN NSString * const MKLaunchOptionsCameraKey             NS_AVAILABLE(10_10, 7_1) __TVOS_PROHIBITED; // Key to MKMapCamera object

             */

        }];

        

        

        

    }];

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值