0%

《我的安卓爬坑之旅》-高德地图遇到的坑(2)

这篇博客是关于高德使用中遇到的问题,或许是因为开发文档中没有说明,或许是因为自己段位不够,反正就是遇到坑了。

关于定位点和覆盖物

  有这么一个业务需求:定位手机所在位置成功后,请求服务器数据,服务器返回手机所在地点指定范围内的的点,然后把这些点添加到地图上。
刚开始还没有什么问题,按照官网的demo来做的,到后来数据量多的时候就出现了marker重叠的问题。当然,marker点多的话,重叠也是无法避免的,但是,把定位的标记也给覆盖掉了,这就有点不好了。也没有查到相关的api,demo上添加定位点也是用的marker,估计都是同一级别,按照添加的先后顺序覆盖叠加。
后来找到了一个方法 mLocMarker.setToTop();这样可以把某个marker设置到最高的层级显示。还有一个方法是

1
2
3
4
5
6
public void setDisplayLevel(int var1) {
IMarkerAction var2 = this.a.getIMarkerAction();
if(var2 != null) {
var2.setDisplayLevel(var1);
}
}

这个是Marker对象中的一个方法,但是从官方下载下来的文档中并没有提到这个方法,自己也没有去使用。了解过的朋友可以在评论区回复我一下,谢谢。

AndroidStudio第二次编译之后地图不显示

  AS2.2版本加了 Instant Run 模式,通常情况下这回节省我们很多时间,比如当我们修改了界面布局,想要在手机上看一下效果,没有必要重启整个应用,这个时候就可以使用 Instant Run 模式了,ide内部会进行判断是否需要重启整个应用,如果不需要,只会热重启当前页面。为这个功能点赞啊,有的时候页面藏的比较深,需要多步操作才能打开,这个功能可以节省很多时间。
Install Run
但是啊但是。。。我在Fragment中使用高德地图的时候,使用这个功能会出现地图加载不出来(一片空白),但是定位成功的问题。刚开始的是吓尿了,以为代码出了什么问题,直到我提了工单,看到回复后放心了:
高德工单

您好,Instant Run 确实是不支持这种,目前他们也没有给出解决方案,这里有详细的解释http://stackoverflow.com/questions/33902467/android-studio-2-0-why-does-instant-run-not-work-when-modifying-xml-layout-reso
感谢您的致信,欢迎持续关注高德开放平台!

地图加载完成的回调函数

因为业务上的原因,需要在地图加载完成后做一些操作,当时官网的开发者文档上没有啊,于是又提了工单,接到回复后又放心了

您好,AMap 提供了地图加载完成的方法, 可详见:

1
2
3
4
5
aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
@Override
public void onMapLoaded() {
}
});

感谢您的致信,欢迎持续关注高德开放平台!

步行路径规划当距离比较短时路线不在地图中间位置

  由于业务上的原因,自己的位置和目的地的距离较短,需要步行路径规划,但是啊但是,路径可以规划成功,但是把路径添加到地图上的时候,路径没有显示在屏幕中间位置啊,而是诡异的飘到了一边。反复检查了N边代码,没有问题啊,和官网demo一样啊,把坐标点抠出来,改一下官网demo的起始点(就是两个坐标值),然后,也出现了路径飘到一边的情况,于是又去提了万能的工单,看到工单的回复后,我又放心了
高德工单

我:Demo是从官网的demo上改的,就在om.amap.map3d.demo.route包下的WalkRouteActivity这个类里面,改了一下mStartPoint,和 mEndPoint 的值,附件图片是我修改之后的值
private LatLonPoint mStartPoint = new LatLonPoint(39.990145, 116.481194);
private LatLonPoint mEndPoint = new LatLonPoint(39.99026006391499, 116.4813472288069);
从官网下载回来后只改了这两个地方,把key换成了自己的,其他地方的代码没有动。
如果可以的话,你们可以试一下,找两个距离非常近的点。
答复:
您好,这个问题确实是由SDK内部处理不当引起的bug,我们会在下个版本中修复,给您带来不便深表歉意
感谢您的致信,欢迎持续关注高德开放平台!

解决方法:
判断两个点的距离,小于500米的时候,取起始点位置连线的中间位置作为地图中间点,强制将地图上的此位置拉到屏幕中间。


以上