鸿蒙开发版高德地图SDK-手机定位(二):显示手机定位的蓝点

我们成功获取到动态定位的权限之后,需要进一步获取到手机当前的定位信息,并在地图上能够显示出来。而鸿蒙APP的界面中要显示高德地图的当前定位,可以通过“小蓝点”这个图标来进行标记,让手机用户很明显地知道自己在哪里。

鸿蒙开发版高德地图SDK-手机定位(二):显示手机定位的蓝点

手机定位-小蓝点

如上图,我们在高德地图中看到了一个“小蓝点”图标。引入高德地图SDK后,我们的鸿蒙APP要实现手机当前定位的“小蓝点”,需要以下4个步骤:

(1).打开华为手机中的【位置信息】开关,激活定位器Locator;

(2).开启Locator的定位,通过RequestParam选择手机的精确定位类型,获取LocatorCallback接口中实时发送的定位坐标值;

(3).通过高德地图SDK提供的Amap对象,在自己的slice类中创建全局变量,获取LocatorCallback接口类的onLocationReport()方法中输出的定位值location;

(4).获取到定位坐标数据后,通过LocationSource接口提供的监听器OnLocationChangedListener去触发“小蓝点”在高德地图上显示,我们还可以继续使用高德地图提供的MyLocationStyle对象来改变定位图标的样式风格,最后仍需要绑定到Amap对象中。

为了能够实现此功能,我们还是一起来敲下代码去实现它。

一. 从系统中获取到动态权限的支持后,我们首先打开华为手机中的【位置信息】开关,激活定位器Locator。

在激活Locator这个对象之前,我们一定获取到相应的位置权限,比如ohos.permission.LOCATIONohos.permission.LOCATION_IN_BACKGROUND

没有这两个权限,我们的手机定位数据会显示null, Locator这个对象也无法激活。如果你还没有实现“获取位置权限”的过程,可以搜索我上一篇的内容:鸿蒙开发版高德地图SDK-手机定位(一):获取手机的「位置」权限

当位置权限能够进行动态的选择之后,我们要激活定位器Locator代码如下:

// 定位器
private Locator locator;

/**
 *  激活"位置信息"的locator开关
 */
public void isOpenLocationSwitch(){
        HiLog.info(hilog,"获取定位器" );
        locator = new Locator(getContext());

        //判断“位置信息”开关是否已开启
        if(locator.isLocationSwitchOn()){
            HiLog.info(hilog,"[位置信息]开关已开启" );
          
            //onLocationChangeListener();
        } else {
            
            //结束定位
            locator.stopLocating(mylocatorCallBack);
        }
    }

二.通过RequestParam选择设备的精确定位方式,让LocatorCallback接口能够实现定位数据的获取,并通过定位器locator的startLocating()方法开启定位。

我们需要选择设备的定位类型,可以使用RequestParam来选择更精确的定位方式,并通过LocatorCallback接口类去共同实现定位数据的获取,代码如下:

//上报设备定位信息
private MylocatorCallBack mylocatorCallBack = new MylocatorCallBack();

/**
 * 手机定位器开启后,获取定位实时数据
 */
public void onLocationChangeListener() {
		HiLog.info(hilog,"定位功能开始" );
    // 定位类型,选择"导航场景"
    RequestParam requestParam = new RequestParam(RequestParam.SCENE_NAVIGATION);

    //实现 mylocatorCallBack 接口对象
    mylocatorCallBack = new MylocatorCallBack();

    HiLog.info(hilog,"开启定位" );
    // 开启定位,获取定位数据
    locator.startLocating(requestParam,mylocatorCallBack);

}

三.通过LocatorCallBack接口类提供的onLocationReport()方法,获取实时的定位数据内容,并同时绑定到高德地图提供的Amap对象里面。

//地图控制器
 private AMap aMap;

//日志信息
private static final HiLogLabel hilog = new HiLogLabel(HiLog.DEBUG, 0x0000, "APP_LOG");

 /**
  * 上报设备定位信息
  * 需要注意:MylocatorCallBack是“内部类”,
  *         把封装Amap对象的getLocation(location)方法
  *         放到MylocatorCallBack类提供的onLocationReport(location)方法中,
  *         即可调用并获取到设备实时发送的定位数据信息  
  */
 public class MylocatorCallBack implements LocatorCallback{

 		//获取定位数据
    @Override
    public void onLocationReport(Location location) {
      
      HiLog.info(hilog,"AMap定位,Latitude为:" + location.getLatitude()+",Longitude为:" + location.getLongitude());
      //绑定高德地图提供的Amap对象 
      getLocation(location);
    }

		@Override
    public void onStatusChanged(int i) {

    }

    @Override
    public void onErrorReport(int i) {

    }
 }

/**
 * 获取当前坐标的经纬度值
 */
 public void getLocation(Location location){
		//通过高德地图提供的Amap对象,获取实时定位数据
    LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,16));
    
 }

