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