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;
 }