import { map } from './index_old'; import calculate from './calculate'; import { getHexColor } from '../color'; var defaultPolylineArr = []; const lineMap = new Map(); function newPolyline(path, color) { // eslint-disable-next-line no-undef return new AMap.Polyline({ path: path, // strokeStyle: 'solid', strokeStyle: 'dashed', isOutline: true, borderWeight: 1, outlineColor: 'white', strokeWeight: 4, // 线条宽度,默认为 1 strokeColor: color, // 线条颜色 lineJoin: 'round', // 折线拐点连接处样式 showDir: true }); } function drawDirection(path) { const polyline = newPolyline(path, '#ffd82a'); map.add(polyline); return polyline; } export default { drawLine(fDatas, factor) { if (defaultPolylineArr.length > 0) { map.remove(defaultPolylineArr); defaultPolylineArr = []; } const lnglats_GD = fDatas.lnglats_GD; const colors = factor.colors; // this.hideLine(); var path = calculate.parse2LngLat(lnglats_GD); let sIndex = 0; for (let i = 1; i < path.length; i++) { var r = lnglats_GD[i]; var lastP = lnglats_GD[i - 1]; // eslint-disable-next-line no-undef var distance = AMap.GeometryUtil.distance(r, lastP); const c = colors[i]; const lastC = colors[i - 1]; if (distance > 500 || c != lastC) { let _path, _color; _path = path.slice(sIndex, i); _color = getHexColor( lastC.map((v, index) => { if (index < lastC.length - 1) { return v * 255; } else { return v; } }) ); // 当两点距离超过500时,认为两点不连续,不绘制连线 if (distance > 500) { sIndex = i; } else { sIndex = i - 1; } // 创建折线实例 const polyline = newPolyline(_path, _color); defaultPolylineArr.push(polyline); } } if (sIndex < path.length - 1) { const c = colors[path.length - 1]; const _path = path.slice(sIndex, path.length); const _color = getHexColor( c.map((v, index) => { if (index < c.length - 1) { return v * 255; } else { return v; } }) ); const polyline = newPolyline(_path, _color); defaultPolylineArr.push(polyline); } // 将折线添加至地图实例 map.add(defaultPolylineArr); return defaultPolylineArr; }, drawTagLine(tag, fDatas, factor) { if (lineMap.has(tag)) { const _polylineArr = lineMap.get(tag); map.add(_polylineArr); } else { const _polylineArr = this.drawLine(fDatas, factor); lineMap.set(tag, _polylineArr); } }, hideLine(tag) { if (tag && lineMap.has(tag)) { const _polylineArr = lineMap.get(tag); map.remove(_polylineArr); } else { lineMap.forEach((v) => { map.remove(v); }); } }, drawDirection };