从上面的代码块中,我们通过日志对象hilog来获取到onLocationReport(Location location)方法中对参数Location实时输出的设备定位值,如下图:

鸿蒙开发版高德地图SDK-手机定位(二):显示手机定位的蓝点

通过Hilog来打印设备当前的位置数据

获取到onLocationReport(Location location)方法中的定位数据后,我们要把这些实时定位数据都绑定到高德地图SDK提供的对象Amap中,让Amap来实现高德地图的当前定位,在上面我是通过自己定义的getLocation(Location location)方法来实现。

四.通过实现LocationSource接口,创建监听器OnLocationChangedListener这个对象,让监听器去触发当前位置-“小蓝点”的图标在地图上的显示,实现手机当前定位功能。

/**
 *  MainAbilitySlice要实现LocationSource接口,获取OnLocationChangedListener监听器
 */
public class MainAbilitySlice extends AbilitySlice implements LocationSource{


	//定位监听器
  private OnLocationChangedListener mListener = null;
			.
      .
      .
  
  /**
   *  获取当前坐标的经纬度值
   */
  public void getLocation(Location location){

			LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
    	aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,16));
    	HiLog.info(hilog,"AMap定位,Latitude为:" + location.getLatitude()+",Longitude为:" + location.getLongitude());
    	
    	//绘制定位图标-小蓝点的样式
    	getMyLocationStyle();
    	//通过监听器OnLocationChangedListener,触发小蓝点在地图上的出现
    	mListener.onLocationChanged(location);
  }

  /**
   * 绘制定位点
   */
  private void getMyLocationStyle(){
        HiLog.info(hilog,"绘制定位小蓝点" );
        MyLocationStyle locationStyle = new MyLocationStyle();//初始化定位蓝点样式
        locationStyle.anchor(0.0f,1.0f);
        aMap.setMyLocationStyle(locationStyle);
        locationStyle.interval(1000);//设置连续定位模式下的的定位间隔,值在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒
//        locationStyle.showMyLocation(true);
        locationStyle.strokeColor(Color.BLUE); //圆圈的边框颜色为蓝色
        locationStyle.radiusFillColor(Color.LTGRAY); //圆圈的填充颜色
        locationStyle.strokeWidth(400);
        aMap.setMyLocationStyle(locationStyle);
        //设置定位蓝点的style

        aMap.getUiSettings().setMyLocationButtonEnabled(false); // 设置默认定位按钮是否显示,非必须设置

        aMap.setLocationSource(this);

        aMap.setMyLocationEnabled(true);//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false
  }

 	/**
 	 * 激活定位器
   * @param onLocationChangedListener
   * LocationSource接口实现方法
   */
 	@Override
 	public void activate(OnLocationChangedListener onLocationChangedListener) {
 				mListener = onLocationChangedListener;
 	}


  /**
   * 关闭定位器
   * LocationSource接口实现方法
   */
  @Override
  public void deactivate() {
      mListener = null;
  }

}

在上面的代码中,我们自己的silice类需要通过LocationSource类来获取监听器OnLocationChangedListener,让监听器OnLocationChangedListener的onLocationChanged(location)方法去触发设备当前定位的图标-小蓝点在地图上能够显示,效果图如下:

鸿蒙开发版高德地图SDK-手机定位(二):显示手机定位的蓝点

地图显示“小蓝点”

如果你感觉这个小蓝点不是自己喜欢的样式风格,我们可以通过上面代码块中提供的MyLocationStyle这个对象来继续改变定位图标的样式风格,效果图如下:

鸿蒙开发版高德地图SDK-手机定位(二):显示手机定位的蓝点

使用MyLocationStyle这个对象,去改变小蓝点图标的样式

当然,MyLocationStyle这个对象也必须绑定到高德地图提供的Amap对象里面,只有Amap对象才能让小蓝点在高德地图中进行显示。

结语:

想要让鸿蒙版开发环境中的APP项目实现高德地图的当前定位-带箭头的“小蓝点”,需要先获取到手机当前定位的数据信息,然后再通过高德地图提供的Amap对象来绑定当前定位的数据信息,让高德地图能够显示我们所在的附近信息。

而定位图标“小蓝点”想要在高德地图上进行显示,必须要有监听器OnLocationChangedListener来进行触发,触发的结果仍需要绑定Amap对象,这样才能让“小蓝点”真正标记我们的当前位置。

注意:以上关于鸿蒙版高德地图的定位“小蓝点”的实现,本人并没有进行相关定位“坐标偏移量”的处理,和实际上的定位功能仍有差异,需要你们自己去进一步进行功能优化。如果您对本篇内容需要进行详细了解,可在评论区进行留言。

展开阅读全文

页面更新:2024-05-21

标签:鸿蒙   地图   监听器   定位器   手机   绑定   图标   实时   接口   对象   位置   方法   数据   数码   设备   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top