LBS-Object C 定位,地图,导航
来源:互联网 发布:unity3d 寻路插件 编辑:程序博客网 时间:2024/05/18 00:07
1.定位
- CoreLocation: 用于地理定位
- 该框架中所有数据类型的前缀都是 CL
- 位置管理类 : CoreLocationManager
- Map Kit: 用于地图显示
2.个热门专业术语
- LBS: Location Based Service
SoloMo: Social Local Mobile(索罗门)
- 10.26-12.1号,苹果的定位在真机和模拟器都不能用
- 模拟器 bug, 定位时不打印,切换模拟器就可以了
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
3.经纬度coordinate
- latitude 纬度
- longitude 经度
- course 方向
在某些特殊情况下需要开启永久定位授权
需要判断版本信息
if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0){ //配置 plist--如果未配置,就会崩溃 manager.allowsBackgroundLocationUpdates = YES;}
4.计算两点间距离
- 直线距离
- distanceFromLocation: 返回结果是 double 类型
5.地理编码和反地理编码
地理编码
- 将地址翻译成经纬度
- CLGeocoder geocodeAddressString:
- 获取 CLPlacemark
- name 具体地名
- locatity 城市名
- location 位置
- coordinate 经纬度
- 获取 CLPlacemark
反地理编码
- 将经纬度翻译成地址
- CLGeocoder reverseGeocodeAddressString:
6. 导入框架问题
- 在 Xcode5之后,系统会默认帮你导入你需要的框架
- 原理是,根据你导入的头文件自动导入对应的框架
- 如果在 storyboard 中添加第三方框架中的控件(除了 UIKit的框架)时,必须要手动导入框架,否则会崩溃,例如添加了 MapKit
7.地图
iOS9新特性
- 实时交通
- mapView.showsTraffic = YES
- 实时交通
地图类型 mapType
- 标准 standard
- 卫星 satellite
- 鸟瞰 HyBrid
用户跟踪模式
- mapView.userTrackingMode
- MKUserTrackingModeNone
- MKUserTrackingModeFollow 跟踪
- MKUserTrackingModeFollowWithHeading 跟踪位置和方向
- 在设置跟踪模式之前要先
获取授权
//1.获取授权CLLocationManager *manager = [[CLLocationManager alloc] init];self.manager = manager;[manager requestWhenInUseAuthorization];//2.设置跟踪模式self.mapView.userTrackingMode = MKUserTrackingModeFollow;
- mapView.userTrackingMode
回到用户当前位置
- 确定中心点经纬度
确定经纬度跨度
事例
//返回到我的当前位置- (IBAction)goBack:(id)sender { self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate; //经纬度跨度+中心点 = 区域 // region 中包含两个结构体: 1.中心点结构体 2.经纬度跨度结构体 //1.设置经纬度跨度 MKCoordinateSpan span = MKCoordinateSpanMake(0.2, 0.2); //不使用动画 //self.mapView.region = MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span); //使用系统动画 [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span) animated:YES];}
添加大头针
- 导入框架
- 遵循协议
- 拷贝属性
点击屏幕添加大头针
其实应该使用长按添加,这里为了方便使用点击添加
- 获取用户点击的位置
- 转换为经纬度
- 获取 location
- 反地理编码
- 事例代码
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //1.获取 用户点击的位置 CGPoint point = [[touches anyObject] locationInView:self.mapView]; //2.转换位置信息为经纬度 CLLocationCoordinate2D lc = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; //3.反地理编码 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; CLLocation *location = [[CLLocation alloc] initWithLatitude:lc.latitude longitude:lc.longitude]; //4.转换经纬度 [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { if (error) { NSLog(@"%@",error); return ; } CLPlacemark *placemark = placemarks.firstObject; //5.添加大头针 AMAnnotation *tip = [[AMAnnotation alloc] init]; tip.title = placemark.locality; tip.subtitle = placemark.name; tip.coordinate = lc; [self.mapView addAnnotation:tip]; }];}
手动控制大头针的样式和内容
- 大头针视图的代理方法
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{ //与 tableviewcell 不同的地方,可以返回 nil //如果是MKUserLocation类的,就是当前定位位置,不需要设置大头针 if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } //1.设置重用标识 static NSString *ID = @"MKAnnotationView"; //MKAnnotationView默认没有界面--可以显示图片 //MKPinAnnotationView有界面 -- 不可以显示图片 MKPinAnnotationView *view = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:ID]; if (view == nil) { view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID]; } //iOS9之后才出现,之前使用 pinColor, 只有三种颜色可用 view.pinTintColor = [UIColor purpleColor]; //设置掉落动画效果 view.animatesDrop = YES; //显示大头针信息 view.canShowCallout = YES; //一下三个视图都必须设置大头针的 title,否则没有任何信息 //大头针左右视图控件 view.leftCalloutAccessoryView = [UISwitch new]; view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd]; //iOS9新特性 //中间的视图,会遮挡subTitle view.detailCalloutAccessoryView = [UISwitch new]; return view;}
0 0
- LBS-Object C 定位,地图,导航
- 地图定位导航
- 导航地图3_定位
- 百度地图定位与导航
- C 简单实现LBS基站定位
- LBS--定位
- 地图 LBS
- 百度地图lbs在tabhost中不能定位问题
- 高德地图LBS开发定位--android客户端
- 地图与定位(LBS)-MapKit篇
- Android 百度地图API 定位 导航 代码
- Android 百度地图API 定位 导航
- html5实现地图上定位导航路线
- 百度地图定位导航错误总结
- 地图与定位(四)导航划线
- 百度地图通过GPS定位导航
- 高德地图定位与导航
- 走入“地图定位、导航”开发的世界
- 各个版本office卸载工具
- Mysql事项,视图,函数,触发器命令
- centos上安装及配置单台redis
- 传智播客168期JavaEE就业班(第八天 WEB简介 Tomcat)
- VS2012配置OpenCV2.4.9
- LBS-Object C 定位,地图,导航
- 未来趋势
- a类、b类、c类地址
- 一个错误
- Android 的性能工具用法 II-内存分析工具I
- CodeForces 39B Company Income Growth
- 1083. List Grades (25)
- Pig 初识
- 链队列的基本操作