gisviewer-vue3-arcgis 1.0.109 → 1.0.111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,7 +27,10 @@ declare const _sfc_main: import("vue").DefineComponent<{
27
27
  overlay: Overlay;
28
28
  queueLength: QueueLength;
29
29
  openDriveRenderer: OpenDriveRenderer;
30
+ showLogDiv: import("vue").Ref<boolean>;
30
31
  mapViewer: import("vue").ComputedRef<MapView | SceneView>;
32
+ startSaveTrackLog: () => void;
33
+ downloadTrackLog: () => void;
31
34
  setMapCenter: (params: ISetMapCenterParams) => Promise<import("../types").IResult>;
32
35
  setMapCamera: (params: ISetMapCameraParams) => Promise<import("../types").IResult>;
33
36
  lookAt: (params: ILookAtParams) => Promise<void>;
@@ -1,122 +1,141 @@
1
- import { defineComponent as ae, ref as ne, onMounted as oe, getCurrentInstance as re, computed as se, openBlock as ce, createElementBlock as ie, createElementVNode as le } from "vue";
2
- import me, { registerStore as pe } from "./stores/index.mjs";
1
+ import { defineComponent as ie, ref as h, onMounted as le, getCurrentInstance as pe, computed as me, openBlock as ue, createElementBlock as de, createElementVNode as m, withDirectives as fe, vShow as ge } from "vue";
2
+ import C, { registerStore as we } from "./stores/index.mjs";
3
3
  import "./style/index.css";
4
- import ue from "./utils/holo-flow/index.mjs";
5
- import fe from "./utils/map-initializer.mjs";
6
- import ge from "./utils/open-drive-renderer/index.mjs";
7
- import de from "./utils/overlay.mjs";
8
- import we from "./utils/queue-length.mjs";
9
- import y from "./utils/road-config-tool/index.mjs";
10
- import ye from "./utils/traffic-flow.mjs";
11
- const Ce = { class: "gis-viewer" }, Se = /* @__PURE__ */ ae({
4
+ import ve from "./utils/holo-flow/index.mjs";
5
+ import ye from "./utils/map-initializer.mjs";
6
+ import he from "./utils/open-drive-renderer/index.mjs";
7
+ import Ce from "./utils/overlay.mjs";
8
+ import ke from "./utils/queue-length.mjs";
9
+ import k from "./utils/road-config-tool/index.mjs";
10
+ import Te from "./utils/traffic-flow.mjs";
11
+ const Oe = { class: "gis-viewer" }, Le = { style: { position: "absolute", bottom: "10px", left: "10px" } }, Be = /* @__PURE__ */ ie({
12
12
  __name: "gis-map",
13
13
  props: {
14
14
  config: {},
15
15
  assetsRoot: {}
16
16
  },
17
17
  emits: ["mapLoaded", "markerClick", "mapClick"],
18
- setup(C, { expose: h, emit: v }) {
19
- const m = ne(null);
20
- let r, s, a, n, o, t, i, l;
21
- pe(), oe(async () => {
22
- if (!m.value)
18
+ setup(T, { expose: O, emit: L }) {
19
+ const u = h(null);
20
+ let r, s, o, a, n, t, i, l;
21
+ const d = h(!1);
22
+ we(), le(async () => {
23
+ if (!u.value)
23
24
  return;
24
- const e = re(), { $gisviewerAssetsRoot: c } = e.appContext.config.globalProperties, w = await (await fetch(d.config)).json();
25
- w.assetsRoot = d.assetsRoot || c;
26
- const ee = me.useAppDataStore;
27
- ee.mapConfig = w, s = new fe(), r = await s.initialize({
28
- container: m.value,
29
- markerClickCallback: (u, f, g, te) => {
30
- p("markerClick", u, f, g, te);
25
+ document.addEventListener("keydown", (p) => {
26
+ p.ctrlKey && p.key === "i" && (d.value = !d.value);
27
+ });
28
+ const e = pe(), { $gisviewerAssetsRoot: c } = e.appContext.config.globalProperties, y = await (await fetch(v.config)).json();
29
+ y.assetsRoot = v.assetsRoot || c;
30
+ const se = C.useAppDataStore;
31
+ se.mapConfig = y, s = new ye(), r = await s.initialize({
32
+ container: u.value,
33
+ markerClickCallback: (p, g, w, ce) => {
34
+ f("markerClick", p, g, w, ce);
31
35
  },
32
- mapClickCallback: (u, f, g) => {
33
- p("mapClick", u, f, g);
36
+ mapClickCallback: (p, g, w) => {
37
+ f("mapClick", p, g, w);
34
38
  }
35
- }), o = new ue(r), await o.init(), p("mapLoaded");
39
+ }), n = new ve(r), await n.init(), f("mapLoaded");
36
40
  });
37
- const O = se(() => r), T = async (e) => await s.setMapCenter(e), k = async (e) => await s.setMapCamera(e), I = async (e) => await s.lookAt(e), b = (e) => s.setLayerVisibility(e), A = (e, c) => s.requestCoordinateTransform(e, c), L = (e) => {
41
+ const b = me(() => r), I = () => {
42
+ const e = C.useAppDataStore;
43
+ e.saveTrackLog = !0;
44
+ }, D = () => {
45
+ n.downloadTrackLog();
46
+ }, A = async (e) => await s.setMapCenter(e), S = async (e) => await s.setMapCamera(e), _ = async (e) => await s.lookAt(e), x = (e) => s.setLayerVisibility(e), M = (e, c) => s.requestCoordinateTransform(e, c), R = (e) => {
38
47
  s.cancelCoordinateTransform(e);
39
- }, D = (e) => {
48
+ }, V = (e) => {
40
49
  s.setMapZoomRange(e);
41
- }, S = (e) => (a || (a = new y(r)), a.showLaneNumber(e)), _ = () => {
42
- a == null || a.clearLaneNumber();
43
- }, M = async (e) => (a || (a = new y(r)), await a.initializeSearch(e)), R = async () => a == null ? void 0 : a.calCrossIndicatorArea(), V = async () => {
44
- }, x = async (e, c) => {
45
- n || (n = new ye(r)), n.connectTrafficFlow(e, c);
46
- }, B = () => {
47
- n == null || n.disconnectTrafficFlow();
48
- }, H = (e) => {
49
- o.handleVehicleTraceData(e);
50
- }, z = () => {
51
- o.clearHoloTrace();
52
- }, N = (e) => {
53
- o.setInterpolate(e);
54
- }, Q = async (e) => {
55
- await o.handleSignalData(e);
56
- }, j = () => {
57
- o.clearHoloSignal();
58
- }, P = (e) => {
59
- n == null || n.toggleTrafficInfo(e), o.toggleTrafficInfo(e);
50
+ }, B = (e) => (o || (o = new k(r)), o.showLaneNumber(e)), H = () => {
51
+ o == null || o.clearLaneNumber();
52
+ }, z = async (e) => (o || (o = new k(r)), await o.initializeSearch(e)), N = async () => o == null ? void 0 : o.calCrossIndicatorArea(), Q = async () => {
53
+ }, j = async (e, c) => {
54
+ a || (a = new Te(r)), a.connectTrafficFlow(e, c);
55
+ }, P = () => {
56
+ a == null || a.disconnectTrafficFlow();
60
57
  }, E = (e) => {
61
- o.togglePause(e);
62
- }, Z = (e) => {
63
- n == null || n.toggleTrafficObject(e), o.toggleTrafficObject(e);
58
+ n.handleVehicleTraceData(e);
59
+ }, Z = () => {
60
+ n.clearHoloTrace();
64
61
  }, q = (e) => {
65
- o.updatePanelContent(e);
66
- }, F = async (e) => (t || (t = new de(r)), t.addOverlays(e)), $ = (e) => t == null ? void 0 : t.removeOverlaysByType(e), G = (e) => t == null ? void 0 : t.removeOverlaysById(e), J = () => t == null ? void 0 : t.removeAllOverlays(), K = () => {
67
- t == null || t.showAllOverlays();
62
+ n.setInterpolate(e);
63
+ }, F = async (e) => {
64
+ await n.handleSignalData(e);
65
+ }, K = () => {
66
+ n.clearHoloSignal();
67
+ }, $ = (e) => {
68
+ a == null || a.toggleTrafficInfo(e), n.toggleTrafficInfo(e);
69
+ }, G = (e) => {
70
+ n.togglePause(e);
71
+ }, J = (e) => {
72
+ a == null || a.toggleTrafficObject(e), n.toggleTrafficObject(e);
68
73
  }, U = (e) => {
69
- i || (i = new we(r)), i.updateQueueLength(e);
70
- }, W = () => {
74
+ n.updatePanelContent(e);
75
+ }, W = async (e) => (t || (t = new Ce(r)), t.addOverlays(e)), X = (e) => t == null ? void 0 : t.removeOverlaysByType(e), Y = (e) => t == null ? void 0 : t.removeOverlaysById(e), ee = () => t == null ? void 0 : t.removeAllOverlays(), te = () => {
76
+ t == null || t.showAllOverlays();
77
+ }, oe = (e) => {
78
+ i || (i = new ke(r)), i.updateQueueLength(e);
79
+ }, ae = () => {
71
80
  i == null || i.removeQueueLength();
72
- }, X = async (e, c) => {
73
- l || (l = new ge(r)), await l.showOpenDrive(e, c);
74
- }, Y = async () => {
81
+ }, ne = async (e, c) => {
82
+ l || (l = new he(r)), await l.showOpenDrive(e, c);
83
+ }, re = async () => {
75
84
  await (l == null ? void 0 : l.hideOpenDrive());
76
- }, d = C, p = v;
77
- return h({
78
- mapViewer: O,
79
- setLayerVisibility: b,
80
- setMapCenter: T,
81
- lookAt: I,
82
- setMapCamera: k,
83
- setMapZoomRange: D,
84
- requestCoordinateTransform: A,
85
- cancelCoordinateTransform: L,
86
- addOverlays: F,
87
- showAllOverlays: K,
88
- removeOverlaysByType: $,
89
- removeOverlaysById: G,
90
- removeAllOverlays: J,
91
- showLaneNumber: S,
92
- clearLaneNumber: _,
93
- initializeAreaTool: M,
94
- calCrossIndicatorArea: R,
95
- calRoadIndicatorArea: V,
96
- connectCarFlow: x,
97
- disconnectCarFlow: B,
98
- handleHoloVehicleTraceData: H,
99
- clearHoloTrace: z,
100
- handleHoloSignalData: Q,
101
- clearHoloSignal: j,
102
- setInterpolate: N,
103
- toggleTrafficInfo: P,
104
- toggleTrafficObject: Z,
105
- toggleVehicleInfo: q,
106
- togglePause: E,
107
- updateQueueLength: U,
108
- removeQueueLength: W,
109
- showOpenDrive: X,
110
- hideOpenDrive: Y
111
- }), (e, c) => (ce(), ie("div", Ce, [
112
- le("div", {
85
+ }, v = T, f = L;
86
+ return O({
87
+ mapViewer: b,
88
+ setLayerVisibility: x,
89
+ setMapCenter: A,
90
+ lookAt: _,
91
+ setMapCamera: S,
92
+ setMapZoomRange: V,
93
+ requestCoordinateTransform: M,
94
+ cancelCoordinateTransform: R,
95
+ addOverlays: W,
96
+ showAllOverlays: te,
97
+ removeOverlaysByType: X,
98
+ removeOverlaysById: Y,
99
+ removeAllOverlays: ee,
100
+ showLaneNumber: B,
101
+ clearLaneNumber: H,
102
+ initializeAreaTool: z,
103
+ calCrossIndicatorArea: N,
104
+ calRoadIndicatorArea: Q,
105
+ connectCarFlow: j,
106
+ disconnectCarFlow: P,
107
+ handleHoloVehicleTraceData: E,
108
+ clearHoloTrace: Z,
109
+ handleHoloSignalData: F,
110
+ clearHoloSignal: K,
111
+ setInterpolate: q,
112
+ toggleTrafficInfo: $,
113
+ toggleTrafficObject: J,
114
+ toggleVehicleInfo: U,
115
+ togglePause: G,
116
+ updateQueueLength: oe,
117
+ removeQueueLength: ae,
118
+ showOpenDrive: ne,
119
+ hideOpenDrive: re
120
+ }), (e, c) => (ue(), de("div", Oe, [
121
+ m("div", {
113
122
  class: "gis-viewer-main",
114
123
  ref_key: "mapContainer",
115
- ref: m
116
- }, null, 512)
124
+ ref: u
125
+ }, [
126
+ fe(m("div", Le, [
127
+ m("button", {
128
+ style: { "margin-right": "10px" },
129
+ onClick: I
130
+ }, " 开始记录 "),
131
+ m("button", { onClick: D }, "下载日志")
132
+ ], 512), [
133
+ [ge, d.value]
134
+ ])
135
+ ], 512)
117
136
  ]));
118
137
  }
119
138
  });
120
139
  export {
121
- Se as default
140
+ Be as default
122
141
  };
@@ -17,7 +17,10 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
17
17
  overlay: import("./utils/overlay").default;
18
18
  queueLength: import("./utils/queue-length").default;
19
19
  openDriveRenderer: import("./utils/open-drive-renderer").default;
20
+ showLogDiv: import("vue").Ref<boolean>;
20
21
  mapViewer: import("vue").ComputedRef<__esri.MapView | __esri.SceneView>;
22
+ startSaveTrackLog: () => void;
23
+ downloadTrackLog: () => void;
21
24
  setMapCenter: (params: import("../types").ISetMapCenterParams) => Promise<import("../types").IResult>;
22
25
  setMapCamera: (params: import("../types").ISetMapCameraParams) => Promise<import("../types").IResult>;
23
26
  lookAt: (params: import("../types").ILookAtParams) => Promise<void>;
@@ -1,3 +1,4 @@
1
1
  export declare const useAppDataStore: import("pinia").StoreDefinition<"appData", {
2
2
  mapConfig: {};
3
+ saveTrackLog: boolean;
3
4
  }, {}, {}>;
@@ -1,9 +1,10 @@
1
- import { defineStore as t } from "pinia";
2
- const e = t("appData", {
1
+ import { defineStore as a } from "pinia";
2
+ const t = a("appData", {
3
3
  state: () => ({
4
- mapConfig: {}
4
+ mapConfig: {},
5
+ saveTrackLog: !1
5
6
  })
6
7
  });
7
8
  export {
8
- e as useAppDataStore
9
+ t as useAppDataStore
9
10
  };
@@ -18,4 +18,5 @@ export default class Index {
18
18
  handleSignalData(data: any): Promise<void>;
19
19
  clearHoloSignal(): void;
20
20
  setInterpolate(enable: boolean): void;
21
+ downloadTrackLog(): void;
21
22
  }
@@ -63,6 +63,9 @@ class n {
63
63
  setInterpolate(e) {
64
64
  this.traceHoloFlow.setInterpolate(e);
65
65
  }
66
+ downloadTrackLog() {
67
+ this.traceHoloFlow.downloadLog();
68
+ }
66
69
  }
67
70
  export {
68
71
  n as default
@@ -1,16 +1,14 @@
1
1
  import { EVehiclePlateState, IToggleTrafficInfoParams } from '../../../types';
2
2
  export default class TraceHoloFlow {
3
- private mapConfig;
4
- private view;
5
- private lastDataTime;
6
3
  private readonly traceRenderer;
7
4
  constructor(view: __esri.View);
8
5
  init(): Promise<void>;
6
+ private appDataStore;
7
+ private logTable;
8
+ downloadLog(): void;
9
9
  /**
10
10
  * 处理全息流轨迹数据
11
11
  * */
12
- private lastLocalTimestamp;
13
- private lastDataTimestamp;
14
12
  handleVehicleTraceData(data: any): Promise<void>;
15
13
  /**
16
14
  * 切换交通信息可见性
@@ -1,57 +1,126 @@
1
- import * as d from "@arcgis/core/views/3d/externalRenderers";
2
- import T from "../../stores/index.mjs";
1
+ import * as u from "@arcgis/core/views/3d/externalRenderers";
2
+ import m from "../../stores/index.mjs";
3
3
  import g from "./trace-renderer-external.mjs";
4
- import u from "./trace-renderer-layer.mjs";
4
+ import T from "./trace-renderer-layer.mjs";
5
5
  class L {
6
- constructor(e) {
7
- this.lastDataTime = 0, this.lastLocalTimestamp = 0, this.lastDataTimestamp = 0, this.view = e;
8
- const r = T.useAppDataStore;
9
- this.mapConfig = JSON.parse(JSON.stringify(r.mapConfig)), e.type === "3d" ? (this.traceRenderer = new g(e), d.add(
10
- e,
6
+ constructor(t) {
7
+ this.appDataStore = m.useAppDataStore, this.logTable = [
8
+ [
9
+ "uuid",
10
+ "ptcId",
11
+ "plateno",
12
+ "timestamp",
13
+ "localTimestamp",
14
+ "timestamp_str",
15
+ "speed",
16
+ "laneNo",
17
+ "objHeight",
18
+ "objLength",
19
+ "latitude",
20
+ "longitude",
21
+ "ptcType",
22
+ "vehicleType",
23
+ "vehicleColor",
24
+ "plateColor",
25
+ "sbdm",
26
+ "heading",
27
+ "fixAngle",
28
+ "roadLayer",
29
+ "status",
30
+ "step"
31
+ ]
32
+ ], t.type === "3d" ? (this.traceRenderer = new g(t), u.add(
33
+ t,
11
34
  this.traceRenderer
12
- )) : this.traceRenderer = new u(e);
35
+ )) : this.traceRenderer = new T(t);
13
36
  }
14
37
  async init() {
15
38
  await this.traceRenderer.init();
16
39
  }
17
- async handleVehicleTraceData(e) {
18
- const { newVehList: r, updateVehList: o, deleteVehList: c, jgsj: n } = e, i = e.crossId || "", l = [], s = [];
40
+ downloadLog() {
41
+ const t = this.logTable.map((s) => s.join(",")).join(`
42
+ `).replace(/null/g, ""), r = new Blob([t], { type: "text/csv;charset=utf-8;" }), l = URL.createObjectURL(r), a = document.createElement("a");
43
+ a.setAttribute("href", l), a.setAttribute("download", "trace-log.csv"), a.style.visibility = "hidden", document.body.appendChild(a), a.click(), document.body.removeChild(a);
44
+ }
45
+ /**
46
+ * 处理全息流轨迹数据
47
+ * */
48
+ async handleVehicleTraceData(t) {
49
+ const { newVehList: r, updateVehList: l, deleteVehList: a, jgsj: s } = t, i = t.crossId || "", c = [], n = [];
19
50
  if (r && r.length > 0) {
20
- for (const a of r) {
21
- a.localTimestamp || (a.localTimestamp = n || Date.now());
22
- const t = this.buildVehicleTrackData(a, i);
23
- t && l.push(t);
51
+ for (const e of r) {
52
+ e.localTimestamp || (e.localTimestamp = s || Date.now());
53
+ const o = this.buildVehicleTrackData(e, i);
54
+ this.appDataStore.saveTrackLog && this.logTable.push([
55
+ e.uuid,
56
+ e.ptcId,
57
+ e.plateno,
58
+ e.timestamp,
59
+ e.localTimestamp,
60
+ e.timestamp_str,
61
+ e.speed,
62
+ e.laneNo,
63
+ e.objHeight,
64
+ e.objLength,
65
+ e.latitude,
66
+ e.longitude,
67
+ e.ptcType,
68
+ e.vehicleType,
69
+ e.vehicleColor,
70
+ e.plateColor,
71
+ e.sbdm,
72
+ e.heading,
73
+ e.fixAngle,
74
+ e.roadLayer,
75
+ e.status,
76
+ e.step
77
+ ]), o && c.push(o);
24
78
  }
25
- await this.traceRenderer.addVehicles(l);
79
+ await this.traceRenderer.addVehicles(c);
26
80
  }
27
- if (o && o.length > 0) {
28
- for (const p of o) {
29
- const h = this.buildVehicleTrackData(p, i);
30
- h && s.push(h);
81
+ if (l && l.length > 0) {
82
+ for (const e of l) {
83
+ const o = this.buildVehicleTrackData(e, i);
84
+ this.appDataStore.saveTrackLog && this.logTable.push([
85
+ e.uuid,
86
+ e.ptcId,
87
+ e.plateno,
88
+ e.timestamp,
89
+ e.localTimestamp,
90
+ e.timestamp_str,
91
+ e.speed,
92
+ e.laneNo,
93
+ e.objHeight,
94
+ e.objLength,
95
+ e.latitude,
96
+ e.longitude,
97
+ e.ptcType,
98
+ e.vehicleType,
99
+ e.vehicleColor,
100
+ e.plateColor,
101
+ e.sbdm,
102
+ e.heading,
103
+ e.fixAngle,
104
+ e.roadLayer,
105
+ e.status,
106
+ e.step
107
+ ]), o && n.push(o);
31
108
  }
32
- const a = s[0].localTimestamp - this.lastLocalTimestamp, t = s[0].timestamp - this.lastDataTimestamp;
33
- console.log(
34
- "localTimeGap",
35
- a,
36
- "timeGap",
37
- t,
38
- "delta",
39
- a - t
40
- ), this.lastLocalTimestamp = s[0].localTimestamp, this.lastDataTimestamp = s[0].timestamp, await this.traceRenderer.updateVehicles(s);
109
+ await this.traceRenderer.updateVehicles(n);
41
110
  }
42
- if (c && c.length > 0) {
43
- const a = c.map(
44
- (t) => i + "-" + (t.ptcId || t.vehno || t.vehNo)
111
+ if (a && a.length > 0) {
112
+ const e = a.map(
113
+ (o) => i + "-" + (o.ptcId || o.vehno || o.vehNo)
45
114
  );
46
- this.traceRenderer.deleteVehicles(a);
115
+ this.traceRenderer.deleteVehicles(e);
47
116
  }
48
117
  }
49
118
  /**
50
119
  * 切换交通信息可见性
51
120
  * @param params
52
121
  */
53
- toggleTrafficInfo(e) {
54
- this.traceRenderer.toggleTrafficInfo(e);
122
+ toggleTrafficInfo(t) {
123
+ this.traceRenderer.toggleTrafficInfo(t);
55
124
  }
56
125
  /**
57
126
  * 清除轨迹流
@@ -62,40 +131,40 @@ class L {
62
131
  /**
63
132
  * 切换暂停
64
133
  * */
65
- togglePause(e) {
66
- this.traceRenderer.togglePause(e);
134
+ togglePause(t) {
135
+ this.traceRenderer.togglePause(t);
67
136
  }
68
- updatePanelContent(e) {
69
- this.traceRenderer.updatePanelContent(e);
137
+ updatePanelContent(t) {
138
+ this.traceRenderer.updatePanelContent(t);
70
139
  }
71
- toggleGroundVehicle(e) {
72
- this.traceRenderer.toggleGroundVehicle(e);
140
+ toggleGroundVehicle(t) {
141
+ this.traceRenderer.toggleGroundVehicle(t);
73
142
  }
74
- toggleElevatedVehicle(e) {
75
- this.traceRenderer.toggleElevatedVehicle(e);
143
+ toggleElevatedVehicle(t) {
144
+ this.traceRenderer.toggleElevatedVehicle(t);
76
145
  }
77
- setInterpolate(e) {
78
- this.traceRenderer.setInterpolate(e);
146
+ setInterpolate(t) {
147
+ this.traceRenderer.setInterpolate(t);
79
148
  }
80
- buildVehicleTrackData(e, r) {
81
- const o = e.longitude, c = e.latitude, n = e.ptcId, i = Number(e.ptcType), l = e.heading, s = Number(e.vehicleType), a = Number(e.vehicleColor), t = e.plateNo || e.plateno, p = Number(e.plateColor), h = e.timestamp, m = e.roadLayer ? String(e.roadLayer) : "1";
149
+ buildVehicleTrackData(t, r) {
150
+ const l = t.longitude, a = t.latitude, s = t.ptcId, i = Number(t.ptcType), c = t.heading, n = Number(t.vehicleType), e = Number(t.vehicleColor), o = t.plateNo || t.plateno, p = Number(t.plateColor), d = t.timestamp, h = t.roadLayer ? String(t.roadLayer) : "1";
82
151
  if (!(i < 0 || i > 8))
83
152
  return {
84
- ptcId: n,
153
+ ptcId: s,
85
154
  crossId: r,
86
- vehicleId: r + "-" + n,
87
- x: o,
88
- y: c,
155
+ vehicleId: r + "-" + s,
156
+ x: l,
157
+ y: a,
89
158
  ptcType: i,
90
- vehicleType: s,
91
- heading: i === 2 ? -l : l,
92
- vehicleColor: a,
93
- showName: t && t !== "" && t !== "0" && t !== "000000" ? t : "",
94
- plateNo: t,
159
+ vehicleType: n,
160
+ heading: i === 2 ? -c : c,
161
+ vehicleColor: e,
162
+ showName: o && o !== "" && o !== "0" && o !== "000000" ? o : "",
163
+ plateNo: o,
95
164
  plateColor: p,
96
- timestamp: h,
165
+ timestamp: d,
97
166
  localTimestamp: Date.now(),
98
- roadLayer: m
167
+ roadLayer: h
99
168
  };
100
169
  }
101
170
  }
@@ -2,13 +2,13 @@ import * as P from "@arcgis/core/core/promiseUtils.js";
2
2
  import * as b from "@arcgis/core/core/reactiveUtils.js";
3
3
  import v from "@arcgis/core/geometry/SpatialReference";
4
4
  import * as u from "@arcgis/core/views/3d/externalRenderers";
5
- import * as n from "three";
5
+ import * as l from "three";
6
6
  import { GLTFLoader as y } from "three/examples/jsm/loaders/GLTFLoader.js";
7
7
  import { EVehiclePlateState as d } from "../../../types/index.mjs";
8
8
  import G from "../../stores/index.mjs";
9
9
  class I {
10
10
  constructor(i) {
11
- this.cameraHeightThreshold = 1e3, this.roughness = 0.2, this.metalness = 0.8, this.defaultMaterial = new n.MeshPhongMaterial({
11
+ this.cameraHeightThreshold = 1e3, this.roughness = 0.2, this.metalness = 0.8, this.defaultMaterial = new l.MeshPhongMaterial({
12
12
  color: 16777215
13
13
  }), this.materialMap = /* @__PURE__ */ new Map([
14
14
  [1, this.createCarMaterial(16777215)],
@@ -26,13 +26,7 @@ class I {
26
26
  const e = G.useAppDataStore;
27
27
  this.assetsRoot = JSON.parse(
28
28
  JSON.stringify(e.mapConfig)
29
- ).assetsRoot, this.view = i, document.addEventListener(
30
- "visibilitychange",
31
- () => {
32
- this.clearVehicles(), this.needInterpolate = !document.hidden;
33
- },
34
- !1
35
- ), b.watch(
29
+ ).assetsRoot, this.view = i, b.watch(
36
30
  () => this.view.camera.position.z,
37
31
  (t, s) => {
38
32
  (s <= this.cameraHeightThreshold && t > this.cameraHeightThreshold || s > this.cameraHeightThreshold && t <= this.cameraHeightThreshold) && (this.updateModel = !0);
@@ -40,7 +34,7 @@ class I {
40
34
  );
41
35
  }
42
36
  createCarMaterial(i) {
43
- return new n.MeshPhongMaterial({
37
+ return new l.MeshPhongMaterial({
44
38
  color: i
45
39
  // // emissive: 0xc3c3c3,
46
40
  // roughness: this.roughness,
@@ -52,27 +46,27 @@ class I {
52
46
  await P.eachAlways([
53
47
  new Promise((e) => {
54
48
  i.load(`${this.assetsRoot}/3DModels/car.glb`, (t) => {
55
- this.carModel = t.scene, this.carModel.rotation.x = n.MathUtils.degToRad(90), e();
49
+ this.carModel = t.scene, this.carModel.rotation.x = l.MathUtils.degToRad(90), e();
56
50
  });
57
51
  }),
58
52
  new Promise((e) => {
59
53
  i.load(`${this.assetsRoot}/3DModels/van.glb`, (t) => {
60
- this.vanModel = t.scene, this.vanModel.rotation.x = n.MathUtils.degToRad(90), e();
54
+ this.vanModel = t.scene, this.vanModel.rotation.x = l.MathUtils.degToRad(90), e();
61
55
  });
62
56
  }),
63
57
  new Promise((e) => {
64
58
  i.load(`${this.assetsRoot}/3DModels/truck.glb`, (t) => {
65
- this.truckModel = t.scene, this.truckModel.scale.set(1.2, 1, 1.5), this.truckModel.rotation.x = n.MathUtils.degToRad(90), e();
59
+ this.truckModel = t.scene, this.truckModel.scale.set(1.2, 1, 1.5), this.truckModel.rotation.x = l.MathUtils.degToRad(90), e();
66
60
  });
67
61
  }),
68
62
  new Promise((e) => {
69
63
  i.load(`${this.assetsRoot}/3DModels/bus.glb`, (t) => {
70
- this.busModel = t.scene, this.busModel.rotation.x = n.MathUtils.degToRad(90), e();
64
+ this.busModel = t.scene, this.busModel.rotation.x = l.MathUtils.degToRad(90), e();
71
65
  });
72
66
  }),
73
67
  new Promise((e) => {
74
68
  i.load(`${this.assetsRoot}/3DModels/bicycle.glb`, (t) => {
75
- this.bicycleModel = t.scene, this.bicycleModel.rotation.x = n.MathUtils.degToRad(90), this.bicycleModel.rotation.y = n.MathUtils.degToRad(180), e();
69
+ this.bicycleModel = t.scene, this.bicycleModel.rotation.x = l.MathUtils.degToRad(90), this.bicycleModel.rotation.y = l.MathUtils.degToRad(180), e();
76
70
  });
77
71
  }),
78
72
  new Promise((e) => {
@@ -116,7 +110,7 @@ class I {
116
110
  this.clearVehicles(), this.needInterpolate = i;
117
111
  }
118
112
  async setup(i) {
119
- this.context = i, this.renderer = new n.WebGLRenderer({
113
+ this.context = i, this.renderer = new l.WebGLRenderer({
120
114
  context: i.gl,
121
115
  premultipliedAlpha: !0,
122
116
  logarithmicDepthBuffer: !0,
@@ -128,37 +122,37 @@ class I {
128
122
  );
129
123
  this.renderer.setRenderTarget = (s) => {
130
124
  e(s), s == null && i.bindRenderTarget();
131
- }, this.scene = new n.Scene();
125
+ }, this.scene = new l.Scene();
132
126
  const { camera: t } = i;
133
- this.camera = new n.PerspectiveCamera(
127
+ this.camera = new l.PerspectiveCamera(
134
128
  t.fovY,
135
129
  t.aspect,
136
130
  0.1,
137
131
  1e5
138
- ), this.ambient = new n.AmbientLight(16777215, 2), this.scene.add(this.ambient), this.sun = new n.DirectionalLight(16777215, 2), this.scene.add(this.sun), i.resetWebGLState();
132
+ ), this.ambient = new l.AmbientLight(16777215, 2), this.scene.add(this.ambient), this.sun = new l.DirectionalLight(16777215, 2), this.scene.add(this.sun), i.resetWebGLState();
139
133
  }
140
134
  async render(i) {
141
135
  var s;
142
136
  const e = i.camera;
143
137
  if (this.camera.position.set(e.eye[0], e.eye[1], e.eye[2]), this.camera.up.set(e.up[0], e.up[1], e.up[2]), this.camera.lookAt(
144
- new n.Vector3(e.center[0], e.center[1], e.center[2])
138
+ new l.Vector3(e.center[0], e.center[1], e.center[2])
145
139
  ), this.camera.projectionMatrix.fromArray(e.projectionMatrix), !this.isPaused && this.needInterpolate)
146
140
  for (const a of this.vehicleObjectMap.keys()) {
147
- const l = (s = this.vehicleObjectMap.get(a)) == null ? void 0 : s.model;
148
- if (!l)
141
+ const n = (s = this.vehicleObjectMap.get(a)) == null ? void 0 : s.model;
142
+ if (!n)
149
143
  continue;
150
144
  const o = this.computeVehiclePosition(a);
151
145
  if (o) {
152
146
  const h = this.toRenderCoordinates(o);
153
- l.position.set(h[0], h[1], h[2]), l.rotation.y = n.MathUtils.degToRad(-o[3]);
147
+ n.position.set(h[0], h[1], h[2]), n.rotation.y = l.MathUtils.degToRad(-o[3]);
154
148
  }
155
149
  }
156
150
  const t = i.sunLight;
157
- this.sun.position.set(t.direction[0], t.direction[1], t.direction[2]), this.sun.intensity = t.diffuse.intensity, this.sun.color = new n.Color(
151
+ this.sun.position.set(t.direction[0], t.direction[1], t.direction[2]), this.sun.intensity = t.diffuse.intensity, this.sun.color = new l.Color(
158
152
  t.diffuse.color[0],
159
153
  t.diffuse.color[1],
160
154
  t.diffuse.color[2]
161
- ), this.ambient.intensity = t.ambient.intensity, this.ambient.color = new n.Color(
155
+ ), this.ambient.intensity = t.ambient.intensity, this.ambient.color = new l.Color(
162
156
  t.ambient.color[0],
163
157
  t.ambient.color[1],
164
158
  t.ambient.color[2]
@@ -170,9 +164,9 @@ class I {
170
164
  async addVehicles(i) {
171
165
  if (!(this.isPaused || !this.isInitialized))
172
166
  for (const e of i) {
173
- const { vehicleId: t, localTimestamp: s } = e, a = Number(e.x), l = Number(e.y), o = Number(e.heading);
167
+ const { vehicleId: t, localTimestamp: s } = e, a = Number(e.x), n = Number(e.y), o = Number(e.heading);
174
168
  this.historyPositionMap.set(t, [
175
- { pos: [a, l, 0], heading: o, time: s }
169
+ { pos: [a, n, 0], heading: o, time: s }
176
170
  ]);
177
171
  const h = this.getVehicleModel(e);
178
172
  h.name = t, h.visible = !this.needInterpolate;
@@ -198,7 +192,7 @@ class I {
198
192
  return;
199
193
  const e = [];
200
194
  for (const t of i) {
201
- const { vehicleId: s, timestamp: a } = t, l = Number(t.x), o = Number(t.y);
195
+ const { vehicleId: s, timestamp: a } = t, n = Number(t.x), o = Number(t.y);
202
196
  let h = Number(t.heading);
203
197
  const r = this.vehicleObjectMap.get(s), m = this.historyPositionMap.get(
204
198
  s
@@ -220,16 +214,16 @@ class I {
220
214
  if (r.data = t, this.needInterpolate) {
221
215
  const c = m[m.length - 1];
222
216
  Math.abs(h - c.heading) >= 180 && (h > c.heading ? c.heading += 360 : h += 360), m.push({
223
- pos: [l, o, 0],
217
+ pos: [n, o, 0],
224
218
  heading: h,
225
219
  time: a
226
220
  });
227
221
  } else {
228
222
  this.historyPositionMap.set(s, [
229
- { pos: [l, o, 0], heading: h, time: a }
223
+ { pos: [n, o, 0], heading: h, time: a }
230
224
  ]);
231
- const c = this.toRenderCoordinates([l, o, 0]);
232
- r.model.position.set(c[0], c[1], c[2]), r.model.rotation.y = n.MathUtils.degToRad(-h);
225
+ const c = this.toRenderCoordinates([n, o, 0]);
226
+ r.model.position.set(c[0], c[1], c[2]), r.model.rotation.y = l.MathUtils.degToRad(-h);
233
227
  }
234
228
  }
235
229
  }
@@ -311,7 +305,7 @@ class I {
311
305
  * */
312
306
  disposeModel(i) {
313
307
  i.traverse((e) => {
314
- e instanceof n.Mesh && (e.geometry.dispose(), e.material.dispose());
308
+ e instanceof l.Mesh && (e.geometry.dispose(), e.material.dispose());
315
309
  });
316
310
  }
317
311
  /**
@@ -323,18 +317,18 @@ class I {
323
317
  return;
324
318
  const s = Date.now();
325
319
  t.isMoving = !0, t.data.roadLayer === "1" ? t.model.visible = this.showGroundVehicle : t.model.visible = this.showElevatedVehicle, t.segmentStartTime || (t.segmentStartTime = s, t.segmentTotalTime = e[1].time - e[0].time);
326
- const a = s - t.segmentStartTime, l = Math.min(
320
+ const a = s - t.segmentStartTime, n = Math.min(
327
321
  a / t.segmentTotalTime,
328
322
  1
329
323
  );
330
- if (l === 1)
324
+ if (n === 1)
331
325
  if (e.shift(), e.length === 1) {
332
326
  t.waitForDelete === !0 ? this.deleteVehicle(t) : (t.segmentStartTime = void 0, t.segmentTotalTime = void 0, t.model.visible = !1, t.isMoving = !1, console.log("hide vehicle", i));
333
327
  return;
334
328
  } else
335
329
  return t.segmentStartTime = Date.now(), t.segmentTotalTime = e[1].time - e[0].time, (e[1].heading >= 270 && e[0].heading <= 90 || e[1].heading <= 90 && e[0].heading >= 270) && (e[1].heading > e[0].heading ? e[0].heading += 360 : e[1].heading += 360), e[0].pos.concat(e[0].heading);
336
330
  else if (e.length >= 2) {
337
- const o = e[0].pos[0] + (e[1].pos[0] - e[0].pos[0]) * l, h = e[0].pos[1] + (e[1].pos[1] - e[0].pos[1]) * l, r = e[0].heading + (e[1].heading - e[0].heading) * l;
331
+ const o = e[0].pos[0] + (e[1].pos[0] - e[0].pos[0]) * n, h = e[0].pos[1] + (e[1].pos[1] - e[0].pos[1]) * n, r = e[0].heading + (e[1].heading - e[0].heading) * n;
338
332
  return [o, h, 0, r];
339
333
  } else
340
334
  return;
@@ -344,13 +338,13 @@ class I {
344
338
  * */
345
339
  getVehicleModel(i) {
346
340
  if (this.view.camera.position.z >= this.cameraHeightThreshold) {
347
- const e = new n.SphereGeometry(5, 32, 32), t = new n.MeshPhysicalMaterial({
341
+ const e = new l.SphereGeometry(5, 32, 32), t = new l.MeshPhysicalMaterial({
348
342
  color: 325253,
349
343
  emissive: 0,
350
344
  roughness: this.roughness,
351
345
  metalness: this.metalness
352
346
  });
353
- return new n.Mesh(e, t);
347
+ return new l.Mesh(e, t);
354
348
  } else {
355
349
  let e;
356
350
  if (i.ptcType === 2)
@@ -376,7 +370,7 @@ class I {
376
370
  const t = this.materialMap.get(i.vehicleColor) || this.defaultMaterial;
377
371
  let s = !1;
378
372
  e.traverse((a) => {
379
- !s && a instanceof n.Mesh && (a.material = t, s = !0);
373
+ !s && a instanceof l.Mesh && (a.material = t, s = !0);
380
374
  });
381
375
  }
382
376
  return e;
@@ -386,14 +380,14 @@ class I {
386
380
  * 创建号牌canvas
387
381
  * */
388
382
  createCanvas(i, e, t) {
389
- const s = document.createElement("canvas"), a = i.width, l = i.height;
390
- s.width = a, s.height = l;
383
+ const s = document.createElement("canvas"), a = i.width, n = i.height;
384
+ s.width = a, s.height = n;
391
385
  const o = s.getContext("2d");
392
386
  if (!o) {
393
387
  console.log("canvas创建失败");
394
388
  return;
395
389
  }
396
- return o.fillStyle = "rgba(0,0,0,0.0)", o.fillRect(0, 0, a, l), o.drawImage(i, 0, 0, a, l), o.beginPath(), o.translate(a / 2, l / 2), o.fillStyle = t, o.font = "bold 32px 宋体", o.textBaseline = "middle", o.textAlign = "center", o.fillText(e, 0, 0), s;
390
+ return o.fillStyle = "rgba(0,0,0,0.0)", o.fillRect(0, 0, a, n), o.drawImage(i, 0, 0, a, n), o.beginPath(), o.translate(a / 2, n / 2), o.fillStyle = t, o.font = "bold 32px 宋体", o.textBaseline = "middle", o.textAlign = "center", o.fillText(e, 0, 0), s;
397
391
  }
398
392
  createPlateSprite(i) {
399
393
  return new Promise((e, t) => {
@@ -403,12 +397,12 @@ class I {
403
397
  e(void 0);
404
398
  return;
405
399
  }
406
- let a = new Image(), l = "", o = "";
400
+ let a = new Image(), n = "", o = "";
407
401
  if (this.currentSpriteContent === d.PlateNumber || this.currentSpriteContent === d.Mix)
408
402
  if (s)
409
- a = this.greyPlateBG, l = i.ptcId, o = "#ffffff";
403
+ a = this.greyPlateBG, n = i.ptcId, o = "#ffffff";
410
404
  else
411
- switch (l = ((r = i.showName) == null ? void 0 : r.substring(0, 2)) + "•" + ((m = i.showName) == null ? void 0 : m.substring(2)), i.plateColor) {
405
+ switch (n = ((r = i.showName) == null ? void 0 : r.substring(0, 2)) + "•" + ((m = i.showName) == null ? void 0 : m.substring(2)), i.plateColor) {
412
406
  case 1:
413
407
  a = this.bluePlateBG, o = "#ffffff";
414
408
  break;
@@ -428,17 +422,17 @@ class I {
428
422
  a = this.neoGreenPlateBG, o = "#000000";
429
423
  break;
430
424
  default:
431
- a = this.greyPlateBG, l = i.plateNo, o = "#ffffff";
425
+ a = this.greyPlateBG, n = i.plateNo, o = "#ffffff";
432
426
  break;
433
427
  }
434
428
  else
435
- this.currentSpriteContent === d.Id && (a = this.greyPlateBG, l = i.ptcId, o = "#ffffff");
436
- const h = this.createCanvas(a, l, o);
429
+ this.currentSpriteContent === d.Id && (a = this.greyPlateBG, n = i.ptcId, o = "#ffffff");
430
+ const h = this.createCanvas(a, n, o);
437
431
  if (h) {
438
- const c = new n.CanvasTexture(h), p = new n.SpriteMaterial({
432
+ const c = new l.CanvasTexture(h), p = new l.SpriteMaterial({
439
433
  map: c,
440
434
  transparent: !1
441
- }), g = new n.Sprite(p), f = 0.05, M = h.width * f, w = h.height * f;
435
+ }), g = new l.Sprite(p), f = 0.05, M = h.width * f, w = h.height * f;
442
436
  g.scale.set(M, w, 1), g.name = "VehiclePlate", e(g);
443
437
  } else {
444
438
  t("canvas创建失败");
@@ -27,7 +27,10 @@ declare const _sfc_main: import("vue").DefineComponent<{
27
27
  overlay: Overlay;
28
28
  queueLength: QueueLength;
29
29
  openDriveRenderer: OpenDriveRenderer;
30
+ showLogDiv: import("vue").Ref<boolean>;
30
31
  mapViewer: import("vue").ComputedRef<MapView | SceneView>;
32
+ startSaveTrackLog: () => void;
33
+ downloadTrackLog: () => void;
31
34
  setMapCenter: (params: ISetMapCenterParams) => Promise<import("../types").IResult>;
32
35
  setMapCamera: (params: ISetMapCameraParams) => Promise<import("../types").IResult>;
33
36
  lookAt: (params: ILookAtParams) => Promise<void>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),v=require("./stores/index.js");require("./style/index.css");const oe=require("./utils/holo-flow/index.js"),re=require("./utils/map-initializer.js"),se=require("./utils/open-drive-renderer/index.js"),ce=require("./utils/overlay.js"),ie=require("./utils/queue-length.js"),C=require("./utils/road-config-tool/index.js"),le=require("./utils/traffic-flow.js"),ue={class:"gis-viewer"},de=i.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(h,{expose:O,emit:T}){const d=i.ref(null);let r,s,a,n,o,t,l,u;v.registerStore(),i.onMounted(async()=>{if(!d.value)return;const e=i.getCurrentInstance(),{$gisviewerAssetsRoot:c}=e.appContext.config.globalProperties,y=await(await fetch(w.config)).json();y.assetsRoot=w.assetsRoot||c;const ae=v.default.useAppDataStore;ae.mapConfig=y,s=new re.default,r=await s.initialize({container:d.value,markerClickCallback:(p,f,g,ne)=>{m("markerClick",p,f,g,ne)},mapClickCallback:(p,f,g)=>{m("mapClick",p,f,g)}}),o=new oe.default(r),await o.init(),m("mapLoaded")});const k=i.computed(()=>r),b=async e=>await s.setMapCenter(e),I=async e=>await s.setMapCamera(e),q=async e=>await s.lookAt(e),A=e=>s.setLayerVisibility(e),L=(e,c)=>s.requestCoordinateTransform(e,c),_=e=>{s.cancelCoordinateTransform(e)},S=e=>{s.setMapZoomRange(e)},D=e=>(a||(a=new C.default(r)),a.showLaneNumber(e)),M=()=>{a==null||a.clearLaneNumber()},x=async e=>(a||(a=new C.default(r)),await a.initializeSearch(e)),V=async()=>a==null?void 0:a.calCrossIndicatorArea(),B=async()=>{},H=async(e,c)=>{n||(n=new le.default(r)),n.connectTrafficFlow(e,c)},R=()=>{n==null||n.disconnectTrafficFlow()},j=e=>{o.handleVehicleTraceData(e)},z=()=>{o.clearHoloTrace()},N=e=>{o.setInterpolate(e)},P=async e=>{await o.handleSignalData(e)},Q=()=>{o.clearHoloSignal()},E=e=>{n==null||n.toggleTrafficInfo(e),o.toggleTrafficInfo(e)},Z=e=>{o.togglePause(e)},F=e=>{n==null||n.toggleTrafficObject(e),o.toggleTrafficObject(e)},G=e=>{o.updatePanelContent(e)},J=async e=>(t||(t=new ce.default(r)),t.addOverlays(e)),K=e=>t==null?void 0:t.removeOverlaysByType(e),U=e=>t==null?void 0:t.removeOverlaysById(e),W=()=>t==null?void 0:t.removeAllOverlays(),X=()=>{t==null||t.showAllOverlays()},Y=e=>{l||(l=new ie.default(r)),l.updateQueueLength(e)},$=()=>{l==null||l.removeQueueLength()},ee=async(e,c)=>{u||(u=new se.default(r)),await u.showOpenDrive(e,c)},te=async()=>{await(u==null?void 0:u.hideOpenDrive())},w=h,m=T;return O({mapViewer:k,setLayerVisibility:A,setMapCenter:b,lookAt:q,setMapCamera:I,setMapZoomRange:S,requestCoordinateTransform:L,cancelCoordinateTransform:_,addOverlays:J,showAllOverlays:X,removeOverlaysByType:K,removeOverlaysById:U,removeAllOverlays:W,showLaneNumber:D,clearLaneNumber:M,initializeAreaTool:x,calCrossIndicatorArea:V,calRoadIndicatorArea:B,connectCarFlow:H,disconnectCarFlow:R,handleHoloVehicleTraceData:j,clearHoloTrace:z,handleHoloSignalData:P,clearHoloSignal:Q,setInterpolate:N,toggleTrafficInfo:E,toggleTrafficObject:F,toggleVehicleInfo:G,togglePause:Z,updateQueueLength:Y,removeQueueLength:$,showOpenDrive:ee,hideOpenDrive:te}),(e,c)=>(i.openBlock(),i.createElementBlock("div",ue,[i.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:d},null,512)]))}});exports.default=de;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),v=require("./stores/index.js");require("./style/index.css");const ce=require("./utils/holo-flow/index.js"),ie=require("./utils/map-initializer.js"),le=require("./utils/open-drive-renderer/index.js"),ue=require("./utils/overlay.js"),de=require("./utils/queue-length.js"),C=require("./utils/road-config-tool/index.js"),pe=require("./utils/traffic-flow.js"),me={class:"gis-viewer"},fe={style:{position:"absolute",bottom:"10px",left:"10px"}},ge=a.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(k,{expose:T,emit:b}){const p=a.ref(null);let s,c,n,o,r,t,l,u;const m=a.ref(!1);v.registerStore(),a.onMounted(async()=>{if(!p.value)return;document.addEventListener("keydown",d=>{d.ctrlKey&&d.key==="i"&&(m.value=!m.value)});const e=a.getCurrentInstance(),{$gisviewerAssetsRoot:i}=e.appContext.config.globalProperties,h=await(await fetch(y.config)).json();h.assetsRoot=y.assetsRoot||i;const re=v.default.useAppDataStore;re.mapConfig=h,c=new ie.default,s=await c.initialize({container:p.value,markerClickCallback:(d,g,w,se)=>{f("markerClick",d,g,w,se)},mapClickCallback:(d,g,w)=>{f("mapClick",d,g,w)}}),r=new ce.default(s),await r.init(),f("mapLoaded")});const L=a.computed(()=>s),O=()=>{const e=v.default.useAppDataStore;e.saveTrackLog=!0},I=()=>{r.downloadTrackLog()},S=async e=>await c.setMapCenter(e),A=async e=>await c.setMapCamera(e),D=async e=>await c.lookAt(e),_=e=>c.setLayerVisibility(e),q=(e,i)=>c.requestCoordinateTransform(e,i),x=e=>{c.cancelCoordinateTransform(e)},V=e=>{c.setMapZoomRange(e)},M=e=>(n||(n=new C.default(s)),n.showLaneNumber(e)),N=()=>{n==null||n.clearLaneNumber()},B=async e=>(n||(n=new C.default(s)),await n.initializeSearch(e)),E=async()=>n==null?void 0:n.calCrossIndicatorArea(),H=async()=>{},R=async(e,i)=>{o||(o=new pe.default(s)),o.connectTrafficFlow(e,i)},j=()=>{o==null||o.disconnectTrafficFlow()},z=e=>{r.handleVehicleTraceData(e)},P=()=>{r.clearHoloTrace()},Q=e=>{r.setInterpolate(e)},Z=async e=>{await r.handleSignalData(e)},F=()=>{r.clearHoloSignal()},K=e=>{o==null||o.toggleTrafficInfo(e),r.toggleTrafficInfo(e)},G=e=>{r.togglePause(e)},J=e=>{o==null||o.toggleTrafficObject(e),r.toggleTrafficObject(e)},U=e=>{r.updatePanelContent(e)},W=async e=>(t||(t=new ue.default(s)),t.addOverlays(e)),X=e=>t==null?void 0:t.removeOverlaysByType(e),Y=e=>t==null?void 0:t.removeOverlaysById(e),$=()=>t==null?void 0:t.removeAllOverlays(),ee=()=>{t==null||t.showAllOverlays()},te=e=>{l||(l=new de.default(s)),l.updateQueueLength(e)},ae=()=>{l==null||l.removeQueueLength()},ne=async(e,i)=>{u||(u=new le.default(s)),await u.showOpenDrive(e,i)},oe=async()=>{await(u==null?void 0:u.hideOpenDrive())},y=k,f=b;return T({mapViewer:L,setLayerVisibility:_,setMapCenter:S,lookAt:D,setMapCamera:A,setMapZoomRange:V,requestCoordinateTransform:q,cancelCoordinateTransform:x,addOverlays:W,showAllOverlays:ee,removeOverlaysByType:X,removeOverlaysById:Y,removeAllOverlays:$,showLaneNumber:M,clearLaneNumber:N,initializeAreaTool:B,calCrossIndicatorArea:E,calRoadIndicatorArea:H,connectCarFlow:R,disconnectCarFlow:j,handleHoloVehicleTraceData:z,clearHoloTrace:P,handleHoloSignalData:Z,clearHoloSignal:F,setInterpolate:Q,toggleTrafficInfo:K,toggleTrafficObject:J,toggleVehicleInfo:U,togglePause:G,updateQueueLength:te,removeQueueLength:ae,showOpenDrive:ne,hideOpenDrive:oe}),(e,i)=>(a.openBlock(),a.createElementBlock("div",me,[a.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:p},[a.withDirectives(a.createElementVNode("div",fe,[a.createElementVNode("button",{style:{"margin-right":"10px"},onClick:O}," 开始记录 "),a.createElementVNode("button",{onClick:I},"下载日志")],512),[[a.vShow,m.value]])],512)]))}});exports.default=ge;
@@ -17,7 +17,10 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
17
17
  overlay: import("./utils/overlay").default;
18
18
  queueLength: import("./utils/queue-length").default;
19
19
  openDriveRenderer: import("./utils/open-drive-renderer").default;
20
+ showLogDiv: import("vue").Ref<boolean>;
20
21
  mapViewer: import("vue").ComputedRef<__esri.MapView | __esri.SceneView>;
22
+ startSaveTrackLog: () => void;
23
+ downloadTrackLog: () => void;
21
24
  setMapCenter: (params: import("../types").ISetMapCenterParams) => Promise<import("../types").IResult>;
22
25
  setMapCamera: (params: import("../types").ISetMapCameraParams) => Promise<import("../types").IResult>;
23
26
  lookAt: (params: import("../types").ILookAtParams) => Promise<void>;
@@ -1,3 +1,4 @@
1
1
  export declare const useAppDataStore: import("pinia").StoreDefinition<"appData", {
2
2
  mapConfig: {};
3
+ saveTrackLog: boolean;
3
4
  }, {}, {}>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("pinia"),t=e.defineStore("appData",{state:()=>({mapConfig:{}})});exports.useAppDataStore=t;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("pinia"),t=e.defineStore("appData",{state:()=>({mapConfig:{},saveTrackLog:!1})});exports.useAppDataStore=t;
@@ -18,4 +18,5 @@ export default class Index {
18
18
  handleSignalData(data: any): Promise<void>;
19
19
  clearHoloSignal(): void;
20
20
  setInterpolate(enable: boolean): void;
21
+ downloadTrackLog(): void;
21
22
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("../../../types/index.js"),a=require("./signal-holo-flow.js"),o=require("./trace-holo-flow.js");class i{constructor(e){this.view=e}async init(){this.traceHoloFlow=new o.default(this.view),await this.traceHoloFlow.init()}handleVehicleTraceData(e){this.traceHoloFlow.handleVehicleTraceData(e)}toggleTrafficObject(e){switch(e.name.toLowerCase()){case"groundVehicle".toLowerCase():this.traceHoloFlow.toggleGroundVehicle(e.visible);break;case"elevatedVehicle".toLowerCase():this.traceHoloFlow.toggleElevatedVehicle(e.visible);break}}clearHoloTrace(){this.traceHoloFlow.clearTrace()}toggleTrafficInfo(e){this.traceHoloFlow.toggleTrafficInfo(e)}togglePause(e){this.traceHoloFlow.togglePause(e)}updatePanelContent(e){let t=l.EVehiclePlateState.None;switch(e){case"none":t=l.EVehiclePlateState.None;break;case"plateNumber":t=l.EVehiclePlateState.PlateNumber;break;case"vehicleId":t=l.EVehiclePlateState.Id;break;case"mix":t=l.EVehiclePlateState.Mix;break}this.traceHoloFlow.updatePanelContent(t)}async handleSignalData(e){this.signalHoloFlow||(this.signalHoloFlow=new a.default(this.view)),await this.signalHoloFlow.initializeLayer(),await this.signalHoloFlow.handleSignalData(e)}clearHoloSignal(){this.signalHoloFlow.clearSignal()}setInterpolate(e){this.traceHoloFlow.setInterpolate(e)}}exports.default=i;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../../../types/index.js"),a=require("./signal-holo-flow.js"),o=require("./trace-holo-flow.js");class i{constructor(e){this.view=e}async init(){this.traceHoloFlow=new o.default(this.view),await this.traceHoloFlow.init()}handleVehicleTraceData(e){this.traceHoloFlow.handleVehicleTraceData(e)}toggleTrafficObject(e){switch(e.name.toLowerCase()){case"groundVehicle".toLowerCase():this.traceHoloFlow.toggleGroundVehicle(e.visible);break;case"elevatedVehicle".toLowerCase():this.traceHoloFlow.toggleElevatedVehicle(e.visible);break}}clearHoloTrace(){this.traceHoloFlow.clearTrace()}toggleTrafficInfo(e){this.traceHoloFlow.toggleTrafficInfo(e)}togglePause(e){this.traceHoloFlow.togglePause(e)}updatePanelContent(e){let l=t.EVehiclePlateState.None;switch(e){case"none":l=t.EVehiclePlateState.None;break;case"plateNumber":l=t.EVehiclePlateState.PlateNumber;break;case"vehicleId":l=t.EVehiclePlateState.Id;break;case"mix":l=t.EVehiclePlateState.Mix;break}this.traceHoloFlow.updatePanelContent(l)}async handleSignalData(e){this.signalHoloFlow||(this.signalHoloFlow=new a.default(this.view)),await this.signalHoloFlow.initializeLayer(),await this.signalHoloFlow.handleSignalData(e)}clearHoloSignal(){this.signalHoloFlow.clearSignal()}setInterpolate(e){this.traceHoloFlow.setInterpolate(e)}downloadTrackLog(){this.traceHoloFlow.downloadLog()}}exports.default=i;
@@ -1,16 +1,14 @@
1
1
  import { EVehiclePlateState, IToggleTrafficInfoParams } from '../../../types';
2
2
  export default class TraceHoloFlow {
3
- private mapConfig;
4
- private view;
5
- private lastDataTime;
6
3
  private readonly traceRenderer;
7
4
  constructor(view: __esri.View);
8
5
  init(): Promise<void>;
6
+ private appDataStore;
7
+ private logTable;
8
+ downloadLog(): void;
9
9
  /**
10
10
  * 处理全息流轨迹数据
11
11
  * */
12
- private lastLocalTimestamp;
13
- private lastDataTimestamp;
14
12
  handleVehicleTraceData(data: any): Promise<void>;
15
13
  /**
16
14
  * 切换交通信息可见性
@@ -1 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const m=require("@arcgis/core/views/3d/externalRenderers"),g=require("../../stores/index.js"),f=require("./trace-renderer-external.js"),T=require("./trace-renderer-layer.js");function R(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const a in n)if(a!=="default"){const i=Object.getOwnPropertyDescriptor(n,a);Object.defineProperty(e,a,i.get?i:{enumerable:!0,get:()=>n[a]})}}return e.default=n,Object.freeze(e)}const b=R(m);class y{constructor(e){this.lastDataTime=0,this.lastLocalTimestamp=0,this.lastDataTimestamp=0,this.view=e;const a=g.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(a.mapConfig)),e.type==="3d"?(this.traceRenderer=new f.default(e),b.add(e,this.traceRenderer)):this.traceRenderer=new T.default(e)}async init(){await this.traceRenderer.init()}async handleVehicleTraceData(e){const{newVehList:a,updateVehList:i,deleteVehList:o,jgsj:h}=e,s=e.crossId||"",l=[],c=[];if(a&&a.length>0){for(const r of a){r.localTimestamp||(r.localTimestamp=h||Date.now());const t=this.buildVehicleTrackData(r,s);t&&l.push(t)}await this.traceRenderer.addVehicles(l)}if(i&&i.length>0){for(const d of i){const p=this.buildVehicleTrackData(d,s);p&&c.push(p)}const r=c[0].localTimestamp-this.lastLocalTimestamp,t=c[0].timestamp-this.lastDataTimestamp;console.log("localTimeGap",r,"timeGap",t,"delta",r-t),this.lastLocalTimestamp=c[0].localTimestamp,this.lastDataTimestamp=c[0].timestamp,await this.traceRenderer.updateVehicles(c)}if(o&&o.length>0){const r=o.map(t=>s+"-"+(t.ptcId||t.vehno||t.vehNo));this.traceRenderer.deleteVehicles(r)}}toggleTrafficInfo(e){this.traceRenderer.toggleTrafficInfo(e)}clearTrace(){this.traceRenderer.clearVehicles()}togglePause(e){this.traceRenderer.togglePause(e)}updatePanelContent(e){this.traceRenderer.updatePanelContent(e)}toggleGroundVehicle(e){this.traceRenderer.toggleGroundVehicle(e)}toggleElevatedVehicle(e){this.traceRenderer.toggleElevatedVehicle(e)}setInterpolate(e){this.traceRenderer.setInterpolate(e)}buildVehicleTrackData(e,a){const i=e.longitude,o=e.latitude,h=e.ptcId,s=Number(e.ptcType),l=e.heading,c=Number(e.vehicleType),r=Number(e.vehicleColor),t=e.plateNo||e.plateno,d=Number(e.plateColor),p=e.timestamp,u=e.roadLayer?String(e.roadLayer):"1";if(!(s<0||s>8))return{ptcId:h,crossId:a,vehicleId:a+"-"+h,x:i,y:o,ptcType:s,vehicleType:c,heading:s===2?-l:l,vehicleColor:r,showName:t&&t!==""&&t!=="0"&&t!=="000000"?t:"",plateNo:t,plateColor:d,timestamp:p,localTimestamp:Date.now(),roadLayer:u}}}exports.default=y;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const g=require("@arcgis/core/views/3d/externalRenderers"),m=require("../../stores/index.js"),b=require("./trace-renderer-external.js"),f=require("./trace-renderer-layer.js");function T(n){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const r in n)if(r!=="default"){const l=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(t,r,l.get?l:{enumerable:!0,get:()=>n[r]})}}return t.default=n,Object.freeze(t)}const y=T(g);class v{constructor(t){this.appDataStore=m.default.useAppDataStore,this.logTable=[["uuid","ptcId","plateno","timestamp","localTimestamp","timestamp_str","speed","laneNo","objHeight","objLength","latitude","longitude","ptcType","vehicleType","vehicleColor","plateColor","sbdm","heading","fixAngle","roadLayer","status","step"]],t.type==="3d"?(this.traceRenderer=new b.default(t),y.add(t,this.traceRenderer)):this.traceRenderer=new f.default(t)}async init(){await this.traceRenderer.init()}downloadLog(){const t=this.logTable.map(c=>c.join(",")).join(`
2
+ `).replace(/null/g,""),r=new Blob([t],{type:"text/csv;charset=utf-8;"}),l=URL.createObjectURL(r),a=document.createElement("a");a.setAttribute("href",l),a.setAttribute("download","trace-log.csv"),a.style.visibility="hidden",document.body.appendChild(a),a.click(),document.body.removeChild(a)}async handleVehicleTraceData(t){const{newVehList:r,updateVehList:l,deleteVehList:a,jgsj:c}=t,i=t.crossId||"",s=[],d=[];if(r&&r.length>0){for(const e of r){e.localTimestamp||(e.localTimestamp=c||Date.now());const o=this.buildVehicleTrackData(e,i);this.appDataStore.saveTrackLog&&this.logTable.push([e.uuid,e.ptcId,e.plateno,e.timestamp,e.localTimestamp,e.timestamp_str,e.speed,e.laneNo,e.objHeight,e.objLength,e.latitude,e.longitude,e.ptcType,e.vehicleType,e.vehicleColor,e.plateColor,e.sbdm,e.heading,e.fixAngle,e.roadLayer,e.status,e.step]),o&&s.push(o)}await this.traceRenderer.addVehicles(s)}if(l&&l.length>0){for(const e of l){const o=this.buildVehicleTrackData(e,i);this.appDataStore.saveTrackLog&&this.logTable.push([e.uuid,e.ptcId,e.plateno,e.timestamp,e.localTimestamp,e.timestamp_str,e.speed,e.laneNo,e.objHeight,e.objLength,e.latitude,e.longitude,e.ptcType,e.vehicleType,e.vehicleColor,e.plateColor,e.sbdm,e.heading,e.fixAngle,e.roadLayer,e.status,e.step]),o&&d.push(o)}await this.traceRenderer.updateVehicles(d)}if(a&&a.length>0){const e=a.map(o=>i+"-"+(o.ptcId||o.vehno||o.vehNo));this.traceRenderer.deleteVehicles(e)}}toggleTrafficInfo(t){this.traceRenderer.toggleTrafficInfo(t)}clearTrace(){this.traceRenderer.clearVehicles()}togglePause(t){this.traceRenderer.togglePause(t)}updatePanelContent(t){this.traceRenderer.updatePanelContent(t)}toggleGroundVehicle(t){this.traceRenderer.toggleGroundVehicle(t)}toggleElevatedVehicle(t){this.traceRenderer.toggleElevatedVehicle(t)}setInterpolate(t){this.traceRenderer.setInterpolate(t)}buildVehicleTrackData(t,r){const l=t.longitude,a=t.latitude,c=t.ptcId,i=Number(t.ptcType),s=t.heading,d=Number(t.vehicleType),e=Number(t.vehicleColor),o=t.plateNo||t.plateno,p=Number(t.plateColor),h=t.timestamp,u=t.roadLayer?String(t.roadLayer):"1";if(!(i<0||i>8))return{ptcId:c,crossId:r,vehicleId:r+"-"+c,x:l,y:a,ptcType:i,vehicleType:d,heading:i===2?-s:s,vehicleColor:e,showName:o&&o!==""&&o!=="0"&&o!=="000000"?o:"",plateNo:o,plateColor:p,timestamp:h,localTimestamp:Date.now(),roadLayer:u}}}exports.default=v;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const v=require("@arcgis/core/core/promiseUtils.js"),y=require("@arcgis/core/core/reactiveUtils.js"),S=require("@arcgis/core/geometry/SpatialReference"),G=require("@arcgis/core/views/3d/externalRenderers"),C=require("three"),T=require("three/examples/jsm/loaders/GLTFLoader.js"),d=require("../../../types/index.js"),B=require("../../stores/index.js");function u(m){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(m){for(const e in m)if(e!=="default"){const t=Object.getOwnPropertyDescriptor(m,e);Object.defineProperty(i,e,t.get?t:{enumerable:!0,get:()=>m[e]})}}return i.default=m,Object.freeze(i)}const R=u(v),V=u(y),M=u(G),n=u(C);class I{constructor(i){this.cameraHeightThreshold=1e3,this.roughness=.2,this.metalness=.8,this.defaultMaterial=new n.MeshPhongMaterial({color:16777215}),this.materialMap=new Map([[1,this.createCarMaterial(16777215)],[2,this.createCarMaterial(7833753)],[3,this.createCarMaterial(16766720)],[4,this.createCarMaterial(16758465)],[5,this.createCarMaterial(14423100)],[6,this.createCarMaterial(3329330)],[7,this.createCarMaterial(2003183)],[8,this.createCarMaterial(16032864)],[9,this.createCarMaterial(2105376)],[10,this.createCarMaterial(9662683)],[99,this.createCarMaterial(6908265)]]),this.isInitialized=!1,this.showGroundVehicle=!0,this.showElevatedVehicle=!0,this.isPaused=!1,this.currentSpriteContent=d.EVehiclePlateState.None,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map,this.needInterpolate=!0,this.updateModel=!1;const e=B.default.useAppDataStore;this.assetsRoot=JSON.parse(JSON.stringify(e.mapConfig)).assetsRoot,this.view=i,document.addEventListener("visibilitychange",()=>{this.clearVehicles(),this.needInterpolate=!document.hidden},!1),V.watch(()=>this.view.camera.position.z,(t,s)=>{(s<=this.cameraHeightThreshold&&t>this.cameraHeightThreshold||s>this.cameraHeightThreshold&&t<=this.cameraHeightThreshold)&&(this.updateModel=!0)})}createCarMaterial(i){return new n.MeshPhongMaterial({color:i})}async init(){const i=new T.GLTFLoader;await R.eachAlways([new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/car.glb`,t=>{this.carModel=t.scene,this.carModel.rotation.x=n.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/van.glb`,t=>{this.vanModel=t.scene,this.vanModel.rotation.x=n.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/truck.glb`,t=>{this.truckModel=t.scene,this.truckModel.scale.set(1.2,1,1.5),this.truckModel.rotation.x=n.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/bus.glb`,t=>{this.busModel=t.scene,this.busModel.rotation.x=n.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/bicycle.glb`,t=>{this.bicycleModel=t.scene,this.bicycleModel.rotation.x=n.MathUtils.degToRad(90),this.bicycleModel.rotation.y=n.MathUtils.degToRad(180),e()})}),new Promise(e=>{this.bluePlateBG=new Image,this.bluePlateBG.src=`${this.assetsRoot}/Images/PlateBG/blue.png`,this.bluePlateBG.onload=()=>{e()}}),new Promise(e=>{this.yellowPlateBG=new Image,this.yellowPlateBG.src=`${this.assetsRoot}/Images/PlateBG/yellow.png`,this.yellowPlateBG.onload=()=>{e()}}),new Promise(e=>{this.whitePlateBG=new Image,this.whitePlateBG.src=`${this.assetsRoot}/Images/PlateBG/white.png`,this.whitePlateBG.onload=()=>{e()}}),new Promise(e=>{this.blackPlateBG=new Image,this.blackPlateBG.src=`${this.assetsRoot}/Images/PlateBG/black.png`,this.blackPlateBG.onload=()=>{e()}}),new Promise(e=>{this.neoYellowPlateBG=new Image,this.neoYellowPlateBG.src=`${this.assetsRoot}/Images/PlateBG/neo_yellow.png`,this.neoYellowPlateBG.onload=()=>{e()}}),new Promise(e=>{this.neoGreenPlateBG=new Image,this.neoGreenPlateBG.src=`${this.assetsRoot}/Images/PlateBG/neo_green.png`,this.neoGreenPlateBG.onload=()=>{e()}}),new Promise(e=>{this.greyPlateBG=new Image,this.greyPlateBG.src=`${this.assetsRoot}/Images/PlateBG/grey.png`,this.greyPlateBG.onload=()=>{e()}})]),this.isInitialized=!0}setInterpolate(i){this.clearVehicles(),this.needInterpolate=i}async setup(i){this.context=i,this.renderer=new n.WebGLRenderer({context:i.gl,premultipliedAlpha:!0,logarithmicDepthBuffer:!0,antialias:!0,powerPreference:"high-performance"}),this.renderer.shadowMap.enabled=!0,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setViewport(0,0,this.view.width,this.view.height),this.renderer.autoClearDepth=!1,this.renderer.autoClearStencil=!1,this.renderer.autoClearColor=!1;const e=this.renderer.setRenderTarget.bind(this.renderer);this.renderer.setRenderTarget=s=>{e(s),s==null&&i.bindRenderTarget()},this.scene=new n.Scene;const{camera:t}=i;this.camera=new n.PerspectiveCamera(t.fovY,t.aspect,.1,1e5),this.ambient=new n.AmbientLight(16777215,2),this.scene.add(this.ambient),this.sun=new n.DirectionalLight(16777215,2),this.scene.add(this.sun),i.resetWebGLState()}async render(i){var s;const e=i.camera;if(this.camera.position.set(e.eye[0],e.eye[1],e.eye[2]),this.camera.up.set(e.up[0],e.up[1],e.up[2]),this.camera.lookAt(new n.Vector3(e.center[0],e.center[1],e.center[2])),this.camera.projectionMatrix.fromArray(e.projectionMatrix),!this.isPaused&&this.needInterpolate)for(const a of this.vehicleObjectMap.keys()){const l=(s=this.vehicleObjectMap.get(a))==null?void 0:s.model;if(!l)continue;const o=this.computeVehiclePosition(a);if(o){const h=this.toRenderCoordinates(o);l.position.set(h[0],h[1],h[2]),l.rotation.y=n.MathUtils.degToRad(-o[3])}}const t=i.sunLight;this.sun.position.set(t.direction[0],t.direction[1],t.direction[2]),this.sun.intensity=t.diffuse.intensity,this.sun.color=new n.Color(t.diffuse.color[0],t.diffuse.color[1],t.diffuse.color[2]),this.ambient.intensity=t.ambient.intensity,this.ambient.color=new n.Color(t.ambient.color[0],t.ambient.color[1],t.ambient.color[2]),this.renderer.resetState(),i.bindRenderTarget(),this.renderer.render(this.scene,this.camera),M.requestRender(this.view),i.resetWebGLState()}async addVehicles(i){if(!(this.isPaused||!this.isInitialized))for(const e of i){const{vehicleId:t,localTimestamp:s}=e,a=Number(e.x),l=Number(e.y),o=Number(e.heading);this.historyPositionMap.set(t,[{pos:[a,l,0],heading:o,time:s}]);const h=this.getVehicleModel(e);h.name=t,h.visible=!this.needInterpolate;try{const r=await this.createPlateSprite(e);r&&(h.add(r),r.position.set(0,5,-4))}catch(r){console.log("createPlateSprite error:",r)}this.scene.add(h),this.vehicleObjectMap.set(t,{model:h,data:e,waitForDelete:!1,isMoving:!1})}}async updateVehicles(i){if(this.isPaused||!this.isInitialized)return;const e=[];for(const t of i){const{vehicleId:s,timestamp:a}=t,l=Number(t.x),o=Number(t.y);let h=Number(t.heading);const r=this.vehicleObjectMap.get(s),p=this.historyPositionMap.get(s);if(!r||!p)e.push(t);else{if(p.length>=5&&console.log(s,p.length),this.updateModel||r.data.vehicleColor!==t.vehicleColor||r.data.vehicleType!==t.vehicleType){this.scene.remove(r.model),this.disposeModel(r.model),r.model=this.getVehicleModel(t);const c=await this.createPlateSprite(t);c&&(r.model.add(c),c.position.set(0,5,-4)),this.scene.add(r.model)}if(r.data.showName!==t.showName||r.data.plateColor!==t.plateColor){const c=r.model.getObjectByName("VehiclePlate");c&&(r.model.remove(c),this.disposeModel(c));const g=await this.createPlateSprite(t);g&&(r.model.add(g),g.position.set(0,5,-4))}if(r.data=t,this.needInterpolate){const c=p[p.length-1];Math.abs(h-c.heading)>=180&&(h>c.heading?c.heading+=360:h+=360),p.push({pos:[l,o,0],heading:h,time:a})}else{this.historyPositionMap.set(s,[{pos:[l,o,0],heading:h,time:a}]);const c=this.toRenderCoordinates([l,o,0]);r.model.position.set(c[0],c[1],c[2]),r.model.rotation.y=n.MathUtils.degToRad(-h)}}}await this.addVehicles(e),this.updateModel=!1,this.needInterpolate||this.render(this.context)}toRenderCoordinates(i){const e=[0,0,0];return M.toRenderCoordinates(this.view,i,0,S.WGS84,e,0,1),e}deleteVehicles(i){this.isPaused||i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(this.needInterpolate?t.isMoving?t.waitForDelete=!0:this.deleteVehicle(t):this.deleteVehicle(t))})}deleteVehicle(i){this.scene.remove(i.model),this.disposeModel(i.model);const e=i.data.vehicleId;this.vehicleObjectMap.delete(e),this.historyPositionMap.delete(e)}async toggleTrafficInfo(i){i.name==="vehiclePlate"&&(i.visible===!0&&this.currentSpriteContent===d.EVehiclePlateState.None?await this.updatePanelContent(d.EVehiclePlateState.PlateNumber):await this.updatePanelContent(i.visible?this.currentSpriteContent:d.EVehiclePlateState.None))}togglePause(i){this.isPaused=i}clearVehicles(){for(const i of this.vehicleObjectMap.keys()){const e=this.vehicleObjectMap.get(i);e&&(this.disposeModel(e.model),this.scene.remove(e.model))}this.vehicleObjectMap.clear(),this.historyPositionMap.clear()}async updatePanelContent(i){if(i!==this.currentSpriteContent){this.currentSpriteContent=i;for(const e of this.vehicleObjectMap.keys()){const t=this.vehicleObjectMap.get(e);if(t){const s=t.model.getObjectByName("VehiclePlate");if(s&&(t.model.remove(s),this.disposeModel(s)),i!==d.EVehiclePlateState.None){const a=await this.createPlateSprite(t.data);a&&(t.model.add(a),a.position.set(0,5,-4))}}}}}toggleGroundVehicle(i){console.log("toggleGroundVehicle",i),this.showGroundVehicle=i}toggleElevatedVehicle(i){this.showElevatedVehicle=i}disposeModel(i){i.traverse(e=>{e instanceof n.Mesh&&(e.geometry.dispose(),e.material.dispose())})}computeVehiclePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!t||!e||!t.isMoving&&e.length<=2)return;const s=Date.now();t.isMoving=!0,t.data.roadLayer==="1"?t.model.visible=this.showGroundVehicle:t.model.visible=this.showElevatedVehicle,t.segmentStartTime||(t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time);const a=s-t.segmentStartTime,l=Math.min(a/t.segmentTotalTime,1);if(l===1)if(e.shift(),e.length===1){t.waitForDelete===!0?this.deleteVehicle(t):(t.segmentStartTime=void 0,t.segmentTotalTime=void 0,t.model.visible=!1,t.isMoving=!1,console.log("hide vehicle",i));return}else return t.segmentStartTime=Date.now(),t.segmentTotalTime=e[1].time-e[0].time,(e[1].heading>=270&&e[0].heading<=90||e[1].heading<=90&&e[0].heading>=270)&&(e[1].heading>e[0].heading?e[0].heading+=360:e[1].heading+=360),e[0].pos.concat(e[0].heading);else if(e.length>=2){const o=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*l,h=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*l,r=e[0].heading+(e[1].heading-e[0].heading)*l;return[o,h,0,r]}else return}getVehicleModel(i){if(this.view.camera.position.z>=this.cameraHeightThreshold){const e=new n.SphereGeometry(5,32,32),t=new n.MeshPhysicalMaterial({color:325253,emissive:0,roughness:this.roughness,metalness:this.metalness});return new n.Mesh(e,t)}else{let e;if(i.ptcType===2)e=this.bicycleModel.clone();else{switch(i.vehicleType){case 10:e=this.carModel.clone();break;case 20:e=this.vanModel.clone();break;case 25:e=this.truckModel.clone();break;case 50:e=this.busModel.clone();break;default:e=this.carModel.clone();break}const t=this.materialMap.get(i.vehicleColor)||this.defaultMaterial;let s=!1;e.traverse(a=>{!s&&a instanceof n.Mesh&&(a.material=t,s=!0)})}return e}}createCanvas(i,e,t){const s=document.createElement("canvas"),a=i.width,l=i.height;s.width=a,s.height=l;const o=s.getContext("2d");if(!o){console.log("canvas创建失败");return}return o.fillStyle="rgba(0,0,0,0.0)",o.fillRect(0,0,a,l),o.drawImage(i,0,0,a,l),o.beginPath(),o.translate(a/2,l/2),o.fillStyle=t,o.font="bold 32px 宋体",o.textBaseline="middle",o.textAlign="center",o.fillText(e,0,0),s}createPlateSprite(i){return new Promise((e,t)=>{var r,p;const s=!i.plateNo||i.plateNo==="0"||i.plateNo==="000000";if(this.currentSpriteContent===d.EVehiclePlateState.None||this.currentSpriteContent===d.EVehiclePlateState.PlateNumber&&s){e(void 0);return}let a=new Image,l="",o="";if(this.currentSpriteContent===d.EVehiclePlateState.PlateNumber||this.currentSpriteContent===d.EVehiclePlateState.Mix)if(s)a=this.greyPlateBG,l=i.ptcId,o="#ffffff";else switch(l=((r=i.showName)==null?void 0:r.substring(0,2))+"•"+((p=i.showName)==null?void 0:p.substring(2)),i.plateColor){case 1:a=this.bluePlateBG,o="#ffffff";break;case 2:a=this.yellowPlateBG,o="#000000";break;case 3:a=this.whitePlateBG,o="#000000";break;case 4:a=this.blackPlateBG,o="#ffffff";break;case 5:a=this.neoYellowPlateBG,o="#000000";break;case 6:a=this.neoGreenPlateBG,o="#000000";break;default:a=this.greyPlateBG,l=i.plateNo,o="#ffffff";break}else this.currentSpriteContent===d.EVehiclePlateState.Id&&(a=this.greyPlateBG,l=i.ptcId,o="#ffffff");const h=this.createCanvas(a,l,o);if(h){const c=new n.CanvasTexture(h),g=new n.SpriteMaterial({map:c,transparent:!1}),f=new n.Sprite(g),P=.05,w=h.width*P,b=h.height*P;f.scale.set(w,b,1),f.name="VehiclePlate",e(f)}else{t("canvas创建失败");return}a.onerror=c=>{console.log(`号牌背景加载失败: ${a.src}`,c),t(c)}})}}exports.default=I;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const v=require("@arcgis/core/core/promiseUtils.js"),y=require("@arcgis/core/core/reactiveUtils.js"),S=require("@arcgis/core/geometry/SpatialReference"),G=require("@arcgis/core/views/3d/externalRenderers"),C=require("three"),T=require("three/examples/jsm/loaders/GLTFLoader.js"),d=require("../../../types/index.js"),B=require("../../stores/index.js");function u(m){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(m){for(const e in m)if(e!=="default"){const t=Object.getOwnPropertyDescriptor(m,e);Object.defineProperty(i,e,t.get?t:{enumerable:!0,get:()=>m[e]})}}return i.default=m,Object.freeze(i)}const R=u(v),V=u(y),M=u(G),l=u(C);class I{constructor(i){this.cameraHeightThreshold=1e3,this.roughness=.2,this.metalness=.8,this.defaultMaterial=new l.MeshPhongMaterial({color:16777215}),this.materialMap=new Map([[1,this.createCarMaterial(16777215)],[2,this.createCarMaterial(7833753)],[3,this.createCarMaterial(16766720)],[4,this.createCarMaterial(16758465)],[5,this.createCarMaterial(14423100)],[6,this.createCarMaterial(3329330)],[7,this.createCarMaterial(2003183)],[8,this.createCarMaterial(16032864)],[9,this.createCarMaterial(2105376)],[10,this.createCarMaterial(9662683)],[99,this.createCarMaterial(6908265)]]),this.isInitialized=!1,this.showGroundVehicle=!0,this.showElevatedVehicle=!0,this.isPaused=!1,this.currentSpriteContent=d.EVehiclePlateState.None,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map,this.needInterpolate=!0,this.updateModel=!1;const e=B.default.useAppDataStore;this.assetsRoot=JSON.parse(JSON.stringify(e.mapConfig)).assetsRoot,this.view=i,V.watch(()=>this.view.camera.position.z,(t,s)=>{(s<=this.cameraHeightThreshold&&t>this.cameraHeightThreshold||s>this.cameraHeightThreshold&&t<=this.cameraHeightThreshold)&&(this.updateModel=!0)})}createCarMaterial(i){return new l.MeshPhongMaterial({color:i})}async init(){const i=new T.GLTFLoader;await R.eachAlways([new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/car.glb`,t=>{this.carModel=t.scene,this.carModel.rotation.x=l.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/van.glb`,t=>{this.vanModel=t.scene,this.vanModel.rotation.x=l.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/truck.glb`,t=>{this.truckModel=t.scene,this.truckModel.scale.set(1.2,1,1.5),this.truckModel.rotation.x=l.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/bus.glb`,t=>{this.busModel=t.scene,this.busModel.rotation.x=l.MathUtils.degToRad(90),e()})}),new Promise(e=>{i.load(`${this.assetsRoot}/3DModels/bicycle.glb`,t=>{this.bicycleModel=t.scene,this.bicycleModel.rotation.x=l.MathUtils.degToRad(90),this.bicycleModel.rotation.y=l.MathUtils.degToRad(180),e()})}),new Promise(e=>{this.bluePlateBG=new Image,this.bluePlateBG.src=`${this.assetsRoot}/Images/PlateBG/blue.png`,this.bluePlateBG.onload=()=>{e()}}),new Promise(e=>{this.yellowPlateBG=new Image,this.yellowPlateBG.src=`${this.assetsRoot}/Images/PlateBG/yellow.png`,this.yellowPlateBG.onload=()=>{e()}}),new Promise(e=>{this.whitePlateBG=new Image,this.whitePlateBG.src=`${this.assetsRoot}/Images/PlateBG/white.png`,this.whitePlateBG.onload=()=>{e()}}),new Promise(e=>{this.blackPlateBG=new Image,this.blackPlateBG.src=`${this.assetsRoot}/Images/PlateBG/black.png`,this.blackPlateBG.onload=()=>{e()}}),new Promise(e=>{this.neoYellowPlateBG=new Image,this.neoYellowPlateBG.src=`${this.assetsRoot}/Images/PlateBG/neo_yellow.png`,this.neoYellowPlateBG.onload=()=>{e()}}),new Promise(e=>{this.neoGreenPlateBG=new Image,this.neoGreenPlateBG.src=`${this.assetsRoot}/Images/PlateBG/neo_green.png`,this.neoGreenPlateBG.onload=()=>{e()}}),new Promise(e=>{this.greyPlateBG=new Image,this.greyPlateBG.src=`${this.assetsRoot}/Images/PlateBG/grey.png`,this.greyPlateBG.onload=()=>{e()}})]),this.isInitialized=!0}setInterpolate(i){this.clearVehicles(),this.needInterpolate=i}async setup(i){this.context=i,this.renderer=new l.WebGLRenderer({context:i.gl,premultipliedAlpha:!0,logarithmicDepthBuffer:!0,antialias:!0,powerPreference:"high-performance"}),this.renderer.shadowMap.enabled=!0,this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setViewport(0,0,this.view.width,this.view.height),this.renderer.autoClearDepth=!1,this.renderer.autoClearStencil=!1,this.renderer.autoClearColor=!1;const e=this.renderer.setRenderTarget.bind(this.renderer);this.renderer.setRenderTarget=s=>{e(s),s==null&&i.bindRenderTarget()},this.scene=new l.Scene;const{camera:t}=i;this.camera=new l.PerspectiveCamera(t.fovY,t.aspect,.1,1e5),this.ambient=new l.AmbientLight(16777215,2),this.scene.add(this.ambient),this.sun=new l.DirectionalLight(16777215,2),this.scene.add(this.sun),i.resetWebGLState()}async render(i){var s;const e=i.camera;if(this.camera.position.set(e.eye[0],e.eye[1],e.eye[2]),this.camera.up.set(e.up[0],e.up[1],e.up[2]),this.camera.lookAt(new l.Vector3(e.center[0],e.center[1],e.center[2])),this.camera.projectionMatrix.fromArray(e.projectionMatrix),!this.isPaused&&this.needInterpolate)for(const a of this.vehicleObjectMap.keys()){const n=(s=this.vehicleObjectMap.get(a))==null?void 0:s.model;if(!n)continue;const o=this.computeVehiclePosition(a);if(o){const h=this.toRenderCoordinates(o);n.position.set(h[0],h[1],h[2]),n.rotation.y=l.MathUtils.degToRad(-o[3])}}const t=i.sunLight;this.sun.position.set(t.direction[0],t.direction[1],t.direction[2]),this.sun.intensity=t.diffuse.intensity,this.sun.color=new l.Color(t.diffuse.color[0],t.diffuse.color[1],t.diffuse.color[2]),this.ambient.intensity=t.ambient.intensity,this.ambient.color=new l.Color(t.ambient.color[0],t.ambient.color[1],t.ambient.color[2]),this.renderer.resetState(),i.bindRenderTarget(),this.renderer.render(this.scene,this.camera),M.requestRender(this.view),i.resetWebGLState()}async addVehicles(i){if(!(this.isPaused||!this.isInitialized))for(const e of i){const{vehicleId:t,localTimestamp:s}=e,a=Number(e.x),n=Number(e.y),o=Number(e.heading);this.historyPositionMap.set(t,[{pos:[a,n,0],heading:o,time:s}]);const h=this.getVehicleModel(e);h.name=t,h.visible=!this.needInterpolate;try{const r=await this.createPlateSprite(e);r&&(h.add(r),r.position.set(0,5,-4))}catch(r){console.log("createPlateSprite error:",r)}this.scene.add(h),this.vehicleObjectMap.set(t,{model:h,data:e,waitForDelete:!1,isMoving:!1})}}async updateVehicles(i){if(this.isPaused||!this.isInitialized)return;const e=[];for(const t of i){const{vehicleId:s,timestamp:a}=t,n=Number(t.x),o=Number(t.y);let h=Number(t.heading);const r=this.vehicleObjectMap.get(s),p=this.historyPositionMap.get(s);if(!r||!p)e.push(t);else{if(p.length>=5&&console.log(s,p.length),this.updateModel||r.data.vehicleColor!==t.vehicleColor||r.data.vehicleType!==t.vehicleType){this.scene.remove(r.model),this.disposeModel(r.model),r.model=this.getVehicleModel(t);const c=await this.createPlateSprite(t);c&&(r.model.add(c),c.position.set(0,5,-4)),this.scene.add(r.model)}if(r.data.showName!==t.showName||r.data.plateColor!==t.plateColor){const c=r.model.getObjectByName("VehiclePlate");c&&(r.model.remove(c),this.disposeModel(c));const g=await this.createPlateSprite(t);g&&(r.model.add(g),g.position.set(0,5,-4))}if(r.data=t,this.needInterpolate){const c=p[p.length-1];Math.abs(h-c.heading)>=180&&(h>c.heading?c.heading+=360:h+=360),p.push({pos:[n,o,0],heading:h,time:a})}else{this.historyPositionMap.set(s,[{pos:[n,o,0],heading:h,time:a}]);const c=this.toRenderCoordinates([n,o,0]);r.model.position.set(c[0],c[1],c[2]),r.model.rotation.y=l.MathUtils.degToRad(-h)}}}await this.addVehicles(e),this.updateModel=!1,this.needInterpolate||this.render(this.context)}toRenderCoordinates(i){const e=[0,0,0];return M.toRenderCoordinates(this.view,i,0,S.WGS84,e,0,1),e}deleteVehicles(i){this.isPaused||i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(this.needInterpolate?t.isMoving?t.waitForDelete=!0:this.deleteVehicle(t):this.deleteVehicle(t))})}deleteVehicle(i){this.scene.remove(i.model),this.disposeModel(i.model);const e=i.data.vehicleId;this.vehicleObjectMap.delete(e),this.historyPositionMap.delete(e)}async toggleTrafficInfo(i){i.name==="vehiclePlate"&&(i.visible===!0&&this.currentSpriteContent===d.EVehiclePlateState.None?await this.updatePanelContent(d.EVehiclePlateState.PlateNumber):await this.updatePanelContent(i.visible?this.currentSpriteContent:d.EVehiclePlateState.None))}togglePause(i){this.isPaused=i}clearVehicles(){for(const i of this.vehicleObjectMap.keys()){const e=this.vehicleObjectMap.get(i);e&&(this.disposeModel(e.model),this.scene.remove(e.model))}this.vehicleObjectMap.clear(),this.historyPositionMap.clear()}async updatePanelContent(i){if(i!==this.currentSpriteContent){this.currentSpriteContent=i;for(const e of this.vehicleObjectMap.keys()){const t=this.vehicleObjectMap.get(e);if(t){const s=t.model.getObjectByName("VehiclePlate");if(s&&(t.model.remove(s),this.disposeModel(s)),i!==d.EVehiclePlateState.None){const a=await this.createPlateSprite(t.data);a&&(t.model.add(a),a.position.set(0,5,-4))}}}}}toggleGroundVehicle(i){console.log("toggleGroundVehicle",i),this.showGroundVehicle=i}toggleElevatedVehicle(i){this.showElevatedVehicle=i}disposeModel(i){i.traverse(e=>{e instanceof l.Mesh&&(e.geometry.dispose(),e.material.dispose())})}computeVehiclePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!t||!e||!t.isMoving&&e.length<=2)return;const s=Date.now();t.isMoving=!0,t.data.roadLayer==="1"?t.model.visible=this.showGroundVehicle:t.model.visible=this.showElevatedVehicle,t.segmentStartTime||(t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time);const a=s-t.segmentStartTime,n=Math.min(a/t.segmentTotalTime,1);if(n===1)if(e.shift(),e.length===1){t.waitForDelete===!0?this.deleteVehicle(t):(t.segmentStartTime=void 0,t.segmentTotalTime=void 0,t.model.visible=!1,t.isMoving=!1,console.log("hide vehicle",i));return}else return t.segmentStartTime=Date.now(),t.segmentTotalTime=e[1].time-e[0].time,(e[1].heading>=270&&e[0].heading<=90||e[1].heading<=90&&e[0].heading>=270)&&(e[1].heading>e[0].heading?e[0].heading+=360:e[1].heading+=360),e[0].pos.concat(e[0].heading);else if(e.length>=2){const o=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*n,h=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*n,r=e[0].heading+(e[1].heading-e[0].heading)*n;return[o,h,0,r]}else return}getVehicleModel(i){if(this.view.camera.position.z>=this.cameraHeightThreshold){const e=new l.SphereGeometry(5,32,32),t=new l.MeshPhysicalMaterial({color:325253,emissive:0,roughness:this.roughness,metalness:this.metalness});return new l.Mesh(e,t)}else{let e;if(i.ptcType===2)e=this.bicycleModel.clone();else{switch(i.vehicleType){case 10:e=this.carModel.clone();break;case 20:e=this.vanModel.clone();break;case 25:e=this.truckModel.clone();break;case 50:e=this.busModel.clone();break;default:e=this.carModel.clone();break}const t=this.materialMap.get(i.vehicleColor)||this.defaultMaterial;let s=!1;e.traverse(a=>{!s&&a instanceof l.Mesh&&(a.material=t,s=!0)})}return e}}createCanvas(i,e,t){const s=document.createElement("canvas"),a=i.width,n=i.height;s.width=a,s.height=n;const o=s.getContext("2d");if(!o){console.log("canvas创建失败");return}return o.fillStyle="rgba(0,0,0,0.0)",o.fillRect(0,0,a,n),o.drawImage(i,0,0,a,n),o.beginPath(),o.translate(a/2,n/2),o.fillStyle=t,o.font="bold 32px 宋体",o.textBaseline="middle",o.textAlign="center",o.fillText(e,0,0),s}createPlateSprite(i){return new Promise((e,t)=>{var r,p;const s=!i.plateNo||i.plateNo==="0"||i.plateNo==="000000";if(this.currentSpriteContent===d.EVehiclePlateState.None||this.currentSpriteContent===d.EVehiclePlateState.PlateNumber&&s){e(void 0);return}let a=new Image,n="",o="";if(this.currentSpriteContent===d.EVehiclePlateState.PlateNumber||this.currentSpriteContent===d.EVehiclePlateState.Mix)if(s)a=this.greyPlateBG,n=i.ptcId,o="#ffffff";else switch(n=((r=i.showName)==null?void 0:r.substring(0,2))+"•"+((p=i.showName)==null?void 0:p.substring(2)),i.plateColor){case 1:a=this.bluePlateBG,o="#ffffff";break;case 2:a=this.yellowPlateBG,o="#000000";break;case 3:a=this.whitePlateBG,o="#000000";break;case 4:a=this.blackPlateBG,o="#ffffff";break;case 5:a=this.neoYellowPlateBG,o="#000000";break;case 6:a=this.neoGreenPlateBG,o="#000000";break;default:a=this.greyPlateBG,n=i.plateNo,o="#ffffff";break}else this.currentSpriteContent===d.EVehiclePlateState.Id&&(a=this.greyPlateBG,n=i.ptcId,o="#ffffff");const h=this.createCanvas(a,n,o);if(h){const c=new l.CanvasTexture(h),g=new l.SpriteMaterial({map:c,transparent:!1}),f=new l.Sprite(g),P=.05,w=h.width*P,b=h.height*P;f.scale.set(w,b,1),f.name="VehiclePlate",e(f)}else{t("canvas创建失败");return}a.onerror=c=>{console.log(`号牌背景加载失败: ${a.src}`,c),t(c)}})}}exports.default=I;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gisviewer-vue3-arcgis",
3
- "version": "1.0.109",
3
+ "version": "1.0.111",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.mjs",
6
6
  "files": [