2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 高德地图和百度地图接口封装遇到的问题(二):绘制带有方向箭头的折线

高德地图和百度地图接口封装遇到的问题(二):绘制带有方向箭头的折线

时间:2021-12-11 00:53:47

相关推荐

高德地图和百度地图接口封装遇到的问题(二):绘制带有方向箭头的折线

临时接到一个小任务,要封装一个绘制带有方向箭头的折线的功能接口,就下面这种样式:

百度地图给的示例是这样的:

var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {scale: 0.6,//图标缩放大小strokeColor:'#fff',//设置矢量图标的线填充颜色strokeWeight: '2',//设置线宽});var icons = new BMap.IconSequence(sy, '10', '30');// 创建polyline对象var pois = [new BMap.Point(116.350658,39.938285),new BMap.Point(116.386446,39.939281),new BMap.Point(116.389034,39.913828),new BMap.Point(116.442501,39.914603)];var polyline =new BMap.Polyline(pois, {enableEditing: false,//是否启用线编辑,默认为falseenableClicking: true,//是否响应点击事件,默认为trueicons:[icons],strokeWeight:'8',//折线的宽度,以像素为单位strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1strokeColor:"#18a45b" //折线颜色});

那个箭头其实就是一连串的icons,不过要加入icons参数前得先创建Symbol,然后再根据BMap.IconSequence()方法创建出icons,同时也可对symbol样式进行设定。

高德地图的示例是这样的:

var lineArr = [[116.368904, 39.913423],[116.382122, 39.901176],[116.387271, 39.912501],[116.398258, 39.904600]];var polyline = new AMap.Polyline({path: lineArr,//设置线覆盖物路径strokeColor: "#3366FF", //线颜色strokeOpacity: 1, //线透明度strokeWeight: 10, //线宽strokeStyle: "solid", //线样式showDir:true,strokeDasharray: [10, 5] //补充线样式});polyline.setMap(map);

其实就是加了一个showDir参数,不过这里箭头的样式就是固定的。

现在要解决的是把百度的和高德的接口封装成一个统一的接口,以便根据需求,在不同的地图下调用统一的接口。有两种思路:

1.沿用百度的:

newSymbol(options){return new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW,options);}newIconSequence(symbol){return new BMap.IconSequence(symbol, '10', '30');}newPolyline(pointArr,polylineOptions,icons){polylineOptions["icons"]=[icons];return new BMap.Polyline(pointArr,polylineOptions);}

polylineOptions["icons"]=[icons];这里是我刚学到的小方法

polylineOptions={strokeOpacity: 1, strokeWeight: 8}跟json数组很像,原来还可以直接通过上面这行代码插入icons:[icons]

由于高德地图中并没有Symbol,IconSequence这种方法,只是一个"showDir"参数。如果要封装成统一接口的话,就只能写空方法代替:

newSymbol(options){return null;}newIconSequence(symbol){return null; }newPolyline(pointArr,polylineOptions,icons){polylineOptions["path"]=pointArr;polylineOptions["showDir"]=true;return new AMap.Polyline(polylineOptions);}

这样写的话有个问题就是百度地图下调用接口的话,icon样式是可以由用户定义的;但是在高德地图下,虽然是暴露出定义icon样式的方法,但是方法体是空的,因此不起作用,好像有点糊弄人。

2.沿用高德的

直接把icon样式定死

封装后的部分js代码:

百度(BMap):

newPolyline(pointArr,polylineOptions){let sy= new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {scale: 0.6,//图标缩放大小strokeColor:'#fff',//设置矢量图标的线填充颜色strokeWeight: '2',//设置线宽});let icons=new BMap.IconSequence(sy, '10', '30');polylineOptions["icons"]=[icons];return new BMap.Polyline(pointArr,polylineOptions);}

高德(AMap):

newPolyline(pointArr,polylineOptions){polylineOptions["path"]=pointArr;polylineOptions["showDir"]=true;return new AMap.Polyline(polylineOptions);}

这样也能做到接口的统一。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。