1 #import "ViewController.h" 2 #import3 #import 4 #import "HLannotation.h" 5 @interface ViewController () 6 7 8 //位置管理者 9 @property (nonatomic,strong) CLLocationManager *manager ; 10 11 //地图 12 @property (nonatomic,strong) MKMapView *mapView ; 13 14 //显示我的位置2D坐标 15 @property (nonatomic) CLLocationCoordinate2D locationCoordinate2D ; 16 17 //目的地的2D坐标 18 @property (nonatomic) CLLocationCoordinate2D desCoordinate2D ; 19 20 21 @end 22 23 @implementation ViewController 24 25 - (void)viewDidLoad { 26 [super viewDidLoad]; 27 28 self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 600)]; 29 [self.view addSubview:_mapView]; 30 31 self.manager = [[CLLocationManager alloc] init]; 32 if ([[UIDevice currentDevice].systemVersion floatValue] >=8.0) { 33 34 [self.manager requestAlwaysAuthorization]; 35 36 [self.manager requestWhenInUseAuthorization]; 37 } 38 39 //设置目的地的位置 40 self.desCoordinate2D = CLLocationCoordinate2DMake(23.123, 113.123) ; 41 42 self.mapView.delegate = self ; 43 44 } 45 46 47 #pragma mark --起点关联的方法 48 - (IBAction)btnAction1:(UIButton *)sender { 49 50 self.mapView.showsUserLocation = YES ; 51 } 52 53 #pragma mark --目的地关联的方法 54 - (IBAction)btnAction2:(UIButton *)sender { 55 56 // self.locationCoordinate2D = self.mapView.userLocation.coordinate ; 57 58 //创建一个标注视图 59 HLannotation *annotation = [[HLannotation alloc] init]; 60 61 //为标注视图标注位置 62 annotation.coordinate = self.desCoordinate2D ; 63 annotation.title = @"天河区"; 64 annotation.subtitle = @"天源路"; 65 66 //讲标注视图添加到地图上面 67 [self.mapView addAnnotation:annotation]; 68 69 //对地图的比例尺和区域范围进行设置 70 MKCoordinateRegion region ; 71 region.span.latitudeDelta = 0.5 ; 72 region.span.longitudeDelta = 0.5 ; 73 region.center = self.desCoordinate2D ; 74 [self.mapView setRegion:region]; 75 76 } 77 78 #pragma mark --路线关联的方法 79 - (IBAction)btnAction3:(UIButton *)sender { 80 81 //1.拿到起点和终点的坐标 82 CLLocationCoordinate2D formCoordinate2D = self.locationCoordinate2D ; 83 CLLocationCoordinate2D toCoordinate2D = self.desCoordinate2D ; 84 85 //2.将2D坐标类型的位置转化为MKplace 86 MKPlacemark *formPlaceMark = [[MKPlacemark alloc] initWithCoordinate:formCoordinate2D addressDictionary:nil]; 87 MKPlacemark *toPlaceMark = [[MKPlacemark alloc] initWithCoordinate:toCoordinate2D addressDictionary:nil]; 88 89 //3.用placeMark创建mapItem 90 MKMapItem *formItem = [[MKMapItem alloc] initWithPlacemark:formPlaceMark]; 91 MKMapItem *toItem = [[MKMapItem alloc] initWithPlacemark:toPlaceMark]; 92 93 94 //4.请求两点之间的路线 95 //>>>>1.创建一个方向请求 96 MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; 97 request.source = formItem ; 98 request.destination = toItem ; 99 100 //如果来那点之间有多条线路返回多条,默认NO101 request.requestsAlternateRoutes = YES ;102 103 //5.创建一个线路信息104 MKDirections *directions = [[MKDirections alloc] initWithRequest:request];105 106 //6.画出路线107 [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {108 109 if (error) {110 111 NSLog(@"请检查你的网络...");112 }113 else114 {115 //创建一个线路116 MKRoute *route = [response.routes firstObject];117 118 //把路线在地图上显示出来119 [self.mapView addOverlay:route.polyline];120 }121 122 }];123 124 125 }126 127 128 #pragma mark --自定义地图上线路的方法129 -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id )overlay130 {131 132 MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];133 134 //135 renderer.lineWidth = 5.0f ;136 renderer.strokeColor = [UIColor purpleColor];137 return renderer ;138 139 }140 #pragma mark --更细用户的位置141 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation142 {143 self.locationCoordinate2D = self.mapView.userLocation.coordinate ;144 }
自定义标注视图:继承NSObject
1 #import2 #import 3 @interface HLannotation : NSObject //必需遵守的协议 4 //必选 5 @property (nonatomic) CLLocationCoordinate2D coordinate; 6 //可选 7 @property (nonatomic, copy) NSString *title; 8 @property (nonatomic, copy) NSString *subtitle; 9 10 @end