From 026f17ebafb85250d9ae9b71b80ae5f07341c172 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期四, 15 五月 2025 16:33:12 +0800 Subject: [PATCH] 动态溯源功能初步完成 --- src/utils/map/sector.js | 131 ++++++++++++++++++++++++++++++------------- 1 files changed, 92 insertions(+), 39 deletions(-) diff --git a/src/utils/map/sector.js b/src/utils/map/sector.js index 25ae2d5..f409e4d 100644 --- a/src/utils/map/sector.js +++ b/src/utils/map/sector.js @@ -9,6 +9,9 @@ // 鍔ㄧ敾杞ㄨ抗 _sectorViewsAna = new Map(); +var _ptSector = undefined, + _ptSectorViews = new Map(); + const zoomStyleMapping = { 14: 0, 15: 0, @@ -107,7 +110,14 @@ }); } -function drawSectorMesh(sDeg, eDeg, lnglat, distance, distance2) { +function drawSectorMesh( + sDeg, + eDeg, + lnglat, + distance, + distance2, + isPollutinTrace +) { if (distance == 0 || distance2 == 0) { return false; } @@ -143,59 +153,77 @@ 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'); } } @@ -232,6 +260,19 @@ _sectorViews.clear(); } 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); + } }, /** * 鍙竻绌烘墖褰� @@ -272,5 +313,17 @@ 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