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属性)就可以开始定位。代码如下所示:
|
当位置更新时,会进定位回调,通过回调函数,能获取到定位点的经纬度坐标,示例代码如下:
|
自定义定位图层:
定位图层有3种显示模式,分别为:
- MAUserTrackingModeNone:不跟随用户位置,仅在地图上显示。
- MAUserTrackingModeFollow:跟随用户位置移动,并将定位点设置成地图中心点。
- MAUserTrackingModeFollowWithHeading:跟随用户的位置和角度移动。
通过以下代码可改变定位图层的显示模式:
|
自定义定位图层
定位图层由定位点处的标注(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.添加代码。
|
2.工程配置。
a)左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes
b)在 Background Modes中勾选 Location updates,如下图所示:
注意:后台定位必须将info.plist的字段改成NSLocationAlwaysUsageDescription字段。