高德地图API之边界墙效果
根据参考文章1的文章说明,结合官方的GLCustome自定义图层,我补充了参考文章1中没有的代码,完成了一个动态渐变的范围墙示例,参考代码,使用方式,我就直接上代码了,原理的话,就去看参考文章1好了。
1 | // 引入自定义的类 |
使用上面的代码,就可以绘制一个具有动态效果的范围墙。
问题
(1) 坐标偏移问题
如果在地图的同一个位置上,添加一个圆,就会发现生成的范围墙和绘制的圆不能完全的套牢。
在 自定义图层 这个示例中用到了一个 map.customCoords; 这个属性,渲染的时候,必须设置这个位置的 customCoords.setCenter([116.52, 39.79]); 但是我把它换成了地图的中心,这个就不行了,这个设置中心有什么讲究吗?我在js参考文档里面没有找到这个属性说明。
@官方说:这是一个坐标系原点,会影响相机,如果想修改他,那么也要重新生成数据。
这里 是我的测试代码,我调用了 createInfluenceRange 借助于turf.js生成的圆,还有就是调用 createDistrict 这个获取区县范围直接生成范围,都和地图无法套合,生成的范围墙有偏移。后来我用了和张同学一模一样的代码,还是不行,但是在一个独立的demo中这段代码初始值就可以套合。差点崩溃了,后来我发现了一个问题,就是我改变浏览器的大小,这个红框的大小也会变化,问题可能并不是关于这个坐标中心的问题,而是为什么我进入地图,这个地图容器的大小为什么会变化,这个地图容器的定位方式是不是有问题?
【解决方案】
这个问题主要就是我创建的范围墙和底图生成的圆没法套和,经过我不断的尝试,以及询问相关人员,发现同样的代码,当我地图存在于一个 router-view 之内的时候,也就是说刚开始地图不存在的时候,宽高需要动态获取的时候,这个时候初始化的范围墙就有可能有问题,获取到的threejs坐标,就会有偏差,目前我只能这么猜测,因为没有其他更好的原因了。
还有一个奇怪的地方,就是当我在 router-view 中初始化地图的时候,感觉整个地图特别的卡,难道这是我的错觉吗?希望是我的错觉好了。