1.定位技术:
1.1
,获取基站ID,查询苹果服务器或手机预置的基站信息计算出定位信息,速度快,但由于信号辐射范围大,误差几百上千米,使用三角定位
1.2 WiFi定位
Apple设备可根据周围WIFI热点(不用连接,只需要硬件mac地址,信号强弱等数据),通过苹果服务器或离线数据查询位置信息并计算出定位.支持地区相比基站定位少,精确度&速度中等.
1.3 卫星定位(GPS&GLONASS)
global position system 美国军方 24颗人造卫星 广播无线电信号 手机GPS模块通过分析多个卫星信号(计算角度)获取定位,精准度最高,不需要网络,但获取卫星信息非常耗时耗电, iPhone3G引入,飞行模式理论上也可以导航(飞行模式关蓝牙&wifi&移动通信接收的无线电)
1.4
&wifi定位数据 ,通过网络传给服务器,服务器传回GPS辅助信息,帮手机快速锁定卫星信号获取信息
2.什么是经纬度:
描述世界上某个点位置的统一标准
,需要获取该点的经纬度
2.1.本初子午线
穿过英国伦敦格林文治天文台
E)
W)
东西经各180°,总共360°
2.2.赤道
N)
S)
南北纬各90°,总共180°
横跨经度\纬度越大(1° ≈ 111km)
表示的范围就越大
在地图上看到的东西就越小
实现一次定位
1.创建位置管理者 统一管理定位服务
self.mgr = [[CLLocationManager alloc] init];
2.请求授权 友情提示: 设置info.plist
if ([self.mgr respondsToSelector:@selector(requestWhenInUseAuthorization)]) { //版本适配
//当应用在使用可以获取定位服务
[self.mgr requestWhenInUseAuthorization];
}
3. 获取数据 代理要强引用
/// 当更新位置后调用,该方法会持续调用,返回位置信息(无论位置是否变化)
///
@param manager 位置管理者
@param locations 数组<<span style="line-height: normal; font-family: 'PingFang SC';">位置对象>
void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{..}
4.
开启
[manager startUpdatingLocation];
实现持续定位
1.
self.mgr.distanceFilter = 10;
2.
self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
用户授权&iOS9新特性
1.当应用在使用(应用在前台)可以获取定位服务
self.mgr requestWhenInUseAuthorization];
2.始终(应用在前台&后台)可以获取定位服务
self.mgr requestAlwaysAuthorization];
3.开启临时后台 设置后台运行模式(设置info.plist)
新特性
self.mgr.allowsBackgroundLocationUpdates = YES;
计算两个位置的距离
1.
39.9longitude:116.4];
2. 计算距离
CGFloat distance = [location1 distanceFromLocation:location2];
二. Geocoder
地理编码 人文信息转化为地理信息的过程
地理编码 人文信息 转为 地理信息
1.创建地理编码者
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
2.进行地理编码
数组<<span style="line-height: normal; font-family: 'PingFang SC';">地标对象>
self.addressTF.text completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullableerror) {}];
3.CLPlacemark 地标对象,包含地理编码查询的数据(地理信息&人文信息)
反地理编码 地理信息转化为人文信息的过程
地理信息 ->
1.创建地理编码者
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
2.将经纬度封装成位置对象
self.latitudeTF.text.floatValue longitude:self.longitudeTF.text.floatValue];
3.进行反地理编码
_Nullable placemarks, NSError * _Nullable
三. MapKit-MapView的基本使用
地图定位
1.MKMapView 用来显示地图
//所有使用的框架都需要导入,但是xcode可以根据代码对一部分系统框架进行自动导入
//如果只在IB工具中使用MKMapView,则需要手动导入框架
2.地图定位
1>
1.请求授权
self.mgr = [[CLLocationManager alloc] init];
if ([self.mgr respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.mgr requestWhenInUseAuthorization];
}
2.地图定位 设置用户跟踪模式
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
定位大头针
1.大头针视图是由系统添加的,其数据可以由大头针模型来设置定位大头针模型类
2.思路:
3.设置代理
self.mapView.delegate = self;
///
///
@param mapView 地图视图
@param userLocation 定位大头针模型
void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{}
4.根据经纬度进行反地理编码 转化为 人文信息
5.设置大头针模型的属性
self.mapView.userLocation.title = pm.locality;
self.mapView.userLocation.subtitle = pm.name;
地图类型
地图范围-"返回"(设置以用户所在位置为中心点)
1
self.mapView setUserTrackingMode:MKUserTrackingModeFollowanimated:YES];
2
1.中心点设置为定位点
self.mapView.userLocation.location.coordinate;
2.跨度设置当前地图的跨度
self.mapView.region.span;
3.设置地图的范围
self.mapView setRegion:MKCoordinateRegionMake(center, span) animated:YES];
#pragma mark 5. 地图范围-"放大缩小"{获取地图显示区域改变时的中心点坐标及显示跨度)
1.中心点 设置为地图当前范围的中心点
self.mapView.region.center;
2.跨度 设置为地图当前范围的跨度 *
self.mapView.region.span.latitudeDelta * 0.5;
新特性
//是否显示指南针(罗盘)
self.mapView.showsCompass = YES;
是否显示标尺 单位 英尺(mi) 3.2英尺 = 1米
self.mapView.showsScale = YES;
//是否显示交通情况
self.mapView.showsTraffic = YES;
//是否显示建筑物的3D模型 只能在沙盘(3D/航拍)模式
self.mapView.showsBuildings = YES;
//设置地图的航拍属性
self.mapView.camera = [MKMapCamera cameraLookingAtCenterCoordinate:self.mapView.userLocation.location.coordinate fromDistance:100 pitch:45 heading:0];
//设置兴趣点
//设置是否显示定位
四. MapKit-添加大头针
添加大头针
0.思路: 添加大头针视图是系统的事,开发者需要设置大头针模型来提供数据,为系统设置大头针视图
1.创建自定义大头针模型类 所有遵守MKAnnotation协议的类都可以作为大头针的模型
//@property的本质是自动声明&实现属性同名的set&get方法,并且创建同名加下划线的成员变量
//协议中@property只会声明属性同名的set&get方法,协议中出现属性直接拷贝出来使用
2.设置属性
2.1设置坐标 可以通过iOS的坐标转化为经纬度
2.1.1获取iOS坐标
UITouch *touch = touches.anyObject;
//获取点击事件所在视图的iOS坐标
self.mapView];
2.1.2 转化为经纬度
self.mapView convertPoint:point toCoordinateFromView:self.mapView];
2.2设置标题
@"DH";
@"野生程序员";
3.添加大头针模型到地图中
self.mapView addAnnotation:annotation];
自定义大头针视图1-设置颜色&掉落
,方便优化内容
0.实现协议方法
/// 当大头针视图设置大头针模型时调用,在该方法中设置大头针视图的重用
///
@param mapView 地图视图
@param annotation 大头针模型
///
@return 大头针视图
id)annotation{..}
1.设置重用ID
static NSString *identifier = @"anno";
2.从缓存池中取出大头针视图
self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
3.判断是否为空,为空则创建大头针视图
if(annoV == nil) {
4.设置大头针视图的颜色 设置颜色需要使用MKAnnotationView的子类MKPinAnnotationView
annoV.pinTintColor = [UIColor purpleColor];
5.设置显示标注
YES;
6.设置滑落动画
YES;
自定义大头针视图2-设置图像
1.设置图片 只有基类MKAnnotationView才可以设置自定义图片
2.设置滑落动画 自定义动画 在已经添加大头针但是还没有显示大头针的时候设置自定义的动画
实现代理方法
/// 已经添加大头针但是还没有显示大头针时调用,该方法就是专门用来设置大头针动画
///
@param mapView 地图视图
@param views 数组<<span style="line-height: normal; font-family: 'PingFang SC';">大头针视图>
void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views{
for (MKAnnotationView *annoV in
//获取目标位置
//设置起始的位置 改变y值
annoV.frame = CGRectMake(targetRect.origin.x, 0, targetRect.size.width, targetRect.size.height);
//设置动画
[UIView animateWithDuration:0.3
}
3.过滤系统定位大头针
if
return nil;
}
1.定位技术:
1.1
,获取基站ID,查询苹果服务器或手机预置的基站信息计算出定位信息,速度快,但由于信号辐射范围大,误差几百上千米,使用三角定位
1.2 WiFi定位
Apple设备可根据周围WIFI热点(不用连接,只需要硬件mac地址,信号强弱等数据),通过苹果服务器或离线数据查询位置信息并计算出定位.支持地区相比基站定位少,精确度&速度中等.
1.3 卫星定位(GPS&GLONASS)
global position system 美国军方 24颗人造卫星 广播无线电信号 手机GPS模块通过分析多个卫星信号(计算角度)获取定位,精准度最高,不需要网络,但获取卫星信息非常耗时耗电, iPhone3G引入,飞行模式理论上也可以导航(飞行模式关蓝牙&wifi&移动通信接收的无线电)
1.4
&wifi定位数据 ,通过网络传给服务器,服务器传回GPS辅助信息,帮手机快速锁定卫星信号获取信息
2.什么是经纬度:
描述世界上某个点位置的统一标准
,需要获取该点的经纬度
2.1.本初子午线
穿过英国伦敦格林文治天文台
E)
W)
东西经各180°,总共360°
2.2.赤道
N)
S)
南北纬各90°,总共180°
横跨经度\纬度越大(1° ≈ 111km)
表示的范围就越大
在地图上看到的东西就越小
实现一次定位
1.创建位置管理者 统一管理定位服务
self.mgr = [[CLLocationManager alloc] init];
2.请求授权 友情提示: 设置info.plist
if ([self.mgr respondsToSelector:@selector(requestWhenInUseAuthorization)]) { //版本适配
//当应用在使用可以获取定位服务
[self.mgr requestWhenInUseAuthorization];
}
3. 获取数据 代理要强引用
/// 当更新位置后调用,该方法会持续调用,返回位置信息(无论位置是否变化)
///
@param manager 位置管理者
@param locations 数组<<span style="line-height: normal; font-family: 'PingFang SC';">位置对象>
void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{..}
4.
开启
[manager startUpdatingLocation];
实现持续定位
1.
self.mgr.distanceFilter = 10;
2.
self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
用户授权&iOS9新特性
1.当应用在使用(应用在前台)可以获取定位服务
self.mgr requestWhenInUseAuthorization];
2.始终(应用在前台&后台)可以获取定位服务
self.mgr requestAlwaysAuthorization];
3.开启临时后台 设置后台运行模式(设置info.plist)
新特性
self.mgr.allowsBackgroundLocationUpdates = YES;
计算两个位置的距离
1.
39.9longitude:116.4];
2. 计算距离
CGFloat distance = [location1 distanceFromLocation:location2];
二. Geocoder
地理编码 人文信息转化为地理信息的过程
地理编码 人文信息 转为 地理信息
1.创建地理编码者
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
2.进行地理编码
数组<<span style="line-height: normal; font-family: 'PingFang SC';">地标对象>
self.addressTF.text completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullableerror) {}];
3.CLPlacemark 地标对象,包含地理编码查询的数据(地理信息&人文信息)
反地理编码 地理信息转化为人文信息的过程
地理信息 ->
1.创建地理编码者
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
2.将经纬度封装成位置对象
self.latitudeTF.text.floatValue longitude:self.longitudeTF.text.floatValue];
3.进行反地理编码
_Nullable placemarks, NSError * _Nullable
三. MapKit-MapView的基本使用
地图定位
1.MKMapView 用来显示地图
//所有使用的框架都需要导入,但是xcode可以根据代码对一部分系统框架进行自动导入
//如果只在IB工具中使用MKMapView,则需要手动导入框架
2.地图定位
1>
1.请求授权
self.mgr = [[CLLocationManager alloc] init];
if ([self.mgr respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.mgr requestWhenInUseAuthorization];
}
2.地图定位 设置用户跟踪模式
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
定位大头针
1.大头针视图是由系统添加的,其数据可以由大头针模型来设置定位大头针模型类
2.思路:
3.设置代理
self.mapView.delegate = self;
///
///
@param mapView 地图视图
@param userLocation 定位大头针模型
void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{}
4.根据经纬度进行反地理编码 转化为 人文信息
5.设置大头针模型的属性
self.mapView.userLocation.title = pm.locality;
self.mapView.userLocation.subtitle = pm.name;
地图类型
地图范围-"返回"(设置以用户所在位置为中心点)
1
self.mapView setUserTrackingMode:MKUserTrackingModeFollowanimated:YES];
2
1.中心点设置为定位点
self.mapView.userLocation.location.coordinate;
2.跨度设置当前地图的跨度
self.mapView.region.span;
3.设置地图的范围
self.mapView setRegion:MKCoordinateRegionMake(center, span) animated:YES];
#pragma mark 5. 地图范围-"放大缩小"{获取地图显示区域改变时的中心点坐标及显示跨度)
1.中心点 设置为地图当前范围的中心点
self.mapView.region.center;
2.跨度 设置为地图当前范围的跨度 *
self.mapView.region.span.latitudeDelta * 0.5;
新特性
//是否显示指南针(罗盘)
self.mapView.showsCompass = YES;
是否显示标尺 单位 英尺(mi) 3.2英尺 = 1米
self.mapView.showsScale = YES;
//是否显示交通情况
self.mapView.showsTraffic = YES;
//是否显示建筑物的3D模型 只能在沙盘(3D/航拍)模式
self.mapView.showsBuildings = YES;
//设置地图的航拍属性
self.mapView.camera = [MKMapCamera cameraLookingAtCenterCoordinate:self.mapView.userLocation.location.coordinate fromDistance:100 pitch:45 heading:0];
//设置兴趣点
//设置是否显示定位
四. MapKit-添加大头针
添加大头针
0.思路: 添加大头针视图是系统的事,开发者需要设置大头针模型来提供数据,为系统设置大头针视图
1.创建自定义大头针模型类 所有遵守MKAnnotation协议的类都可以作为大头针的模型
//@property的本质是自动声明&实现属性同名的set&get方法,并且创建同名加下划线的成员变量
//协议中@property只会声明属性同名的set&get方法,协议中出现属性直接拷贝出来使用
2.设置属性
2.1设置坐标 可以通过iOS的坐标转化为经纬度
2.1.1获取iOS坐标
UITouch *touch = touches.anyObject;
//获取点击事件所在视图的iOS坐标
self.mapView];
2.1.2 转化为经纬度
self.mapView convertPoint:point toCoordinateFromView:self.mapView];
2.2设置标题
@"DH";
@"野生程序员";
3.添加大头针模型到地图中
self.mapView addAnnotation:annotation];
自定义大头针视图1-设置颜色&掉落
,方便优化内容
0.实现协议方法
/// 当大头针视图设置大头针模型时调用,在该方法中设置大头针视图的重用
///
@param mapView 地图视图
@param annotation 大头针模型
///
@return 大头针视图
id)annotation{..}
1.设置重用ID
static NSString *identifier = @"anno";
2.从缓存池中取出大头针视图
self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
3.判断是否为空,为空则创建大头针视图
if(annoV == nil) {
4.设置大头针视图的颜色 设置颜色需要使用MKAnnotationView的子类MKPinAnnotationView
annoV.pinTintColor = [UIColor purpleColor];
5.设置显示标注
YES;
6.设置滑落动画
YES;
自定义大头针视图2-设置图像
1.设置图片 只有基类MKAnnotationView才可以设置自定义图片
2.设置滑落动画 自定义动画 在已经添加大头针但是还没有显示大头针的时候设置自定义的动画
实现代理方法
/// 已经添加大头针但是还没有显示大头针时调用,该方法就是专门用来设置大头针动画
///
@param mapView 地图视图
@param views 数组<<span style="line-height: normal; font-family: 'PingFang SC';">大头针视图>
void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views{
for (MKAnnotationView *annoV in
//获取目标位置
//设置起始的位置 改变y值
annoV.frame = CGRectMake(targetRect.origin.x, 0, targetRect.size.width, targetRect.size.height);
//设置动画
[UIView animateWithDuration:0.3
}
3.过滤系统定位大头针
if
return nil;
}