#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