// import L from 'leaflet' // import 'leaflet-clipper/dist/L.Clipper' // import * as turf from '@turf/turf' import config from '@/utils/map/sub/config' import global from '@/utils/map/sub/global' var toggleFlag = false export default { cpMarkLayerGroup: null, // 检查点标记图层组 cpMemoLayerGroup: null, // 检查点备注图层组 cpPathLayerGroup: null, // 检查点路线图层组 init() { this.cpMarkLayerGroup = new L.featureGroup() this.cpMemoLayerGroup = new L.featureGroup() this.cpPathLayerGroup = new L.featureGroup() }, // 即将开始地图缩放时触发本方法 onZoomStart(e) { // this.cpMarkLayerGroup.remove() this.cpMemoLayerGroup.remove() this.cpPathLayerGroup.remove() }, // 地图发生缩放时触发本方法 onZoom(e) {}, // 地图缩放结束时触发本方法 onZoomEnd(e) { if (toggleFlag) { this.drawAllPath() // this.cpMarkLayerGroup.addTo(global.map) this.cpMemoLayerGroup.addTo(global.map) this.cpPathLayerGroup.addTo(global.map) this.cpMarkLayerGroup.bringToBack() this.cpMemoLayerGroup.bringToBack() this.cpPathLayerGroup.bringToBack() } }, toggle(flag) { // console.log('toggle:', flag) if (flag != null) { toggleFlag = !flag } if (toggleFlag) { this.cpMarkLayerGroup.removeFrom(global.map) this.cpMemoLayerGroup.removeFrom(global.map) this.cpPathLayerGroup.removeFrom(global.map) toggleFlag = false } else { this.cpMarkLayerGroup.addTo(global.map) this.cpMemoLayerGroup.addTo(global.map) this.cpPathLayerGroup.addTo(global.map) this.cpMarkLayerGroup.bringToBack() this.cpMemoLayerGroup.bringToBack() this.cpPathLayerGroup.bringToBack() toggleFlag = true } }, drawAllRoutes() { // console.log("[drawAllRoutes] routes", global.routes) if (this.cpMarkLayerGroup != null) this.cpMarkLayerGroup.clearLayers() if (this.cpMemoLayerGroup != null) this.cpMemoLayerGroup.clearLayers() for (let i = 0; i < global.routes.length; i++) { this.drawOneRoute(global.routes[i].id) } }, drawOneRoute(rtId) { // var that = this var cpList = global.getRouteById(rtId).controlPointSortedListList if (cpList == null) { console.warn('[drawOneRoute] 关键数据为空', cpList) return } // console.warn('[drawOneRoute] cpList', cpList) for (var i = 0; i < cpList.length; i++) { let res = this.drawOnePoint(cpList[i]) cpList[i].marker = res.marker cpList[i].markerMemo = res.markerMemo } }, drawOnePoint(data) { // console.warn('[drawOnePoint] data', data) if (data == null) { console.warn('[drawOnePoint] 关键数据为空', data) return } var position = data.ciposition var marker = L.circleMarker([position.latitude, position.longitude], config.gStyle.checkPoint.default) .addTo(this.cpMarkLayerGroup) // .addTo(global.map) // .bindPopup("Hello, I'm a Marker!
").openPopup(); // .bindTooltip(`检查点:${route.serial_num}`, config.gStyle.checkPoint.tooltip) var myIcon = L.divIcon({ html: '
' + data.sn + '
', className: 'my-div-icon', iconSize: [60, 20], //宽高 iconAnchor: [30, 35] //文字标注相对位置 }); var markerMemo = L.marker([position.latitude, position.longitude], { icon: myIcon, // zIndexOffset: -100 }) .addTo(this.cpMemoLayerGroup) // this.cpMarkLayerGroup.addTo(global.map) // this.cpMemoLayerGroup.addTo(global.map) this.cpMarkLayerGroup.bringToBack() this.cpMemoLayerGroup.bringToBack() return { marker: marker, markerMemo: markerMemo } }, drawAllPath() { // console.log("[drawAllPath] routes", global.routes) if (this.cpPathLayerGroup != null) { this.cpPathLayerGroup.clearLayers() } for (let i = 0; i < global.routes.length; i++) { this.drawOnePath(global.routes[i].id) } }, drawOnePath(rtId) { var cpList = global.getRouteById(rtId).controlPointSortedListList // console.log("[drawOnePath] cpList", cpList) var latlngs = [] for (var i = 0; i < cpList.length; i++) { var position = cpList[i].ciposition if (position.latitude != null && position.longitude != null) { latlngs.push([position.latitude, position.longitude]) } } var radius = config.gStyle.checkPoint.default.radius // var Lines = this.getIntersection(latlngs, radius) // 获取(圆与路线的)交叉点坐标 // // var polyline = L.polyline(latlngs, config.gStyle.checkPointPath.default) // var polyline = L.polyline(Lines, config.gStyle.checkPointPath.default) // .addTo(this.cpPathLayerGroup) // // this.cpPathLayerGroup.addTo(global.map) // this.cpPathLayerGroup.bringToBack() }, // 获取(圆与路线的)交叉点坐标 getIntersection(LatLngArry, radius) { // var LatLngArry = [ // [36.672562, 117.127572], // [36.67165, 117.129262], // [36.671409, 117.126752] // ] var PointArry = [] // var Circles = [] var radius = 20 // 圆的半径 px var DistanceArry = [] var Lines = [] for (let i = 0; i < LatLngArry.length; i++) { // 给定地理坐标,返回相应的像素坐标 (相对于原点像素) let point = global.map.latLngToLayerPoint(LatLngArry[i]) PointArry.push(point) // let circle = L.circle(LatLngArry[i], { // radius: radius // }).addTo(global.map); // Circles.push(circle) if (i > 0) { // 计算相邻两个点之间的距离 let distance = L.point(PointArry[i]).distanceTo(L.point(PointArry[i - 1])) DistanceArry.push(distance) // 计算圆半径占比 let per = parseFloat(radius.toFixed(16) / distance.toFixed(16)).toFixed(16) // console.log('per:', per, i) // console.log('PointArry:', PointArry[i]) let offsetX = parseFloat((PointArry[i].x.toFixed(16) - PointArry[i - 1].x.toFixed(16)) * per).toFixed( 16) let offsetY = parseFloat((PointArry[i].y.toFixed(16) - PointArry[i - 1].y.toFixed(16)) * per).toFixed( 16) // console.log('offset:', offsetX, offsetY) // 给定相对于原点像素的像素坐标, 返回相应的地理坐标(对于当前缩放级别) let line = [ global.map.layerPointToLatLng([ parseFloat(PointArry[i - 1].x) + parseFloat(offsetX), parseFloat(PointArry[i - 1].y) + parseFloat(offsetY) ]), global.map.layerPointToLatLng([ parseFloat(PointArry[i].x) - parseFloat(offsetX), parseFloat(PointArry[i].y) - parseFloat(offsetY) ]) ] Lines.push(line) } } // console.log('DistanceArry', DistanceArry) // console.log('Lines', Lines) // var polyline = L.polyline(Lines, config.gStyle.checkPointPath.default).addTo(global.map) return Lines }, test() {}, free() {} }