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

摘要:
默认情况下,有三个属性:1title2.subtitle3、coorditieMKAnnotationView:在注释中,它描述了如何显示注释。换句话说,它决定是将注释显示为蓝点还是引脚。它是在委托方法中确定的。如果委托方法返回nil,此时将显示蓝点。如果要显示其他视图,必须在代码中实现2.添加位置管理。1.初始化、添加代理并设置精度@propertyCLLocationManager*locationManager;自己locationManager=[[CLLocationManageralloc]init];self.locationManager。代表=自己;self.locationManager。distance过滤器=500;//对于位置管理,精度越高越好。

首先创建一个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中地图及定位的基本实现先描述到这里,后续更新,欢迎浏览查询!

      

免责声明:文章转载自《iOS地图及定位功能基本实现的详尽描述》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL 5.6表空间传输C#学习笔记(35)——事件做的登录案例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

cocosCreator中Protobuf的简单使用

CocosCreatorwebStorm或VSCode安装node.js下载protobufjs6.8.6步骤:...

iTerm2 配色方案(转)

ITerm2配色方案(噢,我的zsh&amp;Powerline)item2.png转到官方网站下载ITerm2,并以全黑色背景打开它。屏幕截图2017-08-01下午5.45.28点。Pngsolarized可以说是目前网络上最流行的配色方案,我个人认为比较这种配色更好。第一种方法:打开iTerm2首选项、配置文件/颜色,然后直接选择Solariz...

国产操作系统——银河麒麟V10 SP1使用小结

几天前,我看了国内操作系统Galaxy Kirin有了新更新的新闻,于是我开始了一个新系统=============================================个人评价:这个系统是一个国产操作系统。尽管使用了大量的Ubuntu和Windows设计,使用了Linux内核,但这是国产操作系统从无到有的开始,其意义和价值远远大于其使用价值。总之...

HTML5表单之input 类型- Date Pickers(日期选择器)

HTML5有几种新的输入类型用于选择日期和时间:日期:选择日期、月份、年份月份:选择月份、年份星期:选择星期和年份时间:选择时间datetime local:选择时间、日期、月份和年份datetime:选择时间、,年示例1:日期示例2:月示例3:周示例4:时间˂inputtype=“time”name=“tart_time”value=“”//示例5:dat...

差分方程的零输入响应与零状态响应

差分方程的迭代分析方法有以下缺点:没有闭合解,不利于数学分析。某个时间的输出只能从头开始计算。本文介绍了差分方程的零输入响应和零状态响应分析方法。对于系统,这种分析方法可以很好地表达系统响应的物理意义=Y[-1]=0$Input Y[n]。回顾零输入响应和零状态响应的迭代计算,我们发现以下规则:$egin{align*}y[0]&=-&qqu...

docker安装MySQL5.7示例!!坑,ERROR 1045 (28000): Access denied for user

处理mysql1045错误1.在/usr/local/mysql/conf中添加一个文件。d目录:mysql文件的内容是:[mysqld]skip-grant-tables2重新启动mysql:dockerstartmysql5.73进入docker:dockerexec-itmysql5.7bash4登录mysql:mysql-uroot-p5将root密...