高德地图网页版如何标注地点,高德地图标注

聚客2022-05-30  106

高德地图怎么标注地点(鸿蒙开发版高德地图SDK)

成功获取动态定位权后,我们需要进一步获取手机当前的定位信息,并显示在地图上。为了在鸿蒙系统APP的界面显示高德地图的当前位置,可以用图标“小蓝点”标记出来,让手机用户可以清楚的知道自己在哪里。

手机定位-小蓝点

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

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

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

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

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

为了实现这个功能,我们一起敲下代码来实现吧。

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

在激活定位器对象之前,我们必须获得相应的位置权限,比如ohos . permission . locationohos . permission . location _ in _ background

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

当位置权限可以动态选择时,我们需要激活定位器定位器代码如下:

// 定位器 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)); }

从上面的代码块中,我们通过log对象hilog得到了onlocationreport(Location Location)方法中实时输出的参数Location的设备位置值,如下图所示:

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

在获得on LOCATION REPORT(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)方法触发设备当前位置的图标——地图上可以显示小蓝点,渲染如下:

地图显示“小蓝点”

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

使用MyLocationStyle对象更改小蓝点图标的样式。

当然,对象MyLocationStyle也必须绑定到高德地图提供的Amap对象。只有Amap对象才能使小蓝点显示在高德地图上。

结语:

如果想让鸿蒙系统版开发环境中的APP项目实现高德地图的当前位置——“小蓝点”带箭头,需要先获取手机当前位置的数据信息,然后通过高德地图提供的Amap对象绑定当前位置的数据信息,这样高德地图就可以显示我们所在街区的信息。

而定位图标“小蓝点”想要显示在高德的地图上,就必须通过一个监听器OnLocationChangedListener来触发,触发的结果还需要绑定到Amap对象上,这样“小蓝点”才能真正标记出我们当前的位置。

注:关于鸿蒙系统版高德地图定位“小蓝点”的实现,我还没有处理相关的定位“坐标偏移”,和实际定位功能还是有差别的,需要你自己进一步优化功能。如果需要了解这篇文章的更多内容,可以在评论区留言。

转载请注明原文地址:https://juke.outofmemory.cn/read/193711.html

最新回复(0)