From c2e36c45578e63ad17c5e258c92d62d9ae03dadb Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 30 五月 2025 11:55:52 +0800 Subject: [PATCH] Merge branch 'master' of ssh://114.215.109.124:29418/underway-vue --- src/utils/map/sector.js | 191 +++++++++++++++++++++++++++++++++-------------- 1 files changed, 135 insertions(+), 56 deletions(-) diff --git a/src/utils/map/sector.js b/src/utils/map/sector.js index 0e3ced6..f409e4d 100644 --- a/src/utils/map/sector.js +++ b/src/utils/map/sector.js @@ -1,12 +1,16 @@ import { map, object3Dlayer } from './index_old'; import calculate from './calculate'; import imgLocation from '@/assets/mipmap/location.png'; +import { FactorDatas } from '@/model/FactorDatas'; var _defaultDeg = 30, _sector = undefined, _sectorViews = new Map(), // 鍔ㄧ敾杞ㄨ抗 _sectorViewsAna = new Map(); + +var _ptSector = undefined, + _ptSectorViews = new Map(); const zoomStyleMapping = { 14: 0, @@ -76,7 +80,7 @@ content: content, offset: [-35, 0], position: 'BM', - minZoom: 15 + minZoom: 10 } } ], @@ -106,7 +110,17 @@ }); } -function drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2) { +function drawSectorMesh( + sDeg, + eDeg, + lnglat, + distance, + distance2, + isPollutinTrace +) { + if (distance == 0 || distance2 == 0) { + return false; + } // eslint-disable-next-line no-undef var sector = new AMap.Object3D.Mesh(); sector.transparent = true; @@ -124,73 +138,92 @@ var angle1 = sDeg + unitDeg * i; var angle2 = sDeg + unitDeg * (i + 1); - var l1 = calculate.getLatLon(lnglat, distance, angle1); - var l2 = calculate.getLatLon(lnglat, distance, angle2); - var l3 = calculate.getLatLon(lnglat, distance2, angle1); - var l4 = calculate.getLatLon(lnglat, distance2, angle2); + var p1 = calculate.getLatLon(lnglat, distance, angle1); + var p2 = calculate.getLatLon(lnglat, distance, angle2); + var p3 = calculate.getLatLon(lnglat, distance2, angle1); + var p4 = calculate.getLatLon(lnglat, distance2, angle2); - var coors = calculate.lngLatToGeodeticCoord([l1, l2, l3, l4]); - l1 = coors[0]; - l2 = coors[1]; - l3 = coors[2]; - l4 = coors[3]; + var coors = calculate.lngLatToGeodeticCoord([p1, p2, p3, p4]); + const l1 = coors[0]; + const l2 = coors[1]; + const l3 = coors[2]; + const l4 = coors[3]; // 鍐呮祴鎵囧舰 geometry.vertices.push(p0.x, p0.y, 0); geometry.vertices.push(l3.x, l3.y, 0); geometry.vertices.push(l4.x, l4.y, 0); - // 澶栦晶鎵囧舰 - geometry.vertices.push(l3.x, l3.y, 0); - geometry.vertices.push(l4.x, l4.y, 0); - geometry.vertices.push(l1.x, l1.y, 0); - geometry.vertices.push(l2.x, l2.y, 0); + if (!isPollutinTrace) { + // 鍐呮祴鎵囧舰棰滆壊 + geometry.vertexColors.push(1, 0.11, 0.25, 0.6); + geometry.vertexColors.push(1, 0.11, 0.25, 0.6); + geometry.vertexColors.push(1, 0.11, 0.25, 0.6); + } else { + geometry.vertexColors.push(0.25, 0.11, 1, 0.6); + geometry.vertexColors.push(0.25, 0.11, 1, 0.6); + geometry.vertexColors.push(0.25, 0.11, 1, 0.6); + } + + if (!isPollutinTrace) { + // 澶栦晶鎵囧舰 + geometry.vertices.push(l3.x, l3.y, 0); + geometry.vertices.push(l4.x, l4.y, 0); + geometry.vertices.push(l1.x, l1.y, 0); + geometry.vertices.push(l2.x, l2.y, 0); + //澶栦晶鎵囧舰棰滆壊 + geometry.vertexColors.push(1, 0.37, 0.07, 0.5); + geometry.vertexColors.push(1, 0.37, 0.07, 0.5); + geometry.vertexColors.push(1, 0.37, 0.07, 0.5); + geometry.vertexColors.push(1, 0.37, 0.07, 0.5); + } // console.log(l3.x + ',' + l3.y + ' | ' + l1.x + ',' + l1.y); - // 鍐呮祴鎵囧舰棰滆壊 - geometry.vertexColors.push(1, 0.11, 0.25, 0.6); - geometry.vertexColors.push(1, 0.11, 0.25, 0.6); - geometry.vertexColors.push(1, 0.11, 0.25, 0.6); - //澶栦晶鎵囧舰棰滆壊 - geometry.vertexColors.push(1, 0.37, 0.07, 0.5); - geometry.vertexColors.push(1, 0.37, 0.07, 0.5); - geometry.vertexColors.push(1, 0.37, 0.07, 0.5); - geometry.vertexColors.push(1, 0.37, 0.07, 0.5); - - var index = i * 7; - geometry.faces.push(index, index + 1, index + 2); - geometry.faces.push(index + 3, index + 4, index + 5); - geometry.faces.push(index + 4, index + 5, index + 6); + if (!isPollutinTrace) { + const index = i * 7; + geometry.faces.push(index, index + 1, index + 2); + geometry.faces.push(index + 3, index + 4, index + 5); + geometry.faces.push(index + 4, index + 5, index + 6); + } else { + const index = i * 3; + geometry.faces.push(index, index + 1, index + 2); + // geometry.faces.push(index + 3, index + 4, index + 5); + // geometry.faces.push(index + 4, index + 5, index + 6); + } } object3Dlayer.add(sector); - _sector = sector; + isPollutinTrace ? (_ptSector = sector) : (_sector = sector); + return true; } -function drawTextMaker(list, list2, distance, distance2) { +function drawTextMaker(list, list2, distance, distance2, isPollutinTrace) { + const _sectorViewsTmp = isPollutinTrace ? _ptSectorViews : _sectorViews; //10鍒嗛挓鎵囧舰 - const a = _sectorViews.get('text10-t'); - if (a == undefined) { - const text10t = textMaker(list[2], '10鍒嗛挓'); - _sectorViews.set('text10-t', text10t); - const textM10t = textMaker(list[1], distance + 'm'); - _sectorViews.set('textM10-t', textM10t); - map.add([text10t, textM10t]); - } else { - _sectorViews.get('text10-t').setPosition(list[2]); - _sectorViews.get('textM10-t').setPosition(list[1]); - _sectorViews.get('textM10-t').setText(distance + 'm'); + if (!isPollutinTrace) { + const a = _sectorViewsTmp.get('text10-t'); + if (a == undefined) { + const text10t = textMaker(list[2], '10鍒嗛挓'); + _sectorViewsTmp.set('text10-t', text10t); + const textM10t = textMaker(list[1], distance + 'm'); + _sectorViewsTmp.set('textM10-t', textM10t); + map.add([text10t, textM10t]); + } else { + _sectorViewsTmp.get('text10-t').setPosition(list[2]); + _sectorViewsTmp.get('textM10-t').setPosition(list[1]); + _sectorViewsTmp.get('textM10-t').setText(distance + 'm'); + } } //5鍒嗛挓鎵囧舰 - const b = _sectorViews.get('text5-t'); + const b = _sectorViewsTmp.get('text5-t'); if (b == undefined) { const text5t = textMaker(list2[1], '5鍒嗛挓'); - _sectorViews.set('text5-t', text5t); + _sectorViewsTmp.set('text5-t', text5t); const textM5t = textMaker(list2[0], distance2 + 'm'); - _sectorViews.set('textM5-t', textM5t); + _sectorViewsTmp.set('textM5-t', textM5t); map.add([text5t, textM5t]); } else { - _sectorViews.get('text5-t').setPosition(list2[1]); - _sectorViews.get('textM5-t').setPosition(list2[0]); - _sectorViews.get('textM5-t').setText(distance2 + 'm'); + _sectorViewsTmp.get('text5-t').setPosition(list2[1]); + _sectorViewsTmp.get('textM5-t').setPosition(list2[0]); + _sectorViewsTmp.get('textM5-t').setText(distance2 + 'm'); } } @@ -211,6 +244,9 @@ } export default { + /** + * 娓呯┖鎵囧舰鍜屾枃鏈爣璁� + */ clearSector() { var list = []; for (const iterator of _sectorViews) { @@ -225,26 +261,69 @@ } this.clearSectorMesh(); }, + clearSectorPt() { + var list = []; + for (const iterator of _ptSectorViews) { + list.push(iterator[1]); + } + if (list.length > 0) { + map.remove(list); + _ptSectorViews.clear(); + } + if (_ptSector) { + object3Dlayer.remove(_ptSector); + } + }, + /** + * 鍙竻绌烘墖褰� + */ clearSectorMesh() { if (_sector) { object3Dlayer.remove(_sector); } }, + sectorParams: sectorParams, + /** + * 缁樺埗鎵囧舰 + * @param {FactorDatas} fDatas + * @param {number} i + * @returns 鏁版嵁鍧愭爣鐐瑰拰鎵囧舰鏈�澶у崐寰� + */ drawSector(fDatas, i) { - if (_sector != undefined) { - this.clearSector(); - } + this.clearSector(); const { sDeg, eDeg, lnglat, distance, distance2, list, list2 } = sectorParams(fDatas, i); - drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2); - drawElasticMarker(list, list2, distance, distance2); + if (drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2)) { + // 褰撻閫熷ぇ浜�0缁樺埗浜嗘墖褰㈡椂锛屾墠缁樺埗瀵瑰簲鐨勮窛绂荤瓑鏂囨湰鏍囪 + // drawElasticMarker(list, list2, distance, distance2); + drawTextMaker(list, list2, distance, distance2); + } + return { p: lnglat, r: distance }; }, + /** + * 缁樺埗杞ㄨ抗鍔ㄧ敾涓殑鎵囧舰 + * @param {FactorDatas} fDatas + * @param {number} i + */ drawSectorAna(fDatas, i) { this.clearSectorMesh(); const { sDeg, eDeg, lnglat, distance, distance2, list, list2 } = sectorParams(fDatas, i); - drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2); - drawTextMaker(list, list2, distance, distance2); + if (drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2)) { + drawTextMaker(list, list2, distance, distance2); + } + }, + + drawSectorPt(fDatas, i) { + if (_ptSector) { + object3Dlayer.remove(_ptSector); + } + const { sDeg, eDeg, lnglat, distance, distance2, list, list2 } = + sectorParams(fDatas, i); + if (drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2, true)) { + drawTextMaker(list, list2, distance, distance2, true); + } + return { p: lnglat, r: distance }; } }; -- Gitblit v1.9.3