#import<MapKit/MapKit.h>
#import?"YYAnnotation.h"
@interface ViewController ()<MKMapViewDelegate>
@property(strong,nonatomic)MKMapItem *mapItem;
//編碼工具
@property(strong,nonatomic)CLGeocoder *geocoder;
@property(weak,nonatomic)MKMapView *mapView;
//用于發(fā)送請求給服務(wù)器
@property(strong,nonatomic)MKDirections *direct;
{? ??
[super viewDidLoad];
//? ? 添加一個地圖到界面上? ?
?MKMapView *mapView = [[MKMapView alloc]initWithFrame:self.view.bounds];? ? [self.view addSubview:mapView];? ?
?mapView.delegate = self;? ??
self.mapView = mapView;? ?
?//? ? 添加一個視圖? ? ??
? //? 提供兩個點集绰,自動規(guī)劃線路? ?
?_geocoder = [[CLGeocoder alloc]init];? ? ? ?
?[_geocoder geocodeAddressString:@"北京" completionHandler:^(NSArray* _Nullable placemarks, NSError * _Nullable error)
?{? ? ? ? ? ? ? ? ? ? ?
?? MKPlacemark *placemark = [[MKPlacemark alloc]initWithPlacemark:placemarks.lastObject];? ??
? ? //intrItem可以理解為地圖上的一個點? ? ? ??
MKMapItem *intrItem = [[MKMapItem alloc]initWithPlacemark:placemark];? ? ? ?
?//? ? ? ? 添加一個小別針到地圖上? ? ? ?
?YYAnnotation *anno = [[YYAnnotation alloc]init];? ? ?
?? anno.coordinate = intrItem.placemark.location.coordinate;? ? ?
?? [self.mapView addAnnotation:anno];? ? ? ? ? ? ? ?
?// 讓地圖跳轉(zhuǎn)到起點所在的區(qū)域? ? ?
?? MKCoordinateRegion region = MKCoordinateRegionMake(intrItem.placemark.location.coordinate, MKCoordinateSpanMake(3, 3));? ? ??
? [self.mapView setRegion:region];? ? ? ? ? ? ?
?? //創(chuàng)建終點? ? ? ?
?[_geocoder geocodeAddressString:@"邯鄲" completionHandler:^(NSArray* _Nullable placemarks, NSError * _Nullable error)?
{? ? ? ? ? ? ? ? ? ?
?//destItem可以理解為地圖上的一個點? ? ? ?
?? ? MKMapItem *destItem = [[MKMapItem alloc]initWithPlacemark:[[MKPlacemark alloc]initWithPlacemark:[placemarks lastObject]]];? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? //? ? ? ? 添加一個小別針到地圖上? ? ? ? ??
? YYAnnotation *anno = [[YYAnnotation alloc]init];? ? ? ??
? ? anno.coordinate = destItem.placemark.location.coordinate;? ? ? ?
?? ? [self.mapView addAnnotation:anno];? ? ? ? ? ? ? ?
?? ? ? ? //調(diào)用下面方法發(fā)送請求? ? ? ? ? ?
?[self moveWith:intrItem toDestination:destItem];? ? ??
? }];??
? }];}
//提供兩個點庭敦,在地圖上進行規(guī)劃的方法
-(void)moveWith:(MKMapItem *)formPlce toDestination:(MKMapItem *)endPlace{//? ? 創(chuàng)建請求體 ??
// 創(chuàng)建請求體 (起點與終點)? ?
?MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];? ? ? ? request.source = formPlce;? ?
?request.destination = endPlace;? ??
? ? self.direct = [[MKDirections alloc]initWithRequest:request];? ??
// 計算路線規(guī)劃信息 (向服務(wù)器發(fā)請求)?
?? [self.direct calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error)?
{? ? ? ? ? ? ? ?
?//獲取到所有路線? ? ? ?
?NSArray*routesArray = response.routes;? ? ??
? //取出最后一條路線? ? ??
? MKRoute *rute = routesArray.lastObject;? ? ? ??
? ? ? ? //路線中的每一步? ? ?
?? NSArray*stepsArray = rute.steps;? ? ? ?
?? ? ? ? //遍歷? ? ??
? for (MKRouteStep *step in stepsArray)
?{? ? ? ? ? ? ? ? ? ? ??
? [self.mapView addOverlay:step.polyline];? ? ?
?? }
// 收響應(yīng)結(jié)果 MKDirectionsResponse? ?
?? ? // MKRoute 表示的一條完整的路線信息 (從起點到終點) (包含多個步驟)?
?? }];}
// 返回指定的遮蓋模型所對應(yīng)的遮蓋視圖, renderer-渲染
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay
{
// 判斷類型
if ([overlay isKindOfClass:[MKPolyline class]]) {
// 針對線段, 系統(tǒng)有提供好的遮蓋視圖
MKPolylineRenderer *render = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
// 配置轴合,遮蓋線的顏色
render.lineWidth = 5;
render.strokeColor =? [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1.0];
return render;
}
// 返回nil, 是沒有默認(rèn)效果
return nil;
}
第二個頁面
#import
#import
@interface YYAnnotation : NSObject<MKAnnotation>
@property(assign,nonatomic)CLLocationCoordinate2D coordinate;