百度地图(41)-GL 地图工具
1. 测量工具
1 var myDis; 2 3 function addDistanceTool(){ 4 5 map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11); // 初始化地图,设置中心点坐标和地图级别 6 7 myDis = new BMapGLLib.DistanceTool(map); 8 9 // 监听测距过程中的鼠标事件 10 myDis.addEventListener('drawend', function(e) { 11 console.log("drawend"); 12 console.log(e.points); 13 console.log(e.overlays); 14 console.log(e.distance); 15 }); 16 myDis.addEventListener('addPoint',function (e) { 17 console.log("addPoint"); 18 console.log(e.point); 19 console.log(e.pixel); 20 console.log(e.index); 21 console.log(e.distance) 22 }); 23 24 myDis.addEventListener("removepolyline",function (e) { 25 console.log("removepolyline"); 26 console.log(e); 27 }); 28 } 29 30 31 function openMapDis(){ 32 addDistanceTool(); 33 myDis.open(); 34 } 35 36 function closeMapDis() { 37 if (myDis) 38 myDis.close(); 39 }
2. 绘制工具
1 function addDrawManager() { 2 var styleOptions = { 3 strokeColor: '#5E87DB', // 边线颜色 4 fillColor: '#5E87DB', // 填充颜色。当参数为空时,圆形没有填充颜色 5 strokeWeight: 2, // 边线宽度,以像素为单位 6 strokeOpacity: 1, // 边线透明度,取值范围0-1 7 fillOpacity: 0.2 // 填充透明度,取值范围0-1 8 }; 9 var labelOptions = { 10 borderRadius: '2px', 11 background: '#FFFBCC', 12 border: '1px solid #E1E1E1', 13 color: '#703A04', 14 fontSize: '12px', 15 letterSpacing: '0', 16 padding: '5px' 17 }; 18 19 // 实例化鼠标绘制工具 20 var drawingManager = new BMapGLLib.DrawingManager(map, { 21 // isOpen: true, // 是否开启绘制模式 22 enableCalculate: false, // 绘制是否进行测距测面 23 enableSorption: true, // 是否开启边界吸附功能 24 sorptiondistance: 20, // 边界吸附距离 25 circleOptions: styleOptions, // 圆的样式 26 polylineOptions: styleOptions, // 线的样式 27 polygonOptions: styleOptions, // 多边形的样式 28 rectangleOptions: styleOptions, // 矩形的样式 29 labelOptions: labelOptions, // label样式 30 }); 31 32 function draw(e) { 33 var arr = document.getElementsByClassName('bmap-btn'); 34 for(var i = 0; i<arr.length; i++) { 35 arr[i].style.backgroundPositionY = '0'; 36 } 37 e.style.backgroundPositionY = '-52px'; 38 switch(e.id) { 39 case 'marker': { 40 var drawingType = BMAP_DRAWING_MARKER; 41 break; 42 } 43 case 'polyline': { 44 var drawingType = BMAP_DRAWING_POLYLINE; 45 break; 46 } 47 case 'rectangle': { 48 var drawingType = BMAP_DRAWING_RECTANGLE; 49 break; 50 } 51 case 'polygon': { 52 var drawingType = BMAP_DRAWING_POLYGON; 53 break; 54 } 55 case 'circle': { 56 var drawingType = BMAP_DRAWING_CIRCLE; 57 break; 58 } 59 } 60 // 进行绘制 61 if (drawingManager._isOpen && drawingManager.getDrawingMode() === drawingType) { 62 drawingManager.close(); 63 } else { 64 drawingManager.setDrawingMode(drawingType); 65 drawingManager.open(); 66 } 67 }; 68 }
3. 使用绘制工具制作的测量工具
1 /** 2 * 面积测量 3 */ 4 function addAreaMeasure() { 5 var styleOptions = { 6 strokeColor: '#5E87DB', // 边线颜色 7 fillColor: '#5E87DB', // 填充颜色。当参数为空时,圆形没有填充颜色 8 strokeWeight: 2, // 边线宽度,以像素为单位 9 strokeOpacity: 1, // 边线透明度,取值范围0-1 10 fillOpacity: 0.2 // 填充透明度,取值范围0-1 11 }; 12 var labelOptions = { 13 borderRadius: '2px', 14 background: '#FFFBCC', 15 border: '1px solid #E1E1E1', 16 color: '#703A04', 17 fontSize: '12px', 18 letterSpacing: '0', 19 padding: '5px' 20 }; 21 22 // 实例化鼠标绘制工具 23 var drawingManager = new BMapGLLib.DrawingManager(map, { 24 enableCalculate: true, // 绘制是否进行测距测面 25 enableSorption: true, // 是否开启边界吸附功能 26 sorptiondistance: 20, // 边界吸附距离 27 enableGpc: true, // 是否开启延边裁剪功能 28 enableLimit: true, // 是否开启超限提示 29 limitOptions: { 30 area: 50000000, // 面积超限值 31 distance: 30000 // 距离超限值 32 }, 33 circleOptions: styleOptions, // 圆的样式 34 polylineOptions: styleOptions, // 线的样式 35 polygonOptions: styleOptions, // 多边形的样式 36 rectangleOptions: styleOptions, // 矩形的样式 37 labelOptions: labelOptions, // label样式 38 }); 39 40 function draw(e) { 41 var arr = document.getElementsByClassName('bmap-btn'); 42 for(var i = 0; i<arr.length; i++) { 43 arr[i].style.backgroundPositionY = '0'; 44 } 45 e.style.backgroundPositionY = '-52px'; 46 switch(e.id) { 47 case 'marker': { 48 var drawingType = BMAP_DRAWING_MARKER; 49 break; 50 } 51 case 'polyline': { 52 var drawingType = BMAP_DRAWING_POLYLINE; 53 break; 54 } 55 case 'rectangle': { 56 var drawingType = BMAP_DRAWING_RECTANGLE; 57 break; 58 } 59 case 'polygon': { 60 var drawingType = BMAP_DRAWING_POLYGON; 61 break; 62 } 63 case 'circle': { 64 var drawingType = BMAP_DRAWING_CIRCLE; 65 break; 66 } 67 } 68 // 进行绘制 69 if (drawingManager._isOpen && drawingManager.getDrawingMode() === drawingType) { 70 drawingManager.close(); 71 } else { 72 drawingManager.setDrawingMode(drawingType); 73 drawingManager.open(); 74 } 75 }; 76 77 // 绘制完成后获取相关的信息(面积等) 78 drawingManager.addEventListener('overlaycomplete', function(e) { 79 alert(e.calculate); 80 }); 81 }
4. 其中 2 和 3 都是使用了 BMapGLLib.DrawingManager 的方式。更多请参考:
https://github.com/huiyan-fe/BMapGLLib
5. 页面显示:
6. 源码地址