苹果自带地图进行定位
最近项目中遇到了关于地图定位的需求,考虑到用三方库的话项目会变大,还是用了官方自带的地图。
这是结果图:
一、CoreLocation.frame是iPhone SDK中用来检测用户位置的框架。
1.要实现定位功能,首先引入这个框架。然后添加两个类和一个协议(CLLocationManager、CLLocation、CllocationManagerDelegate)。
精确度级别是通过位置管理器的desiredAccuracy属性来设置的,它的取值可以参照下表。精确级别越高,手机消耗的电越多。
desiredAccuracy属性值 | 描述 |
kCLLocationAccuracyBest | 精确度最好 |
kCLLocationAccuracyNearestTenMeters | 精确到10米以内 |
kCLLocationAccuracyHundredMeters | 精确到100米以内 |
kCLLocationAccuracyKilometer | 精确到1000米以内 |
kCLLocationAccuracyThreeKilometers | 精确到3000米以内 |
2.启动位置管理器进行定位。[locManager startUpdatingLocation](也可以停止检测位置更新[locManager stopUpdatingLocation])
3.获取位置信息
coordinate用来存储地理位置的latitude和longitude,分别代表地理位置的纬度和经度。
location是CLLocation类的一个实例对象。
altitude属性表示某个位置的海拔高度,返回值为浮点型,实际定位时极不准确。
horizontalAccuracy属性表示水平准确度,返回值为浮点型。它是以coordinate为圆心的圆的半径,半径越小定位越准确,如果horizontalAccuracy为负值,表示Core Location定位失败。
verticalAccuracy属性表示垂直水平准确度,返回值为浮点型。它的取值和海拔的取值altitude有关系,与实际情况相差很大。
4.CLLocationManagerDelegate协议
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{}- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{NSString * errorMessage;if ([error code] == kCLErrorDenied) {errorMessage = @"访问被拒绝!";}if ([error code] == kCLErrorLocationUnknown) {errorMessage = @"无法定位到你的位置!";} }
协议
二、使用MapKit显示地图
1.使用MapKit.framework框架可以很轻松地在应用程序中嵌入一幅地图。
region属性用来设置地图的哪一部分被显示,它是一个结构体类型。
center就是coordinate的取值,包括经纬度信息,此处用来表示地图的中心位置。
span表示地图的一个跨度,它包括了该区域的经度和纬度变化度信息,即缩放地图的比例。
MapType属性设置地图的类型,它的取值见下表。
MapType属性值 | 描述 |
MKMapTypeStandard | 表示标准的街道级地图 |
MKMapTypeSatellite | 表示卫星图 |
MKMapTypeHybrid | 表示以上两种类型的混合 |
2.创建一个MKMapView对象视图添加到当前控制器view上,然后在两个位置管理器代理里面设置一下map的region和span,此外还可以设置latitudeDelta和longitudeDelta可实现缩放。
3.添加地图标注,在项目中添加一个MapAnnotations类。该类继承于NSObject,遵循MKAnnotation协议。
详细代码:
1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController 4 5 6 @end
ViewController.h
1 #import "ViewController.h" 2 #import <CoreLocation/CoreLocation.h> 3 #import <MapKit/MapKit.h> 4 5 #import <MapKit/MKAnnotation.h> 6 #import "MapAnnotations.h" 7 8 @interface ViewController ()<CLLocationManagerDelegate, MKMapViewDelegate> 9 { 10 CLLocationManager * locManager; 11 CLLocationCoordinate2D loc; 12 UITextView * textView; 13 14 MKMapView * map; 15 16 MapAnnotations * mapAnnotations; 17 } 18 @end 19 20 @implementation ViewController 21 22 - (void)viewDidLoad { 23 [super viewDidLoad]; 24 // Do any additional setup after loading the view, typically from a nib. 25 //创建位置管理器 26 locManager = [[CLLocationManager alloc] init]; 27 locManager.delegate = self; 28 if ([CLLocationManager locationServicesEnabled]) { 29 locManager.desiredAccuracy = kCLLocationAccuracyBest; //精确度最好 30 locManager.distanceFilter = 300; //距离筛选器 300米 31 [locManager startUpdatingLocation]; //启动位置管理器进行定位 32 [locManager requestAlwaysAuthorization]; 33 } 34 35 map = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; 36 map.showsUserLocation = YES; 37 [self.view addSubview:map]; 38 39 UIButton * addPanBtn = [UIButton buttonWithType:UIButtonTypeContactAdd]; 40 addPanBtn.center = CGPointMake(40, 40); 41 [addPanBtn addTarget:self action:@selector(addPin:) forControlEvents:UIControlEventTouchUpInside]; 42 [self.view addSubview:addPanBtn]; 43 } 44 45 #pragma mark - 代理方法 46 //这是位置更新方法,当我们的移动范围大于距离筛选器的值时,位置管理器会调用此方法进行重新定位 47 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{ 48 CLLocation * location = [locations firstObject]; 49 50 NSLog(@"latitude:%f, longitude:%f",location.coordinate.latitude, location.coordinate.longitude); 51 52 MKCoordinateRegion region; 53 MKCoordinateSpan span; 54 span.latitudeDelta = 1; 55 span.longitudeDelta = 1; 56 region.span = span; 57 region.center = location.coordinate; 58 [map setRegion:region animated:YES]; 59 [map regionThatFits:region]; 60 61 mapAnnotations = [[MapAnnotations alloc] initWithCoordinate:location.coordinate]; 62 mapAnnotations.title = @"TEST"; 63 mapAnnotations.subtitle = @"Just For Test"; 64 [map addAnnotation:mapAnnotations]; 65 } 66 67 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ 68 NSString * errorMessage; 69 if ([error code] == kCLErrorDenied) { 70 errorMessage = @"访问被拒绝!"; 71 } 72 if ([error code] == kCLErrorLocationUnknown) { 73 errorMessage = @"无法定位到你的位置!"; 74 } 75 } 76 77 - (void)dealloc{ 78 //停止检测位置更新 79 [locManager stopUpdatingLocation]; 80 } 81 82 - (void)addPin:(id)sender{ 83 mapAnnotations = [[MapAnnotations alloc] initWithCoordinate:map.region.center]; 84 mapAnnotations.title = [NSString stringWithFormat:@"%f",map.region.center.latitude]; 85 mapAnnotations.subtitle = [NSString stringWithFormat:@"%f",map.region.center.longitude]; 86 [map addAnnotation:mapAnnotations]; 87 } 88 89 - (void)didReceiveMemoryWarning { 90 [super didReceiveMemoryWarning]; 91 // Dispose of any resources that can be recreated. 92 } 93 94 @end
ViewController.m
1 #import <Foundation/Foundation.h> 2 #import <CoreLocation/CoreLocation.h> 3 #import <MapKit/MapKit.h> 4 5 @interface MapAnnotations : NSObject<MKAnnotation> 6 7 @property (nonatomic, copy) NSString * title; 8 @property (nonatomic, copy) NSString * subtitle; 9 @property (nonatomic, assign) CLLocationCoordinate2D coordinate; 10 11 - (instancetype)initWithCoordinate:(CLLocationCoordinate2D)c; 12 13 @end
MapAnnotations.h
1 #import "MapAnnotations.h" 2 3 @implementation MapAnnotations 4 5 - (instancetype)initWithCoordinate:(CLLocationCoordinate2D)c{ 6 _coordinate = c; 7 return self; 8 } 9 10 @end
MapAnnotation.m
转载于:https://www.cnblogs.com/changyulong/p/5753642.html
苹果自带地图进行定位相关推荐
- 解析 数据库 苹果自带地图
首先把MJExtension 第三方文件拖入到工程里面 Model类和View类里面照常写东西 View里面用xib照常拖 然后在VC.m里面引入#import "AFNetworking/ ...
- ios-跳转到苹果自带地图进行导航
在某些应用中可能会出现,我们输入某个位置,然后点击导航,会跳到苹果自带的地图中进行导航,这应该怎么做? 其实很简单,首先我们需要根据输入的地名进行地理编码, 调用方法去得到地标对象,然后去获取CLPl ...
- ios开发中如何调用苹果自带地图导航
前段时间一直在赶项目,在外包公司工作就是命苦,天天加班不说,工作都是和工期合同挂钩的,稍微逾期就有可能被扣奖金,不谈这些伤脑筋的事情了,让我们说说iOS开发中如何调用苹果手机自带的地图. 学习如逆水行 ...
- 苹果自带地图定位 经纬度
1.创建导航 在导航上创建定位按钮 2.引入两个依赖库 一个是地图的 一个是定位的 在VC.m里面: 引入两个框架 地图和定位的框架 #import "ViewController.h&qu ...
- swift中检测跳转苹果自带地图、高德地图、百度地图、腾讯地图
首先申明,此文章是转载 我是闰土你是猹 博主的文章,觉得有用,就拿过来,确实不好找相关案例,特此记录一下!大家可以移步文章原地址:https://blog.csdn.net/qq_30932479/a ...
- IOS 苹果自带地图、百度地图、高德地图打开方式
//手机自带地图 //当前位置 MKMapItem *mylocation = [MKMapItemmapItemForCurrentLocation]; //前面填写纬度 CLLocationCoo ...
- iOS22 地图定位- 苹果自带地图
引入两个框架,编码写成属性,初始化后,传入一个经纬度之后,展示地图: #import <CoreLocation/CoreLocation.h> #import <MapKit/Ma ...
- iOS 苹果自带地图需求开发——1
在iOS开发的过程中,不可避免的要涉及到地图方面的需求,本人也刚刚实现了一些地图上面的需求所以整理了以下的一些实现方式. 1.实现景点(地点)的定位功能 比较简单 话不多说上代码 // 引入mapKi ...
- 苹果自带地图包括路线规划
跟视图控制器: .h为: #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreBluetooth ...
最新文章
- Nat. Commun | 用于全基因组药物重定位的系统网络算法
- mysql与oracle性能对比,Oracle与MySQl对比,
- Linux下下载JDK
- mysql进阶知识_Mysql面试知识点总结(进阶篇)
- php h5微信公众号支付接口,微信公众号H5支付接口调用方法
- java字段描述符_Java 的方法签名与字段类型表示-[Ljava.lang.String;
- mysql event同步数据库_mysql 数据库Event定时任务使用详解(Navicat 及直接SQL语句创建)...
- linux 编译.sh,Linux内核编译步骤
- JavaSE集合框架-01-集合框架体系及表数据结构
- Operations Manager 2007 R2系列之单台服务器拓扑图监控
- Java IDEA的使用
- Java面试宝典(2019版)
- 用matlab绘制抛物线y的x平方,matlab绘制抛物线轨迹
- 哪些网站让你觉得发现了新大陆?分享几个神奇的黑科技网站
- 什么是MES?MES系统有哪些功能?
- hdu 6656 Final Exam
- Sea.js简单使用
- Cesium解决方案 绘制网格 绘制经纬度栅格
- oppo k7x和oppo k7哪个好 oppo k7x和oppo k7参数对比
- Redis基础、超详细入门教程
热门文章
- Word2007“由于文件许可权错误,Word无法完成保存操作”问题的解决方法
- 『一起学AI』生成对抗网络(GAN)原理学习及实战开发
- Wireline SerDes,高速信号的均衡技术
- hexo+gitHub 个人博客搭建及更换主题历程(特适合入门小白)
- 计算机里FC方式,谁知道头文字D里提到的FD,FR,FC,FF指的是什么驱动方式的车?...
- 2015年热门的国产开源软件TOP 50
- JS原生---歌词滚动效果案例
- H5 iOS微信端点击图片触发3Dtouch,导致无法扫描二维码【解决方法】
- 一键生成IOS App Icon工具
- Android音视频视频基础(H264)二 SPS分析