• iOS地图及定位功能基本实现的详尽描述


    首先创建一个viewController:

    添加MapKit,CoreLocation框架

    一、添加地图

    1、初始化地图视图:

    @property (nonatomic, strong) MKMapView *mapView;
    
      self.mapView =[[MKMapView alloc]initWithFrame:self.view.bounds];

    2、设置地图的显示类型,三种:标准,卫星地图,混合  

    self.mapView.mapType  {
    
            MKMapTypeStandard = 0,
    
            MKMapTypeSatellite,
    
            MKMapTypeHybrid };

    3、定义地图是否可以放大缩小滑动,添加代理    

    self.mapView.zoomEnabled = YES;
    
    self.mapView.scrollEnabled = YES;

    self.mapView.delegate = self;

    4、添加CoreLocation框架

      添加一个地区的地理坐标位置(经纬度),北纬是正数,东经是正数;当前坐标表示郑州市位置   

    CLLocationCoordinate2D coordinate;
    
    coordinate.latitude = 34.7598711;
    
    coordinate.longitude = 113.663221;

    5、表示显示区域的精度,值越小表示的范围越精确,值越大表示的范围越大,但是不精确

    MKCoordinateSpan span = {100,100};
    
        100在地图上表示100*111公里的范围

    6、根据地理坐标和span创建表示区域的值。(通常一个圆,和半径) 

    初始化方法(1):MKCoordinateRegion region = {coordinate,span};
    
         (2):MKCoordinateRegion region;
    
                      region =MKCoordinateRegionMake(coordinate,span);

    7、告诉地图显示的区域,并讲地图添加到当前视图上

    [self.mapView setRegion:region];
    [self.view addSubview:self.mapView];

    8、为坐标位置添加注解

    MKPointAnnotation *pinAnnotation = [[MKPointAnnotation alloc] init];
    pinAnnotation.coordinate = coordinate;
    
     pinAnnotation.title = @"郑州";
    
     pinAnnotation.subtitle = @"河南青云信息技术";
    
     [self.mapView addAnnotation:pinAnnotation];

    9、当要对显示当注解自定义时,调用下面方法,用来设置显示界面

    - (MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
    {
        if ([annotation isKindOfClass:[MKUserLocation class]]) {
            return nil;
        }
        static NSString *indentifier = @"pinView";
        MKPinAnnotationView *pinView =(MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:indentifier];
        if (nil == pinView) {
            pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:indentifier];
        }
        pinView.pinColor = MKPinAnnotationColorPurple;
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;
        
        return pinView;
    }

    10、MKAnnotation 与 MKAnnotationView 的差异  

    MKAnnotation:
    
        它在注解里实际上就是一个model,主要用于向视图提供相应的数据。 默认情况下,有三个属性:1、title 2.subtitle 3、coordinate
    
    MKAnnotationView:
    
        在注解里, 它是用于描述如何显示注解的, 换句话是确定是显示成蓝点还是显示成大头针。 在委托方法里来确定, 如果委托方法,返回nil,这个时候蓝点。如果想要显示成其它的视图,必须在代码里来实现

     

    二、添加位置管理

    1、初始化,并添加代理,设置精度

    @property (nonatomic, strong) CLLocationManager *locationManager;
       
        self.locationManager = [[CLLocationManager alloc] init];
         self.locationManager.delegate = self;
         self.locationManager.distanceFilter = 500;
     //对于位置管理来说,并非是精度越高越好。因为GPS模块是手机最耗电的模块,所以为最大限度让我们应用程序省电,需要根据具体的应用来设定具体的精度
       self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        
        [self.locationManager startUpdatingLocation];

    2、当位置更新时调用下面方法,可得出新旧两位置间的距离,新位置的坐标;并将地图显示在新坐标位置

    - (void)locationManager:(CLLocationManager *)manager
        didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation
    {
        NSLog(@"%@",NSStringFromSelector(_cmd)); 
        CLLocationDistance distance = [newLocation distanceFromLocation:oldLocation];
        NSLog(@"distance is %f",distance /1000.0);
        
        MKCoordinateRegion region = MKCoordinateRegionMake(newLocation.coordinate, MKCoordinateSpanMake(100, 100));
        [self.mapView setRegion:region animated:YES];
        
        
     }

    3、如果位置管理器失效,将调用下面方法并返回错误信息

    - (void)locationManager:(CLLocationManager *)manager
           didFailWithError:(NSError *)error
    {
        NSLog(@"%@",error);
    }

    小结:关于iOS中地图及定位的基本实现先描述到这里,后续更新,欢迎浏览查询!

          

  • 相关阅读:
    147-21. 合并两个有序链表
    146-14. 最长公共前缀
    145-如何查看python帮助文档
    144-38. 外观数列
    143-121. 买卖股票的最佳时机
    142-206. 反转链表
    141-98. 验证二叉搜索树
    Nginx中文域名配置
    Keepalived+Nginx架构整理版
    Tomcat启动脚本
  • 原文地址:https://www.cnblogs.com/Jin-zhou/p/3726416.html
Copyright © 2020-2023  润新知