iOS 获取导航路线信息(MapKit框架)
2015-11-12 本文已影响642人
iOS_成才录
#import "ViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
/** 地理编码 */
@property (nonatomic, strong) CLGeocoder *geoC;
@end
@implementation ViewController
#pragma mark -懒加载
-(CLGeocoder *)geoC
{
if (!_geoC) {
_geoC = [[CLGeocoder alloc] init];
}
return _geoC;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.geoC geocodeAddressString:@"广州" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
// 广州地标
CLPlacemark *gzPL = [placemarks firstObject];
[self.geoC geocodeAddressString:@"上海" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
// 上海地标
CLPlacemark *shPL = [placemarks firstObject];
[self getRouteWithBeginPL:gzPL endPL:shPL];
}];
}];
}
- (void)getRouteWithBeginPL:(CLPlacemark *)beginPL endPL:(CLPlacemark *)endPL
{
// 请求导航路线信息
// 创建一个获取导航路线信息的请求
MKDirectionsRequest *reqeust = [[MKDirectionsRequest alloc] init];
// 设置起点和终点
CLPlacemark *sourceCLPL = beginPL;
MKPlacemark *sourcePL = [[MKPlacemark alloc] initWithPlacemark:sourceCLPL];
MKMapItem *sourceItem = [[MKMapItem alloc] initWithPlacemark:sourcePL];
reqeust.source = sourceItem;
// 设置终点
// 终点
CLPlacemark *destCLPL = endPL;
MKPlacemark *destPL = [[MKPlacemark alloc] initWithPlacemark:destCLPL];
MKMapItem *destItem = [[MKMapItem alloc] initWithPlacemark:destPL];
reqeust.destination = destItem;
// 创建一个请求导航路线的对象
MKDirections *directions = [[MKDirections alloc] initWithRequest:reqeust];
// 发起请求,获取导航路线
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error)
{
// 获取路线信息成功
if (error == nil) {
/**
* MKDirectionsResponse : 路线响应对象
* routes : 所有的路线 <MKRoute 路线对象>
*/
/**
* MKRoute
* name : 路线名称
* advisoryNotices : 警告提示信息
* distance : 距离
* expectedTravelTime : 预期时间
* transportType : 通过方式
* polyline : 几何路线对应的路线数据模型
* steps : 每一步怎么走
*/
/**
* MKRouteStep
* instructions : 行走介绍
* notice : 警告信息
* polyline : 每一节路线对应的数据模型
* distance : 距离
* transportType : 通过方式
*/
[response.routes enumerateObjectsUsingBlock:^(MKRoute * _Nonnull route, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"路线名称:%@---距离--%f", route.name, route.distance);
[route.steps enumerateObjectsUsingBlock:^(MKRouteStep * _Nonnull step, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@", step.instructions);
}];
}];
}
}];
}
@end