地图与定位(LBS)-MapKit篇
- XIB
- 代码
- 1:你必须import这个框架
- 2:你必须在项目中使用(需要第一个条件的支持)
1 // 1.设置地图显示类型 2 /** 3 MKMapTypeStandard = 0, // 标准 4 MKMapTypeSatellite, // 卫星 5 MKMapTypeHybrid, // 混合(标准+卫星) 6 MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体卫星 7 MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0), // 3D立体混合 8 */ 9 self.customMapView.mapType = MKMapTypeHybridFlyover; 10 11 12 // 2.设置地图的跟随模式 13 //(注意:设置此属性会使用到用户的位置隐私,所以需要请求用户授权,否则没有效果) 14 /** 15 MKUserTrackingModeNone = 0, // 不跟随 16 MKUserTrackingModeFollow, // 跟随用户位置 17 MKUserTrackingModeFollowWithHeading, // 跟随用户位置,并跟随用户方向 18 */ 19 [self locationM]; 20 self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading; 21 22 23 // 3.设置地图其它属性(操作) 24 /** 注意:设置对应的属性时,注意该属性是从哪个系统版本开始引入的,做好不同系统版本的适配*/ 25 // 是否可以缩放 26 self.customMapView.zoomEnabled = NO; 27 // 是否可以滚动 28 self.customMapView.scrollEnabled = NO; 29 // 是否可以旋转 30 self.customMapView.rotateEnabled = NO; 31 // 是否显示3D 32 self.customMapView.pitchEnabled = NO; 33 34 // 4.设置地图其它属性(显示) 35 // 是否显示指南针 36 self.customMapView.showsCompass = YES; 37 // 是否显示比例尺 38 self.customMapView.showsScale = YES; 39 // 是否显示交通 40 self.customMapView.showsTraffic = YES; 41 // 是否显示建筑物 42 self.customMapView.showsBuildings = YES; 43
1 // 测试显示中国地图全貌(经度范围:73°33′E至135°05′E 纬度范围:3°51′N至53°33′N) 2 // MKCoordinateSpan span = MKCoordinateSpanMake(50, 64); 3 // CLLocationCoordinate2D center = CLLocationCoordinate2DMake(28, 104); 4 // MKCoordinateRegion region = MKCoordinateRegionMake(center, span); 5 // [self.customMapView setRegion:region animated:YES]; 6 7 // 根据调整的合适区域跨度 设置地图的显示区域 8 MKCoordinateSpan span = MKCoordinateSpanMake(0.064695, 0.040670); 9 CLLocationCoordinate2D center = self.customMapView.region.center; 10 MKCoordinateRegion region = MKCoordinateRegionMake(center, span); 11 [self.customMapView setRegion:region animated:YES];
1 #pragma mark -MKMapViewDelegate 2 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 3 { 4 /** 5 MKUserLocation : 被称作“大头针模型”,其实喊什么都行,本质就是一个数据模型,只不过此模型遵循了大头针要遵循的协议(MKAnnotation) 6 location: 用户当前所在位置信息(CLLocation对象) 7 title: 大头针标注要显示的标题(NSString对象) 8 subtitle: 大头针标注要显示的子标题(NSString对象) 9 */ 10 // 根据用户当前位置的经纬度,设置地图显示中心 11 /** 12 存在弊端:地图显示比例过大,无法调整 13 解决方案:直接使用对应的调整地图“显示区域”的API 14 */ 15 // [mapView setCenterCoordinate:userLocation.coordinate animated:YES]; 16 /** 17 MKCoordinateSpan 跨度解释: 18 latitudeDelta:纬度跨度,因为南北纬各90度,所以此值的范围是(0---180);此值表示,整个地图视图宽度,显示多大跨度 19 longitudeDelta:经度跨度,因为东西经各180度,所以此值范围是(0---360):此值表示,整个地图视图高度,显示多大跨度 20 注意:地图视图显示,不会更改地图的比例,会以地图视图高度或宽度较小的那个为基准,按比例调整 21 */ 22 // MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1); 23 // MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, span); 24 // [mapView setRegion:region animated:YES]; 25 } 26 27 // 当地图区域(跨度)改变时调用 28 -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 29 { 30 NSLog(@"%f---%f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta); 31 } 32
1 /** 2 存在弊端: 3 iOS8.0之前,地图不会自动滚到用户所在位置 4 解决方案: 5 当地图获取到用户位置之后,使用代码移动地图显示中心 6 1. 设置地图代理,在地图获取用户位置代理方法中操作 7 2. 可以设置地图显示中心/设置地图显示区域 8 */ 9 self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading; 10 11 12
1 // 大头针所在经纬度(订在地图哪个位置) 2 @property (nonatomic, assign) CLLocationCoordinate2D coordinate; 3 4 5 // 大头针标注显示的标题 6 @property (nonatomic, copy, nullable) NSString *title; 7 // 大头针标注显示的子标题 8 @property (nonatomic, copy, nullable) NSString *subtitle; 9 10 11 @property (nonatomic, assign) AnnotationType AT; 12
1 typedef enum{ 2 AnnotationTypeMovie, 3 AnnotationTypeHotel 4 } AnnotationType; 5 6
1 2 3 4 // 获取当前触摸点在地图上的坐标 5 UITouch *touch = [touches anyObject]; 6 CGPoint touchPoint = [touch locationInView:self.customMapView]; 7 // 将坐标转换为经纬度 8 CLLocationCoordinate2D center = [self.customMapView convertPoint:touchPoint toCoordinateFromView:self.customMapView]; 9 10 [self addAnnotationWithCoordinate:center]; 11 12 13 14 15 // 根据经纬度坐标添加大头针 16 - (void)addAnnotationWithCoordinate:(CLLocationCoordinate2D)coordinate 17 { 18 XMGAnnotation *annotation = [[XMGAnnotation alloc] init]; 19 20 annotation.coordinate = coordinate; 21 annotation.title = @"捉妖记"; 22 annotation.subtitle = @"呆萌的胡巴"; 23 annotation.AT = AnnotationTypeHotel; 24 [self.customMapView addAnnotation:annotation]; 25 26 // TODO: 可以自己尝试使用反地理编码,获取当前经纬度所在位置信息,用作大头针标注的标题和子标题 27 28 }
1 // 移除地图上所有大头针 2 - (void)removeAllAnnotation 3 { 4 NSArray *annotations = self.customMapView.annotations; 5 [self.customMapView removeAnnotations:annotations]; 6 } 7
1 #pragma mark -MKMapViewDelegate 2 -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 3 { 4 /** 5 MKUserLocation : 被称作“大头针模型”,其实喊什么都行,本质就是一个数据模型,只不过此模型遵循了大头针要遵循的协议(MKAnnotation) 6 location: 用户当前所在位置信息(CLLocation对象) 7 title: 大头针标注要显示的标题(NSString对象) 8 subtitle: 大头针标注要显示的子标题(NSString对象) 9 */ 10 userLocation.title = @"小码哥"; 11 userLocation.subtitle = @"小码哥总部"; 12 } 13 14
1 // 当添加大头针数据模型时,会调用此方法,获取对应的大头针视图。如果返回nil,则默认使用系统自带的大头针视图。 2 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(XMGAnnotation *)annotation 3 { 4 5 // TODO: 将自定义大头针视图进行封装,完善自定义的大头针数据模型 6 7 // 自定义大头针 8 static NSString *pinID = @"pinID"; 9 MKAnnotationView *customPinView = [mapView dequeueReusableAnnotationViewWithIdentifier:pinID]; 10 if (!customPinView) { 11 customPinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinID]; 12 } 13 14 // 设置大头针图片 15 NSString *imageName = nil; 16 17 switch (annotation.AT) { 18 case AnnotationTypeMovie: 19 imageName = @"category_5"; 20 case AnnotationTypeHotel: 21 imageName = @"category_3"; 22 break; 23 24 default: 25 break; 26 } 27 customPinView.image = [UIImage imageNamed:imageName]; 28 // 设置大头针可以弹出标注 29 customPinView.canShowCallout = YES; 30 // 设置标注左侧视图 31 UIImageView *leftIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 32 leftIV.image = [UIImage imageNamed:@"huba.jpeg"]; 33 customPinView.leftCalloutAccessoryView = leftIV; 34 35 // 设置标注右侧视图 36 UIImageView *rightIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 37 rightIV.image = [UIImage imageNamed:@"eason.jpg"]; 38 customPinView.rightCalloutAccessoryView = rightIV; 39 40 // 设置标注详情视图(iOS9.0) 41 // customPinView.detailCalloutAccessoryView = [[UISwitch alloc] init]; 42 43 return customPinView; 44 45 46 #pragma mark - 华丽的分割线------------当我们返回nil时,系统大致实现方案----------------- 47 return nil; 48 // 当我们返回nil时,系统大致实现方案如下 49 // 1. 大头针系统对应的视图是 MKPinAnnotationView,它继承自 MKAnnotationView 50 // 2. 地图上的大头针视图,和tableview上的cell一样,都使用“循环利用”的机制 51 static NSString *pinID = @"pinID"; 52 MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinID]; 53 if (!pinView) { 54 pinView = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:pinID]; 55 } 56 pinView.annotation = annotation; 57 58 // 弹出标注 59 pinView.canShowCallout = YES; 60 61 // 修改大头针颜色 62 pinView.pinColor = MKPinAnnotationColorPurple; 63 64 // 设置大头针从天而降 65 pinView.animatesDrop = YES; 66 67 // 设置大头针可以被拖拽(父类中的属性) 68 pinView.draggable = YES; 69 70 71 return pinView; 72 return nil; 73 } 74 75 // 选中一个大头针时调用 76 -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 77 { 78 NSLog(@"选中%@", [view.annotation title]); 79 } 80 81 // 取消选中大头针时调用 82 -(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 83 { 84 NSLog(@"取消选中%@", [view.annotation title]); 85 } 86 }
地图与定位(LBS)-MapKit篇相关推荐
- 地图与定位(一)定位服务
前言: 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一 ...
- 地图与定位之大头针视图
该博文在上一博文地图与定位之地图.大头针的基础上完成. 在MyAnnotation.h 中增加属性 #import <Foundation/Foundation.h> #import &l ...
- 转-iOS开发系列--地图与定位
来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...
- android百度地图sdk定位权限,Android:使用百度地图SDK实现定位:下载SDK、申请密钥、动态获得Android权限...
最近想实现一个打卡的功能,想到可以利用百度地图的SDK.网上有很多关于百度地图SDK定位.地图功能应用的demo,这部分倒不是很困难.但网上很多博客写的内容一般都着重于代码部分,很多下载配置和编译器设 ...
- iOS学习笔记19 地图(一)定位CoreLocation
###一.定位介绍 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式. ...
- iOS开发--地图与定位
iOS开发--地图与定位 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们 ...
- Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS
/*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...
- 微信小程序如何调用腾讯地图进行定位的简单方法
前言: 这是博主自己目前使用的方式,比较方便,直接调用,没有任何花里胡哨的操作,简约 简单,基于官方文档的说明可以很清楚的知道如何调用腾讯地图的api 具体操作如下 : 先在腾讯地图开放文档中获取到官 ...
- iOS开发系列--地图与定位
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...
- echarts关系图/力导向动态图(地图经纬度定位)
需求:项目要做一个动态展示服务器前置机间是否连通的界面. 先看下效果,分两种,一种带地图(经纬度),一种屏蔽地图显示: 这个是通过百度echarts的一个案列改造而来.下面附上官网地址.API地址.改 ...
最新文章
- python方法调用名字不一样_python中调用父类同名方法
- Google App Engine(GAE)入门教程翻译
- 算法笔记之回溯法(2)
- Android 编译系统分析(三)
- 数据库原理 知识点总结
- 计算机与人力资源管理论文,计算机专业毕业论文-人力资源管理系统的研究与实现...
- java integer valueof_一文读懂什么是Java中的自动拆装箱
- 快了!CVPR 2019 所有录用论文题目列表刊出,即将开放下载!
- zabbix通过钉钉报警
- 字体大小自适应屏幕分辨率 CSS解决方案
- php 删除最后一个空数组,php删除空数组
- io.js入门(三)—— 所支持的ES6(下)
- 用户名 不在 sudoers 文件中。此事将被报告。
- Kotlin工程项目下的不同的源文件图标
- 申请 iOS开发者计划 (IOS Developer Program IDP)
- c++获取系统时间实例2
- 抖音小店无货源去哪找货源?抖店最新整改代拍公告,新规速递
- 如何构建自己的python package
- 嵌入式软件测试的基本方法
- 命令行重启Mysql