gisviewer-vue3-arcgis 1.0.108 → 1.0.110

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.
Files changed (33) hide show
  1. package/es/src/gis-map/gis-map.vue.d.ts +3 -0
  2. package/es/src/gis-map/gis-map.vue.mjs +117 -98
  3. package/es/src/gis-map/index.d.ts +3 -0
  4. package/es/src/gis-map/stores/appData.d.ts +1 -0
  5. package/es/src/gis-map/stores/appData.mjs +5 -4
  6. package/es/src/gis-map/utils/holo-flow/index.d.ts +2 -0
  7. package/es/src/gis-map/utils/holo-flow/index.mjs +26 -27
  8. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +2 -0
  9. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.mjs +69 -57
  10. package/es/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +4 -3
  11. package/es/src/gis-map/utils/holo-flow/trace-holo-flow.mjs +92 -37
  12. package/es/src/gis-map/utils/holo-flow/trace-renderer-external.d.ts +9 -5
  13. package/es/src/gis-map/utils/holo-flow/trace-renderer-external.mjs +168 -121
  14. package/es/src/gis-map/utils/holo-flow/trace-renderer-layer.d.ts +1 -0
  15. package/es/src/gis-map/utils/holo-flow/trace-renderer-layer.mjs +3 -0
  16. package/es/src/types/index.d.ts +1 -0
  17. package/lib/src/gis-map/gis-map.vue.d.ts +3 -0
  18. package/lib/src/gis-map/gis-map.vue.js +1 -1
  19. package/lib/src/gis-map/index.d.ts +3 -0
  20. package/lib/src/gis-map/stores/appData.d.ts +1 -0
  21. package/lib/src/gis-map/stores/appData.js +1 -1
  22. package/lib/src/gis-map/utils/holo-flow/index.d.ts +2 -0
  23. package/lib/src/gis-map/utils/holo-flow/index.js +1 -1
  24. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +2 -0
  25. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.js +1 -1
  26. package/lib/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +4 -3
  27. package/lib/src/gis-map/utils/holo-flow/trace-holo-flow.js +2 -1
  28. package/lib/src/gis-map/utils/holo-flow/trace-renderer-external.d.ts +9 -5
  29. package/lib/src/gis-map/utils/holo-flow/trace-renderer-external.js +1 -1
  30. package/lib/src/gis-map/utils/holo-flow/trace-renderer-layer.d.ts +1 -0
  31. package/lib/src/gis-map/utils/holo-flow/trace-renderer-layer.js +1 -1
  32. package/lib/src/types/index.d.ts +1 -0
  33. package/package.json +1 -1
@@ -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 re, onMounted as se, getCurrentInstance as oe, computed as ce, openBlock as ie, createElementBlock as le, createElementVNode as me } from "vue";
2
- import pe, { registerStore as ue } 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 d 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 ye from "./utils/queue-length.mjs";
9
- import v from "./utils/road-config-tool/index.mjs";
10
- import Ce from "./utils/traffic-flow.mjs";
11
- const ve = { 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(O, { expose: w, emit: T }) {
19
- const m = re(null);
20
- let s, o, a, r, t, n, i, l;
21
- ue(), se(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 = oe(), { $gisviewerAssetsRoot: c } = e.appContext.config.globalProperties, C = await (await fetch(y.config)).json();
25
- C.assetsRoot = y.assetsRoot || c;
26
- const te = pe.useAppDataStore;
27
- te.mapConfig = C, o = new fe(), s = await o.initialize({
28
- container: m.value,
29
- markerClickCallback: (u, f, g, ne) => {
30
- p("markerClick", u, f, g, ne);
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
- }), t = new d(s), p("mapLoaded");
39
+ }), n = new ve(r), await n.init(), f("mapLoaded");
36
40
  });
