定位图标指示方向
功能场景
定位图标根据用户面向的方向进行旋转,在路线规划、导航等场景中帮助用户更加清晰的判断移动方向。
//mapopen-website-wiki.bj.bcebos.com/demos/AndroidVideos/定位图标指示方向.mp4
1590746640|//mapopen-website-wiki.bj.bcebos.com/demos/newqrcodes/定位图标指示方向.png
扫码体验
使用产品
Android定位SDK|/index.php?title=android-locsdk
下载源码
//mapopen-website-wiki.bj.bcebos.com/demos/location/LocationDirectionDemo.zip
setMyLocationEnabled(boolean enabled)
setMyLocationConfiguration(MyLocationConfiguration configuration)
设置定位图层配置信息,只有先允许定位图层后设置定位图层配置信息才会生效
setMyLocationData(MyLocationData data)
设置定位数据, 只有先允许定位图层后设置数据才会生效
MyLocationConfiguration(LocationMode mode, boolean enableDirection, BitmapDescriptor customMarker)
1.mode 定位图层显示方式, 默认为 LocationMode.NORMAL 普通态2.enableDirection 是否允许显示方向信息3.customMarker 设置用户自定义定位图标,可以为 null
direction(float direction)
setLocOption(LocationClientOption locOption)
BDAbstractLocationListener
通过系统的方向传感器获取到方向角度,结合地图SDK中的定位图层功能实现方向指向。
mBaiduMap.setMyLocationEnabled(true);
MyLocationConfiguration myLocationConfiguration = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true, null);
复制成功
// 获取传感器管理服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// 为系统的方向传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_UI);
复制成功
/**
* 传感器方向信息回调
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
double x = sensorEvent.values[SensorManager.DATA_X];
if (Math.abs(x - lastX) > 1.0) {
mCurrentDirection = (float) x;
// 构造定位图层数据
myLocationData = new MyLocationData.Builder()
.accuracy(mCurrentAccracy)
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(mCurrentDirection)
.latitude(mCurrentLat)
.longitude(mCurrentLon).build();
// 设置定位图层数据
mBaiduMap.setMyLocationData(myLocationData);
lastX = x;
复制成功
//mapopen-website-wiki.bj.bcebos.com/demos/iosVideos/location/定位图标指示方向@1x.mp4
1590746640|//mapopen-website-wiki.bj.bcebos.com/demos/ioscodes/定位图标指示方向@1xios.png
扫码体验
使用产品
iOS定位SDK|/index.php?title=ios-locsdk
下载源码
//mapopen-website-wiki.bj.bcebos.com/demos/location/LocationDirectionSDKDemo.zip
-(void)updateLocationData:(BMKUserLocation *)userLocation;
[self.locationManager startUpdatingLocation];
[self.locationManager startUpdatingHeading];
- (void)BMKLocationManager:(BMKLocationManager *)manager didUpdateLocation:(BMKLocation *)location orError:(NSError *)error;
- (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager didUpdateHeading:(CLHeading * _Nullable)heading;
该方法为BMKLocationManager提供设备朝向的回调方法
// 显示定位图层
_mapView.showsUserLocation = YES;
// 定位模式
_mapView.userTrackingMode = BMKUserTrackingModeHeading;
复制成功
2.实现连续定位回调代理方法和设备朝向的回调代理方法
/// 连续定位回调函数
- (void)BMKLocationManager:(BMKLocationManager *)manager didUpdateLocation:(BMKLocation *)location orError:(NSError *)error {
// 定位错误信息
if (error) {
NSLog(@"locError:{%zd -%@};", error.code, error.localizedDescription);
return;
// 定位结果
if (location) {
self.userLocation.location = location.location;
// 如需展示我的位置图标需要调用此方法
[self.mapView updateLocationData:self.userLocation];
// 设置地图中心点
[self.mapView setCenterCoordinate:location.location.coordinate];
/// 该方法为BMKLocationManager提供设备朝向的回调方法。
- (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager didUpdateHeading:(CLHeading * _Nullable)heading {
if (!heading) { return; }
/// 更新当前位置数据
self.userLocation.heading = heading;
[self.mapView updateLocationData:self.userLocation];
复制成功
// 开始连续定位
[self.locationManager startUpdatingLocation];
// 开始设备朝向事件回调
[self.locationManager startUpdatingHeading];
复制成功