高德地图初步使用-定位

iOS系统不允许使用第三方定位,定位功能是对iOS系统定位的二次封装。通过封装,可将原始的定位点无偏差的显示在高德地图上。

注意:

1)2.3.0(含)之前版本的SDK,在iOS8中无法定位,请参考:iOS8无法定位的解决方案

2)2.4.0(含)以后版本需在info.plist中追加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段.其中:

  • NSLocationWhenInUseUsageDescription表示应用在前台的时候可以搜到更新的位置信息。
  • NSLocationAlwaysUsageDescription表示应用在前台和后台(suspend或terminated)都可以获取到更新的位置数据。

目前,有两种获取位置当前位置信息的方法:

方法一:使用iOS定位SDK

方法二:使用地图SDK中的定位功能,提供定位图层的显示,并且支持自定义定位图标和精度圈的样式。

只要开启定位开关(MAMapView的showsUserLocation属性)就可以开始定位。代码如下所示:

1
2
3
4
5
- ( void )viewDidLoad 
{
     [super viewDidLoad];
     _mapView.showsUserLocation = YES;     //YES 为打开定位,NO为关闭定位
}

当位置更新时,会进定位回调,通过回调函数,能获取到定位点的经纬度坐标,示例代码如下:

1
2
3
4
5
6
7
8
9
-( void )mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
updatingLocation:( BOOL )updatingLocation
{
     if (updatingLocation)
     {
         //取出当前位置的坐标
         NSLog(@ "latitude : %f,longitude: %f" ,userLocation.coordinate.latitude,userLocation.coordinate.longitude);
     }
}


自定义定位图层:


定位图层有3种显示模式,分别为:

  • MAUserTrackingModeNone:不跟随用户位置,仅在地图上显示。
  • MAUserTrackingModeFollow:跟随用户位置移动,并将定位点设置成地图中心点。
  • MAUserTrackingModeFollowWithHeading:跟随用户的位置和角度移动。

通过以下代码可改变定位图层的显示模式:

1
[_mapView setUserTrackingMode: MAUserTrackingModeFollow animated:YES];  //地图跟着位置移动
自定义定位图层

定位图层由定位点处的标注(MAUserLocation)和精度圈(MACircle)组成。

对于3D矢量地图

  • 通过- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation方法中自定义定位标注样式;
  • 通过- (MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id <MAOverlay>)overlay方法自定义定位精度圈的样式。

注意:若想自定义定位经度圈样式,需先将 MAMapView 的customizeUserLocationAccuracyCircleRepresentation 属性设置为 YES。

代码如下:

_mapView.customizeUserLocationAccuracyCircleRepresentation = YES;

- (MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id <MAOverlay>)overlay
{
     /* 自定义定位精度对应的MACircleView. */
     if (overlay == mapView.userLocationAccuracyCircle)
     {
         MACircleView *accuracyCircleView = [[MACircleView alloc] initWithCircle:overlay];
         
         accuracyCircleView.lineWidth    = 2.f;
         accuracyCircleView.strokeColor  = [UIColor lightGrayColor];
         accuracyCircleView.fillColor    = [UIColor colorWithRed:1 green:0 blue:0 alpha:.3];
         
         return accuracyCircleView;
     }
     return nil;
}
 
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation
{
     /* 自定义userLocation对应的annotationView. */
     if ([annotation isKindOfClass:[MAUserLocation  class ]])
     {
         static NSString *userLocationStyleReuseIndetifier = @ "userLocationStyleReuseIndetifier" ;
         MAAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:userLocationStyleReuseIndetifier];
         if (annotationView == nil)
         {
             annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation
                                                              reuseIdentifier:userLocationStyleReuseIndetifier];
         }
         annotationView.image = [UIImage imageNamed:@ "userPosition" ];// 这里的名字填写你要显示的图标
         
         return annotationView;
     }
     return nil;
}


后台定位:

高德地图iOS SDK V2.5.0版本提供后台持续定位的能力,即便你的app退到后台,且位置不变动时,也不会被系统挂起,可持久记录位置信息。该功能适用于记轨迹录或者出行类App司机端。

只需要您的做以下几步操作:

1.添加代码。

1
2
3
_mapView.pausesLocationUpdatesAutomatically = NO;
 
_mapView.allowsBackgroundLocationUpdates = YES; //iOS9以上系统必须配置

2.工程配置。

a)左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes

b)在 Background Modes中勾选 Location updates,如下图所示:

backgroundlocation

注意:后台定位必须将info.plist的字段改成NSLocationAlwaysUsageDescription字段。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值