百度地图(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. 源码地址

https://github.com/WhatGIS/bdMap

原文地址:https://www.cnblogs.com/googlegis/p/14708373.html