//
// ViewController.m
// DrawNavLine
//
// Created by hq on 16/5/18.
// Copyright © 2016年 hanqing. All rights reserved.
//
#import "ViewController.h"
#import <MapKit/MapKit.h>
@interface ViewController () <MKMapViewDelegate>
@property(nonatomic,strong) CLGeocoder *geo;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
- (IBAction)startNav;
@end
@implementation ViewController
-(CLGeocoder *)geo{
if (_geo==nil) {
_geo=[[CLGeocoder alloc]init];
}
return _geo;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.mapView.delegate=self;
}
//开始导航
- (IBAction)startNav {
[self.geo geocodeAddressString:@"shanghai" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
MKPlacemark *mkPlaceMark=[[MKPlacemark alloc]initWithPlacemark:placemarks.firstObject];
//起点
MKMapItem *beigin=[[MKMapItem alloc]initWithPlacemark:mkPlaceMark];
[self.geo geocodeAddressString:@"北京" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
MKPlacemark *mkEndPlaceMark=[[MKPlacemark alloc]initWithPlacemark:placemarks.firstObject];
//终点
MKMapItem *end=[[MKMapItem alloc]initWithPlacemark:mkEndPlaceMark];
//开始计算
[self beginCalculate:beigin endItem:end];
}];
}];
}
-(void) beginCalculate:(MKMapItem *) beginItem endItem:(MKMapItem *) endItem{
MKDirectionsRequest *request=[[MKDirectionsRequest alloc]init];
[request setSource:beginItem];
[request setDestination:endItem];
MKDirections *directions=[[MKDirections alloc]initWithRequest:request];
//开始计算位置距离
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"出错了");
return;
}
[response.routes enumerateObjectsUsingBlock:^(MKRoute * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj.name);
/**
* MKDirectionsResponse
routes : 路线数组MKRoute
*/
/**
* MKRoute
name : 路线名称
distance : 距离
expectedTravelTime : 预期时间
polyline : 折线(数据模型)
steps
*/
/**
* steps <MKRouteStep *>
instructions : 行走提示
*/
MKPolyline *polyline=obj.polyline;
[self.mapView addOverlay:polyline];
}];
}];
}
/**
* 获取对应的图层渲染
*
* @param mapView 地图
* @param overlay 覆盖层数据模型
*
* @return 图层渲染
*/
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
NSLog(@"hah");
//创建一个渲染对象
MKPolylineRenderer *render=[[MKPolylineRenderer alloc]initWithOverlay:overlay];
render.lineWidth=6;
//注意,必须要设置该颜色,不然会看不到线------------------------------------
render.strokeColor=[UIColor orangeColor];
return render;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end