什么是图层
如果你曾经使用过p图软件,对图层的概念应该不会陌生。简单来说,就是在原来的画布上叠加一个新的画布,这个新的画布就是一个新的图层。上面的图层自然会覆盖下面的图层,你可以设置图层的级别以及透明度来实现图层叠加,绘制想要的图像。
canvas绘图
在讨论自定义图层前,我们需要了解canvas画图基本方法,利用百度地图提供的canvas图层接口绘制自定义图形。
使用js绘图前,你需要新建一个画布,即在html中添加一个canvas标签。
1 | <canvas id="myCanvas" width="800" height="600"> |
获取canvas画布容器,并使用getContext() 方法返回一个用于在画布上绘图的二维环境,接下来你可以使用手册中的图形来绘制二维图形。
1 | var c=document.getElementById("myCanvas") |
在绘制前,给画笔设置颜色,你可以设置线条颜色 strokeStyle 或者填充颜色 fillStyle,然后绘制图形,以方形为例子。
1 | ctx.fillStyle="#0000ff" |
一个简单的图形绘制好了,你可以查阅手册,运用不同的图形组合来绘制更为复杂的图形,你也可以通过设置阴影和发光等特效让图形看起来更美观。
百度地图自定义图层
在百度地图v3.0版本类参考中,我们可以找到覆盖物类下的CanvasLayer,用于在地图上绘制自定义的canvas2D或WebGL图形。
定义一个新的canvas图层。
1 | var canvasLayer = new BMap.CanvasLayer({ |
其中zIndex为该自定义图层的层叠顺序,数值高的为上层,canvasUpdate为具体绘制逻辑。
定义canvasUpdate方法,通过this.canvas获取当前的canvas对象,且每次地图发生拖拽或缩放时,该图层会重新绘制。
1 | // 添加薄弱点模式下,全部站点绿色椭圆标注 |
在编写绘制逻辑的时候,绘制图形需要屏幕坐标作为起始位置和终止位置,我们在使用百度地图时,往往是知道经纬度坐标的,此时需要经纬度坐标转化为屏幕坐标来进行图形的定位。
1 | var point = new BMap.Point( lng, lat ) |
此时可以根据坐标点的屏幕坐标来计算你绘制图形的每个点坐标,绘制复杂图形。
图层绘制后,需要添加到地图中才能生效。canvas图层属于覆盖物类,可通过覆盖物添加到地图中。
1 | map.addOverlay(canvasLayer) |
此时自定义图层就添加成功了。