import L from 'leaflet';import 'leaflet-draw'/*** 案例* async ceju(){* let that = this* const p1 = await new Promise(function(resolve,reject){* let a = new Draw(that.baseMap,that.measureGroup,resolve,reject)* a.rectangle()* }); * console.log(p1);* * }, ***///new的时候须要传入map以及承接的layergroup//返回值的时候须要用异步去承接,所以采纳了promiseclass Draw{ constructor(map,measureGroup,resolve,reject){ this.map = map this.drawDataMap = [] this.stopRectArea = null this.locations = {} this.resolve = resolve this.reject = reject this.measureGroup = measureGroup this.geometry = [] } rectangle(){ let that = this console.log('开始框选'); that.map.off("click") that.map.off("dblclick") that.map.off("dblclick") if(that.stopRectArea != null){ //stopRectArea在data中定义,革除反复的拉框操作 that.map.off('mousedown', that.stopRectArea.mousedown); } var rectangleMeasure = { startPoint: null, endPoint: null, rectangle:null, layer: that.measureGroup, color: "rgba(51,136,255,1)", addRectangle:function(){ rectangleMeasure.destory(); var bounds = []; bounds.push(rectangleMeasure.startPoint); bounds.push(rectangleMeasure.endPoint); rectangleMeasure.rectangle = L.rectangle(bounds, {color: rectangleMeasure.color, weight: 1}); rectangleMeasure.rectangle.addTo(rectangleMeasure.layer); rectangleMeasure.layer.addTo(that.map); }, mousedown: function(e){ rectangleMeasure.rectangle = null; that.map.dragging.disable(); rectangleMeasure.startPoint = e.latlng; that.map.on('mousemove',rectangleMeasure.mousemove) }, mousemove:function(e){ rectangleMeasure.endPoint = e.latlng; rectangleMeasure.addRectangle(); that.map.off('mousedown ', rectangleMeasure.mousedown).on('mouseup', rectangleMeasure.mouseup); }, mouseup: function(){ that.map.dragging.enable(); that.map.off('mousemove',rectangleMeasure.mousemove).off('mouseup', rectangleMeasure.mouseup); that.locations = {}; //locations在data中定义 that.locations['leftX'] = rectangleMeasure.startPoint.lat; that.locations['leftY'] = rectangleMeasure.startPoint.lng; that.locations['rightX'] = rectangleMeasure.endPoint.lat; that.locations['rightY'] = rectangleMeasure.endPoint.lng; that.locations['layer_id'] = rectangleMeasure.layer._leaflet_id; that.locations['layer'] = rectangleMeasure.layer; that.locations['rectangle'] = rectangleMeasure.rectangle; that.drawDataMap.push([rectangleMeasure.startPoint.lat,rectangleMeasure.startPoint.lng]) that.drawDataMap.push([rectangleMeasure.endPoint.lat,rectangleMeasure.startPoint.lng]) that.drawDataMap.push([rectangleMeasure.endPoint.lat,rectangleMeasure.endPoint.lng]) that.drawDataMap.push([rectangleMeasure.startPoint.lat,rectangleMeasure.endPoint.lng]) that.resolve(that.drawDataMap) }, destory:function(){ if(rectangleMeasure.rectangle) rectangleMeasure.layer.removeLayer(rectangleMeasure.rectangle); } }; that.stopRectArea = rectangleMeasure; //记录已点击拉框按钮,未在地图上拉框 that.map.on('mousedown', rectangleMeasure.mousedown); //在地图上拉框 } polygon(){ let that = this that.measureGroup.clearLayers() var points,lines,tempLines,node; that.map.off("mousemove") that.map.off("mousedown") that.map.off("mouseup") function drawPolygon(){ that.map.doubleClickZoom.disable(); lines = new L.polyline([]); tempLines = new L.polyline([],{ dashArray: 5 }); points = []; that.geometry = []; that.map.on('click', onClick); //点击地图 that.map.on('dblclick', onDoubleClick); that.map.on('mousemove', onMove)//双击地图 function onClick(e) { points.push([e.latlng.lat, e.latlng.lng]) lines.addLatLng(e.latlng) that.measureGroup.addLayer(tempLines) that.measureGroup.addLayer(lines) node=L.circle(e.latlng, { color: '#ff0000', fillColor: 'ff0000', fillOpacity: 1 }) that.measureGroup.addLayer(node) that.geometry.push(node) } function onMove(e) { if (points.length > 0) { let ls = [points[points.length - 1], [e.latlng.lat, e.latlng.lng], points[0]] tempLines.setLatLngs(ls) // that.map.addLayer(tempLines) } } function onDoubleClick() { that.geometry.push(L.polygon(points).addTo(that.map)) that.drawDataMap = points that.drawDataMap.splice(that.drawDataMap.length-1,1) points = []; node=null; that.map.off('click', onClick); //点击地图 that.map.off('dblclick', onDoubleClick); that.map.off('mousemove', onMove)//双击地图 that.map.doubleClickZoom.enable(); that.resolve(that.drawDataMap) } } that.removePolygon() drawPolygon() } removePolygon(){ for(let ooo of this.geometry){ ooo.remove(); } }}export default Draw