37
- const k = ce(() => s), I = async (e) => await o.setMapCenter(e), b = async (e) => await o.setMapCamera(e), A = async (e) => await o.lookAt(e), L = (e) => o.setLayerVisibility(e), h = (e, c) => o.requestCoordinateTransform(e, c), D = (e) => {
38
- o.cancelCoordinateTransform(e);
39
- }, S = (e) => {
40
- o.setMapZoomRange(e);
41
- }, _ = (e) => (a || (a = new v(s)), a.showLaneNumber(e)), M = () => {
42
- a == null || a.clearLaneNumber();
43
- }, R = async (e) => (a || (a = new v(s)), await a.initializeSearch(e)), V = async () => a == null ? void 0 : a.calCrossIndicatorArea(), x = async () => {
44
- }, B = async (e, c) => {
45
- r || (r = new Ce(s)), r.connectTrafficFlow(e, c);
46
- }, H = () => {
47
- r == null || r.disconnectTrafficFlow();
48
- }, z = (e) => {
49
- t || (t = new d(s)), t.handleVehicleTraceData(e);
50
- }, N = () => {
51
- t == null || t.clearHoloTrace();
52
- }, Q = (e) => {
53
- t == null || t.setInterpolate(e);
54
- }, j = async (e) => {
55
- t || (t = new d(s)), await t.handleSignalData(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) => {
47
+ s.cancelCoordinateTransform(e);
48
+ }, V = (e) => {
49
+ s.setMapZoomRange(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);
56
55
  }, P = () => {
57
- t == null || t.clearHoloSignal();
56
+ a == null || a.disconnectTrafficFlow();
58
57
  }, E = (e) => {
59
- r == null || r.toggleTrafficInfo(e), t == null || t.toggleTrafficInfo(e);
60
- }, Z = (e) => {
61
- t == null || t.togglePause(e);
58
+ n.handleVehicleTraceData(e);
59
+ }, Z = () => {
60
+ n.clearHoloTrace();
62
61
  }, q = (e) => {
63
- t == null || t.toggleTrafficObject(e), r == null || r.toggleTrafficObject(e);
62
+ n.setInterpolate(e);
63
+ }, F = async (e) => {
64
+ await n.handleSignalData(e);
65
+ }, K = () => {
66
+ n.clearHoloSignal();
64
67
  }, $ = (e) => {
65
- t == null || t.updatePanelContent(e);
66
- }, G = async (e) => (n || (n = new de(s)), n.addOverlays(e)), J = (e) => n == null ? void 0 : n.removeOverlaysByType(e), K = (e) => n == null ? void 0 : n.removeOverlaysById(e), U = () => n == null ? void 0 : n.removeAllOverlays(), W = () => {
67
- n == null || n.showAllOverlays();
68
- }, X = (e) => {
69
- i || (i = new ye(s)), i.updateQueueLength(e);
70
- }, Y = () => {
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);
73
+ }, U = (e) => {
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
- }, F = async (e, c) => {
73
- l || (l = new ge(s)), await l.showOpenDrive(e, c);
74
- }, ee = 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
- }, y = O, p = T;
77
- return w({
78
- mapViewer: k,
79
- setLayerVisibility: L,
80
- setMapCenter: I,
81
- lookAt: A,
82
- setMapCamera: b,
83
- setMapZoomRange: S,
84
- requestCoordinateTransform: h,
85
- cancelCoordinateTransform: D,
86
- addOverlays: G,
87
- showAllOverlays: W,
88
- removeOverlaysByType: J,
89
- removeOverlaysById: K,
90
- removeAllOverlays: U,
91
- showLaneNumber: _,
92
- clearLaneNumber: M,
93
- initializeAreaTool: R,
94
- calCrossIndicatorArea: V,
95
- calRoadIndicatorArea: x,
96
- connectCarFlow: B,
97
- disconnectCarFlow: H,
98
- handleHoloVehicleTraceData: z,
99
- clearHoloTrace: N,
100
- handleHoloSignalData: j,
101
- clearHoloSignal: P,
102
- setInterpolate: Q,
103
- toggleTrafficInfo: E,
104
- toggleTrafficObject: q,
105
- toggleVehicleInfo: $,
106
- togglePause: Z,
107
- updateQueueLength: X,
108
- removeQueueLength: Y,
109
- showOpenDrive: F,
110
- hideOpenDrive: ee
111
- }), (e, c) => (ie(), le("div", ve, [
112
- me("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
  };
@@ -5,6 +5,7 @@ export default class Index {
5
5
  private traceHoloFlow;
6
6
  private signalHoloFlow;
7
7
  constructor(view: View);
8
+ init(): Promise<void>;
8
9
  /**
9
10
  * 处理全息流轨迹数据
10
11
  * */
@@ -17,4 +18,5 @@ export default class Index {
17
18
  handleSignalData(data: any): Promise<void>;
18
19
  clearHoloSignal(): void;
19
20
  setInterpolate(enable: boolean): void;
21
+ downloadTrackLog(): void;
20
22
  }
@@ -1,73 +1,72 @@
1
- import { EVehiclePlateState as a } from "../../../types/index.mjs";
2
- import t from "./signal-holo-flow.mjs";
3
- import i from "./trace-holo-flow.mjs";
4
- class h {
1
+ import { EVehiclePlateState as l } from "../../../types/index.mjs";
2
+ import a from "./signal-holo-flow.mjs";
3
+ import t from "./trace-holo-flow.mjs";
4
+ class n {
5
5
  constructor(e) {
6
6
  this.view = e;
7
7
  }
8
+ async init() {
9
+ this.traceHoloFlow = new t(this.view), await this.traceHoloFlow.init();
10
+ }
8
11
  /**
9
12
  * 处理全息流轨迹数据
10
13
  * */
11
14
  handleVehicleTraceData(e) {
12
- this.traceHoloFlow || (this.traceHoloFlow = new i(this.view)), this.traceHoloFlow.handleVehicleTraceData(e);
15
+ this.traceHoloFlow.handleVehicleTraceData(e);
13
16
  }
14
17
  toggleTrafficObject(e) {
15
- var o, l;
16
18
  switch (e.name.toLowerCase()) {
17
19
  case "groundVehicle".toLowerCase():
18
- (o = this.traceHoloFlow) == null || o.toggleGroundVehicle(e.visible);
20
+ this.traceHoloFlow.toggleGroundVehicle(e.visible);
19
21
  break;
20
22
  case "elevatedVehicle".toLowerCase():
21
- (l = this.traceHoloFlow) == null || l.toggleElevatedVehicle(e.visible);
23
+ this.traceHoloFlow.toggleElevatedVehicle(e.visible);
22
24
  break;
23
25
  }
24
26
  }
25
27
  clearHoloTrace() {
26
- var e;
27
- (e = this.traceHoloFlow) == null || e.clearTrace();
28
+ this.traceHoloFlow.clearTrace();
28
29
  }
29
30
  // public toggleVehiclePlate(visible: boolean): void {
30
31
  // this.traceHoloFlow?.togglePlateLayer(visible);
31
32
  // }
32
33
  toggleTrafficInfo(e) {
33
- var o;
34
- (o = this.traceHoloFlow) == null || o.toggleTrafficInfo(e);
34
+ this.traceHoloFlow.toggleTrafficInfo(e);
35
35
  }
36
36
  togglePause(e) {
37
- var o;
38
- (o = this.traceHoloFlow) == null || o.togglePause(e);
37
+ this.traceHoloFlow.togglePause(e);
39
38
  }
40
39
  updatePanelContent(e) {
41
- var l;
42
- let o = a.None;
40
+ let o = l.None;
43
41
  switch (e) {
44
42
  case "none":
45
- o = a.None;
43
+ o = l.None;
46
44
  break;
47
45
  case "plateNumber":
48
- o = a.PlateNumber;
46
+ o = l.PlateNumber;
49
47
  break;
50
48
  case "vehicleId":
51
- o = a.Id;
49
+ o = l.Id;
52
50
  break;
53
51
  case "mix":
54
- o = a.Mix;
52
+ o = l.Mix;
55
53
  break;
56
54
  }
57
- (l = this.traceHoloFlow) == null || l.updatePanelContent(o);
55
+ this.traceHoloFlow.updatePanelContent(o);
58
56
  }
59
57
  async handleSignalData(e) {
60
- this.signalHoloFlow || (this.signalHoloFlow = new t(this.view)), await this.signalHoloFlow.initializeLayer(), await this.signalHoloFlow.handleSignalData(e);
58
+ this.signalHoloFlow || (this.signalHoloFlow = new a(this.view)), await this.signalHoloFlow.initializeLayer(), await this.signalHoloFlow.handleSignalData(e);
61
59
  }
62
60
  clearHoloSignal() {
63
- var e;
64
- (e = this.signalHoloFlow) == null || e.clearSignal();
61
+ this.signalHoloFlow.clearSignal();
65
62
  }
66
63
  setInterpolate(e) {
67
- var o;
68
- (o = this.traceHoloFlow) == null || o.setInterpolate(e);
64
+ this.traceHoloFlow.setInterpolate(e);
65
+ }
66
+ downloadTrackLog() {
67
+ this.traceHoloFlow.downloadLog();
69
68
  }
70
69
  }
71
70
  export {
72
- h as default
71
+ n as default
73
72
  };
@@ -9,12 +9,14 @@ export default class SignalHoloFlow {
9
9
  /** 每个路口倒计时canvas */
10
10
  private countdownCanvasMap;
11
11
  private countdownWatchHandel;
12
+ private plateBackground;
12
13
  private lastDataTime;
13
14
  constructor(view: View);
14
15
  /**
15
16
  * 初始化相位线图层
16
17
  * */
17
18
  initializeLayer(): Promise<void>;
19
+ private initializePlateBackground;
18
20
  handleSignalData(data: any): Promise<void>;
19
21
  /**
20
22
  * 清除实时信号相关图层
@@ -12,23 +12,23 @@ class f {
12
12
  * 初始化相位线图层
13
13
  * */
14
14
  async initializeLayer() {
15
- if (this.mapConfig.phaseLineLayer)
15
+ if (await this.initializePlateBackground(), !!this.mapConfig.phaseLineLayer)
16
16
  if (this.phaseLineLayer)
17
17
  this.phaseLineLayer.visible || (this.phaseLineLayer.visible = !0);
18
18
  else {
19
- const e = `${this.mapConfig.assetsRoot}/${this.mapConfig.phaseLineLayer}`, n = (await (await fetch(e)).json()).features.map((s, t) => ({
19
+ const e = `${this.mapConfig.assetsRoot}/${this.mapConfig.phaseLineLayer}`, s = (await (await fetch(e)).json()).features.map((n, i) => ({
20
20
  geometry: {
21
21
  type: "polyline",
22
- paths: [s.geometry.coordinates]
22
+ paths: [n.geometry.coordinates]
23
23
  },
24
24
  attributes: {
25
- ObjectID: t + 1,
26
- id: s.properties.id,
25
+ ObjectID: i + 1,
26
+ id: n.properties.id,
27
27
  color: "hide"
28
28
  }
29
29
  }));
30
30
  this.phaseLineLayer = new p({
31
- source: n,
31
+ source: s,
32
32
  geometryType: "polyline",
33
33
  objectIdField: "ObjectID",
34
34
  outFields: ["*"],
@@ -105,13 +105,23 @@ class f {
105
105
  }), this.view.map.add(this.phaseLineLayer);
106
106
  }
107
107
  }
108
+ async initializePlateBackground() {
109
+ return new Promise((e, a) => {
110
+ const t = new Image();
111
+ t.src = `${this.mapConfig.assetsRoot}/Images/timeboard/CountdownBG.png`, t.onload = () => {
112
+ this.plateBackground = t, e();
113
+ }, t.onerror = (s) => {
114
+ a(s);
115
+ };
116
+ });
117
+ }
108
118
  async handleSignalData(e) {
109
- const { crossId: a, lat: i, lon: n, rtStage: s, channelsConfig: t } = e;
110
- await this.updateCountdown(a, i, n, s), !(!this.phaseLineLayer || !t) && ((!this.currentPhaseMap.has(a) || this.currentPhaseMap.get(a) !== s.stagePhase) && await this.updatePhaseLine(
119
+ const { crossId: a, lat: t, lon: s, rtStage: n, channelsConfig: i } = e;
120
+ await this.updateCountdown(a, t, s, n), !(!this.phaseLineLayer || !i) && ((!this.currentPhaseMap.has(a) || this.currentPhaseMap.get(a) !== n.stagePhase) && await this.updatePhaseLine(
111
121
  a,
112
- s.channelsConfig,
113
- t
114
- ), this.currentPhaseMap.set(a, s.stagePhase));
122
+ n.channelsConfig,
123
+ i
124
+ ), this.currentPhaseMap.set(a, n.stagePhase));
115
125
  }
116
126
  /**
117
127
  * 清除实时信号相关图层
@@ -124,33 +134,36 @@ class f {
124
134
  /**
125
135
  * 获取显示倒计时的canvas
126
136
  * */
127
- async updateCountdown(e, a, i, n) {
137
+ async updateCountdown(e, a, t, s) {
128
138
  if (this.isDeletingCanvas)
129
139
  return;
130
- const s = this.countdownCanvasMap.get(e);
131
- if (s)
132
- this.drawCountdownText(s.countdownCanvas, n);
140
+ const n = this.countdownCanvasMap.get(e);
141
+ if (n)
142
+ this.drawCountdownText(n.countdownCanvas, s);
133
143
  else
134
144
  try {
135
- const t = new c({
136
- longitude: i,
145
+ const i = new c({
146
+ longitude: t,
137
147
  latitude: a,
138
148
  z: 10
139
- }), o = this.view.toScreen(t), l = await this.createCountdownCanvas(), h = l[0], r = l[1];
149
+ }), o = this.view.toScreen(i), l = this.createCountdownCanvas();
150
+ if (!l)
151
+ return;
152
+ const h = l[0], r = l[1];
140
153
  h.style.left = o.x + "px", h.style.top = o.y + "px", r.style.left = o.x + "px", r.style.top = o.y + "px", this.countdownCanvasMap.set(e, {
141
154
  backgroundCanvas: h,
142
155
  countdownCanvas: r,
143
- mapPoint: t
144
- }), this.drawCountdownText(r, n);
145
- } catch (t) {
146
- console.log("倒计时canvas创建失败", e, t);
156
+ mapPoint: i
157
+ }), this.drawCountdownText(r, s);
158
+ } catch (i) {
159
+ console.log("倒计时canvas创建失败", e, i);
147
160
  }
148
161
  this.countdownWatchHandel || (this.countdownWatchHandel = d.watch(
149
162
  () => this.view.extent,
150
163
  () => {
151
- this.countdownCanvasMap.forEach((t) => {
152
- const o = this.view.toScreen(t.mapPoint);
153
- t.backgroundCanvas.style.left = o.x + "px", t.backgroundCanvas.style.top = o.y + "px", t.countdownCanvas.style.left = o.x + "px", t.countdownCanvas.style.top = o.y + "px";
164
+ this.countdownCanvasMap.forEach((i) => {
165
+ const o = this.view.toScreen(i.mapPoint);
166
+ i.backgroundCanvas.style.left = o.x + "px", i.backgroundCanvas.style.top = o.y + "px", i.countdownCanvas.style.left = o.x + "px", i.countdownCanvas.style.top = o.y + "px";
154
167
  });
155
168
  }
156
169
  ));
@@ -165,8 +178,8 @@ class f {
165
178
  * @param rtStage.stageYellowTime 黄灯时间
166
179
  */
167
180
  drawCountdownText(e, a) {
168
- const i = e.getContext("2d");
169
- i.clearRect(0, 0, e.width, e.height), i.font = "24px Digital", i.textBaseline = "middle", i.textAlign = "center", i.fillStyle = a.stageRemainingTime <= a.stageAllRedTime ? "red" : a.stageRemainingTime <= a.stageAllRedTime + a.stageYellowTime ? "yellow" : "lime", i.fillText(
181
+ const t = e.getContext("2d");
182
+ t.clearRect(0, 0, e.width, e.height), t.font = "24px Digital", t.textBaseline = "middle", t.textAlign = "center", t.fillStyle = a.stageRemainingTime <= a.stageAllRedTime ? "red" : a.stageRemainingTime <= a.stageAllRedTime + a.stageYellowTime ? "yellow" : "lime", t.fillText(
170
183
  `${a.stageID} ${a.stageRemainingTime.toFixed(0)}`,
171
184
  e.width / 2,
172
185
  e.height / 2
@@ -174,9 +187,9 @@ class f {
174
187
  }
175
188
  drawCircle(e, a) {
176
189
  console.log(a);
177
- const i = e.getContext("2d");
178
- i.clearRect(0, 0, e.width, e.height), this.ctxDraw(
179
- i,
190
+ const t = e.getContext("2d");
191
+ t.clearRect(0, 0, e.width, e.height), this.ctxDraw(
192
+ t,
180
193
  "lime",
181
194
  e.width / 2,
182
195
  e.height / 2,
@@ -185,17 +198,17 @@ class f {
185
198
  -Math.PI / 2 + 2 * 0.6 * Math.PI
186
199
  );
187
200
  }
188
- ctxDraw(e, a, i, n, s, t, o) {
189
- e.save, e.beginPath(), e.lineWidth = 4, e.strokeStyle = a, e.arc(i, n, s, t, o), e.stroke(), e.closePath(), e.font = "26px Digital", e.textBaseline = "middle", e.textAlign = "center", e.fillText("A", i, n), e.restore();
201
+ ctxDraw(e, a, t, s, n, i, o) {
202
+ e.save, e.beginPath(), e.lineWidth = 4, e.strokeStyle = a, e.arc(t, s, n, i, o), e.stroke(), e.closePath(), e.font = "26px Digital", e.textBaseline = "middle", e.textAlign = "center", e.fillText("A", t, s), e.restore();
190
203
  }
191
- async updatePhaseLine(e, a, i) {
192
- const n = this.phaseLineLayer.source.filter(
193
- (s) => s.getAttribute("id").includes(e)
204
+ async updatePhaseLine(e, a, t) {
205
+ const s = this.phaseLineLayer.source.filter(
206
+ (n) => n.getAttribute("id").includes(e)
194
207
  );
195
- n.forEach((s) => {
196
- const t = s.getAttribute("id");
197
- this.isLaneInChannels(t, a) ? s.setAttribute("color", "green") : this.isLaneInChannels(t, i) ? s.setAttribute("color", "red") : s.setAttribute("color", "green");
198
- }), await this.phaseLineLayer.applyEdits({ updateFeatures: n });
208
+ s.forEach((n) => {
209
+ const i = n.getAttribute("id");
210
+ this.isLaneInChannels(i, a) ? n.setAttribute("color", "green") : this.isLaneInChannels(i, t) ? n.setAttribute("color", "red") : n.setAttribute("color", "green");
211
+ }), await this.phaseLineLayer.applyEdits({ updateFeatures: s });
199
212
  }
200
213
  /**
201
214
  * 车道是否在通道中
@@ -204,29 +217,28 @@ class f {
204
217
  * @returns
205
218
  */
206
219
  isLaneInChannels(e, a) {
207
- const i = e.split("+"), n = i[1], s = i[2];
208
- for (let t = 0; t < a.length; t++)
209
- for (let o = 0; o < a[t].laneSnList.length; o++) {
210
- const l = a[t].laneSnList[o].toFixed(0);
211
- if (n === l[0] && s === l[1])
220
+ const t = e.split("+"), s = t[1], n = t[2];
221
+ for (let i = 0; i < a.length; i++)
222
+ for (let o = 0; o < a[i].laneSnList.length; o++) {
223
+ const l = a[i].laneSnList[o].toFixed(0);
224
+ if (s === l[0] && n === l[1])
212
225
  return !0;
213
226
  }
214
227
  return !1;
215
228
  }
216
229
  createCountdownCanvas() {
217
- return new Promise((e, a) => {
218
- const i = new Image();
219
- i.src = `${this.mapConfig.assetsRoot}/Images/timeboard/CountdownBG.png`, i.onload = () => {
220
- const n = document.createElement("canvas");
221
- n.width = this.canvasWidth, n.height = this.canvasHeight, n.style.position = "absolute", n.style.transform = "translate(-50%, -50%)", n.getContext(
222
- "2d"
223
- ).drawImage(i, 0, 0, this.canvasWidth, this.canvasHeight), this.view.container.appendChild(n);
224
- const t = document.createElement("canvas");
225
- t.width = this.canvasWidth - 10, t.height = this.canvasHeight - 10, t.style.position = "absolute", t.style.transform = "translate(-50%, -50%)", this.view.container.appendChild(t), e([n, t]);
226
- }, i.onerror = (n) => {
227
- a(n);
228
- };
229
- });
230
+ if (!this.plateBackground)
231
+ return;
232
+ const e = document.createElement("canvas");
233
+ e.width = this.canvasWidth, e.height = this.canvasHeight, e.style.position = "absolute", e.style.transform = "translate(-50%, -50%)", e.getContext("2d").drawImage(
234
+ this.plateBackground,
235
+ 0,
236
+ 0,
237
+ this.canvasWidth,
238
+ this.canvasHeight
239
+ ), this.view.container.appendChild(e);
240
+ const t = document.createElement("canvas");
241
+ return t.width = this.canvasWidth - 10, t.height = this.canvasHeight - 10, t.style.position = "absolute", t.style.transform = "translate(-50%, -50%)", this.view.container.appendChild(t), [e, t];
230
242
  }
231
243
  }
232
244
  export {
@@ -1,10 +1,11 @@
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);
5
+ init(): Promise<void>;
6
+ private appDataStore;
7
+ private logTable;
8
+ downloadLog(): void;
8
9
  /**
9
10
  * 处理全息流轨迹数据
10
11
  * */