• 地图划线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
  • 相关阅读:
    Git 使用记录
    vue threejs
    git如何忽略历史中的文件
    SwiftUI init函数中查询并赋值数据
    SwiftUI Binding数据类型转换
    隐私政策
    Apple开发_神奇资源汇总
    centos安装python记录
    LINUX服务器运行Python出现ModuleNotFoundError的解决方案
    创建Django项目过程
  • 原文地址:https://www.cnblogs.com/yyxblogs/p/4872867.html
Copyright © 2020-2023  润新知