地图划线Demo

  1 #import "ViewController.h"
  2 #import <MapKit/MapKit.h>
  3 #import <CoreLocation/CoreLocation.h>
  4 #import "HLannotation.h"
  5 @interface ViewController ()<MKMapViewDelegate>
  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     //如果来那点之间有多条线路返回多条,默认NO
101     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         else
114         {
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<MKOverlay>)overlay
130 {
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 *)userLocation
142 {
143     self.locationCoordinate2D = self.mapView.userLocation.coordinate ;
144 }

自定义标注视图:继承NSObject

 1 #import <Foundation/Foundation.h>
 2 #import <MapKit/MapKit.h>
 3 @interface HLannotation : NSObject<MKAnnotation> //必需遵守的协议
 4 //必选
 5 @property (nonatomic) CLLocationCoordinate2D coordinate;
 6 //可选
 7 @property (nonatomic, copy) NSString *title;
 8 @property (nonatomic, copy) NSString *subtitle;
 9 
10 @end

 

posted @ 2015-10-12 21:30  YX祥  阅读(373)  评论(0编辑  收藏  举报