From 87e19b5a396ac8fed6a551828b87d263f6425c31 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 16 十月 2025 10:26:12 +0800
Subject: [PATCH] 2025.10.16 修改季度报告生成逻辑
---
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