gisviewer-vue3-arcgis 1.0.90 → 1.0.92
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.
- package/es/src/gis-map/gis-map.vue.d.ts +3 -5
- package/es/src/gis-map/gis-map.vue.mjs +64 -65
- package/es/src/gis-map/index.d.ts +2 -4
- package/es/src/gis-map/utils/holo-flow/index.d.ts +2 -0
- package/es/src/gis-map/utils/holo-flow/index.mjs +30 -19
- package/es/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +9 -0
- package/es/src/gis-map/utils/holo-flow/signal-holo-flow.mjs +46 -37
- package/es/src/gis-map/utils/holo-flow/trace-external-renderer.d.ts +2 -0
- package/es/src/gis-map/utils/holo-flow/trace-external-renderer.mjs +11 -7
- package/es/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +2 -0
- package/es/src/gis-map/utils/holo-flow/trace-holo-flow.mjs +49 -41
- package/es/src/gis-map/utils/holo-flow/trace-layer-renderer.d.ts +12 -0
- package/es/src/gis-map/utils/holo-flow/trace-layer-renderer.mjs +31 -17
- package/es/src/gis-map/utils/map-initializer.mjs +113 -104
- package/es/src/gis-map/utils/traffic-flow.d.ts +14 -3
- package/es/src/gis-map/utils/traffic-flow.mjs +156 -130
- package/es/src/types/index.d.ts +9 -2
- package/lib/src/gis-map/gis-map.vue.d.ts +3 -5
- package/lib/src/gis-map/gis-map.vue.js +1 -1
- package/lib/src/gis-map/index.d.ts +2 -4
- package/lib/src/gis-map/utils/holo-flow/index.d.ts +2 -0
- package/lib/src/gis-map/utils/holo-flow/index.js +1 -1
- package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +9 -0
- package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.js +1 -1
- package/lib/src/gis-map/utils/holo-flow/trace-external-renderer.d.ts +2 -0
- package/lib/src/gis-map/utils/holo-flow/trace-external-renderer.js +1 -1
- package/lib/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +2 -0
- package/lib/src/gis-map/utils/holo-flow/trace-holo-flow.js +1 -1
- package/lib/src/gis-map/utils/holo-flow/trace-layer-renderer.d.ts +12 -0
- package/lib/src/gis-map/utils/holo-flow/trace-layer-renderer.js +1 -1
- package/lib/src/gis-map/utils/map-initializer.js +1 -1
- package/lib/src/gis-map/utils/traffic-flow.d.ts +14 -3
- package/lib/src/gis-map/utils/traffic-flow.js +1 -1
- package/lib/src/types/index.d.ts +9 -2
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import MapView from '@arcgis/core/views/MapView';
|
|
2
2
|
import SceneView from '@arcgis/core/views/SceneView';
|
|
3
|
-
import { ILaneNumberParams, ILayerVisibleParams, ILookAtParams, IOverlayParam, IQueueLengthParams, ISetMapCameraParams, ISetMapCenterParams, IStartCrossBufferParam } from '../types';
|
|
3
|
+
import { ILaneNumberParams, ILayerVisibleParams, ILookAtParams, IOverlayParam, IQueueLengthParams, ISetMapCameraParams, ISetMapCenterParams, IStartCrossBufferParam, IToggleTrafficInfoParams } from '../types';
|
|
4
4
|
import HoloFlow from './utils/holo-flow';
|
|
5
5
|
import MapInitializer from './utils/map-initializer';
|
|
6
6
|
import OpenDriveRenderer from './utils/open-drive-renderer';
|
|
@@ -52,10 +52,8 @@ declare const _sfc_main: import("vue").DefineComponent<{
|
|
|
52
52
|
clearHoloTrace: () => void;
|
|
53
53
|
handleHoloSignalData: (signalData: any) => Promise<void>;
|
|
54
54
|
clearHoloSignal: () => void;
|
|
55
|
-
toggleTrafficInfo: (params:
|
|
56
|
-
|
|
57
|
-
visible: boolean;
|
|
58
|
-
}) => void;
|
|
55
|
+
toggleTrafficInfo: (params: IToggleTrafficInfoParams) => void;
|
|
56
|
+
toggleTrafficObject: (params: IToggleTrafficInfoParams) => void;
|
|
59
57
|
toggleVehicleInfo: (contentType: string) => void;
|
|
60
58
|
addOverlays: (params: IOverlayParam) => Promise<import("../types").IResult>;
|
|
61
59
|
removeOverlaysByType: (types: string[]) => import("../types").IResult;
|
|
@@ -1,91 +1,89 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
1
|
+
import { defineComponent as te, ref as ae, onMounted as ne, getCurrentInstance as re, computed as oe, openBlock as se, createElementBlock as ce, createElementVNode as ie } from "vue";
|
|
2
|
+
import le, { registerStore as me } from "./stores/index.mjs";
|
|
3
3
|
import "./style/index.css";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
4
|
+
import g from "./utils/holo-flow/index.mjs";
|
|
5
|
+
import pe from "./utils/map-initializer.mjs";
|
|
6
|
+
import ue from "./utils/open-drive-renderer/index.mjs";
|
|
7
|
+
import fe from "./utils/overlay.mjs";
|
|
8
8
|
import de from "./utils/queue-length.mjs";
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
const
|
|
9
|
+
import v from "./utils/road-config-tool/index.mjs";
|
|
10
|
+
import ge from "./utils/traffic-flow.mjs";
|
|
11
|
+
const ye = { class: "gis-viewer" }, Le = /* @__PURE__ */ te({
|
|
12
12
|
__name: "gis-map",
|
|
13
13
|
props: {
|
|
14
14
|
config: {},
|
|
15
15
|
assetsRoot: {}
|
|
16
16
|
},
|
|
17
17
|
emits: ["mapLoaded", "markerClick", "mapClick"],
|
|
18
|
-
setup(
|
|
19
|
-
const m =
|
|
20
|
-
let
|
|
21
|
-
|
|
18
|
+
setup(w, { expose: O, emit: T }) {
|
|
19
|
+
const m = ae(null);
|
|
20
|
+
let o, s, n, r, t, a, i, l;
|
|
21
|
+
me(), ne(async () => {
|
|
22
22
|
if (!m.value)
|
|
23
23
|
return;
|
|
24
|
-
const e =
|
|
25
|
-
C.assetsRoot = y.assetsRoot ||
|
|
26
|
-
const
|
|
27
|
-
|
|
24
|
+
const e = re(), { $gisviewerAssetsRoot: c } = e.appContext.config.globalProperties, C = await (await fetch(y.config)).json();
|
|
25
|
+
C.assetsRoot = y.assetsRoot || c;
|
|
26
|
+
const F = le.useAppDataStore;
|
|
27
|
+
F.mapConfig = C, s = new pe(), o = await s.initialize({
|
|
28
28
|
container: m.value,
|
|
29
|
-
markerClickCallback: (u,
|
|
30
|
-
p("markerClick", u,
|
|
29
|
+
markerClickCallback: (u, f, d, ee) => {
|
|
30
|
+
p("markerClick", u, f, d, ee);
|
|
31
31
|
},
|
|
32
|
-
mapClickCallback: (u,
|
|
33
|
-
p("mapClick", u,
|
|
32
|
+
mapClickCallback: (u, f, d) => {
|
|
33
|
+
p("mapClick", u, f, d);
|
|
34
34
|
}
|
|
35
|
-
}), t = new
|
|
35
|
+
}), t = new g(o), p("mapLoaded");
|
|
36
36
|
});
|
|
37
|
-
const
|
|
38
|
-
|
|
37
|
+
const h = oe(() => o), k = async (e) => await s.setMapCenter(e), b = async (e) => await s.setMapCamera(e), A = async (e) => await s.lookAt(e), I = (e) => s.setLayerVisibility(e), L = (e, c) => s.requestCoordinateTransform(e, c), D = (e) => {
|
|
38
|
+
s.cancelCoordinateTransform(e);
|
|
39
39
|
}, S = (e) => {
|
|
40
|
-
|
|
41
|
-
}, _ = (e) => (n || (n = new
|
|
40
|
+
s.setMapZoomRange(e);
|
|
41
|
+
}, _ = (e) => (n || (n = new v(o)), n.showLaneNumber(e)), M = () => {
|
|
42
42
|
n == null || n.clearLaneNumber();
|
|
43
|
-
}, R = async (e) => (n || (n = new
|
|
44
|
-
}, B = async (e,
|
|
45
|
-
|
|
43
|
+
}, R = async (e) => (n || (n = new v(o)), await n.initializeSearch(e)), V = async () => n == null ? void 0 : n.calCrossIndicatorArea(), x = async () => {
|
|
44
|
+
}, B = async (e, c) => {
|
|
45
|
+
r || (r = new ge(o)), r.connectTrafficFlow(e, c);
|
|
46
46
|
}, H = () => {
|
|
47
|
-
|
|
47
|
+
r == null || r.disconnectTrafficFlow();
|
|
48
48
|
}, z = (e) => {
|
|
49
|
-
t || (t = new
|
|
49
|
+
t || (t = new g(o)), t.handleVehicleTraceData(e);
|
|
50
50
|
}, N = () => {
|
|
51
51
|
t == null || t.clearHoloTrace();
|
|
52
52
|
}, Q = async (e) => {
|
|
53
|
-
t || (t = new
|
|
54
|
-
},
|
|
53
|
+
t || (t = new g(o)), await t.handleSignalData(e);
|
|
54
|
+
}, j = () => {
|
|
55
55
|
t == null || t.clearHoloSignal();
|
|
56
56
|
}, E = (e) => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
57
|
+
r == null || r.toggleTrafficInfo(e);
|
|
58
|
+
}, P = (e) => {
|
|
59
|
+
t == null || t.toggleTrafficObject(e), r == null || r.toggleTrafficObject(e);
|
|
62
60
|
}, Z = (e) => {
|
|
63
61
|
t == null || t.updatePanelContent(e);
|
|
64
|
-
},
|
|
62
|
+
}, q = async (e) => (a || (a = new fe(o)), a.addOverlays(e)), $ = (e) => a == null ? void 0 : a.removeOverlaysByType(e), G = (e) => a == null ? void 0 : a.removeOverlaysById(e), J = () => a == null ? void 0 : a.removeAllOverlays(), K = () => {
|
|
65
63
|
a == null || a.showAllOverlays();
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
|
|
70
|
-
},
|
|
71
|
-
l || (l = new
|
|
72
|
-
},
|
|
64
|
+
}, U = (e) => {
|
|
65
|
+
i || (i = new de(o)), i.updateQueueLength(e);
|
|
66
|
+
}, W = () => {
|
|
67
|
+
i == null || i.removeQueueLength();
|
|
68
|
+
}, X = async (e, c) => {
|
|
69
|
+
l || (l = new ue(o)), await l.showOpenDrive(e, c);
|
|
70
|
+
}, Y = async () => {
|
|
73
71
|
await (l == null ? void 0 : l.hideOpenDrive());
|
|
74
|
-
}, y =
|
|
75
|
-
return
|
|
76
|
-
mapViewer:
|
|
77
|
-
setLayerVisibility:
|
|
78
|
-
setMapCenter:
|
|
72
|
+
}, y = w, p = T;
|
|
73
|
+
return O({
|
|
74
|
+
mapViewer: h,
|
|
75
|
+
setLayerVisibility: I,
|
|
76
|
+
setMapCenter: k,
|
|
79
77
|
lookAt: A,
|
|
80
|
-
setMapCamera:
|
|
78
|
+
setMapCamera: b,
|
|
81
79
|
setMapZoomRange: S,
|
|
82
|
-
requestCoordinateTransform:
|
|
80
|
+
requestCoordinateTransform: L,
|
|
83
81
|
cancelCoordinateTransform: D,
|
|
84
|
-
addOverlays:
|
|
85
|
-
showAllOverlays:
|
|
86
|
-
removeOverlaysByType:
|
|
87
|
-
removeOverlaysById:
|
|
88
|
-
removeAllOverlays:
|
|
82
|
+
addOverlays: q,
|
|
83
|
+
showAllOverlays: K,
|
|
84
|
+
removeOverlaysByType: $,
|
|
85
|
+
removeOverlaysById: G,
|
|
86
|
+
removeAllOverlays: J,
|
|
89
87
|
showLaneNumber: _,
|
|
90
88
|
clearLaneNumber: M,
|
|
91
89
|
initializeAreaTool: R,
|
|
@@ -96,14 +94,15 @@ const we = { class: "gis-viewer" }, be = /* @__PURE__ */ ee({
|
|
|
96
94
|
handleHoloVehicleTraceData: z,
|
|
97
95
|
clearHoloTrace: N,
|
|
98
96
|
handleHoloSignalData: Q,
|
|
99
|
-
clearHoloSignal:
|
|
97
|
+
clearHoloSignal: j,
|
|
100
98
|
toggleTrafficInfo: E,
|
|
99
|
+
toggleTrafficObject: P,
|
|
101
100
|
toggleVehicleInfo: Z,
|
|
102
|
-
updateQueueLength:
|
|
103
|
-
removeQueueLength:
|
|
104
|
-
showOpenDrive:
|
|
105
|
-
hideOpenDrive:
|
|
106
|
-
}), (e,
|
|
101
|
+
updateQueueLength: U,
|
|
102
|
+
removeQueueLength: W,
|
|
103
|
+
showOpenDrive: X,
|
|
104
|
+
hideOpenDrive: Y
|
|
105
|
+
}), (e, c) => (se(), ce("div", ye, [
|
|
107
106
|
ie("div", {
|
|
108
107
|
class: "gis-viewer-main",
|
|
109
108
|
ref_key: "mapContainer",
|
|
@@ -113,5 +112,5 @@ const we = { class: "gis-viewer" }, be = /* @__PURE__ */ ee({
|
|
|
113
112
|
}
|
|
114
113
|
});
|
|
115
114
|
export {
|
|
116
|
-
|
|
115
|
+
Le as default
|
|
117
116
|
};
|
|
@@ -42,10 +42,8 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
|
|
|
42
42
|
clearHoloTrace: () => void;
|
|
43
43
|
handleHoloSignalData: (signalData: any) => Promise<void>;
|
|
44
44
|
clearHoloSignal: () => void;
|
|
45
|
-
toggleTrafficInfo: (params:
|
|
46
|
-
|
|
47
|
-
visible: boolean;
|
|
48
|
-
}) => void;
|
|
45
|
+
toggleTrafficInfo: (params: import("../types").IToggleTrafficInfoParams) => void;
|
|
46
|
+
toggleTrafficObject: (params: import("../types").IToggleTrafficInfoParams) => void;
|
|
49
47
|
toggleVehicleInfo: (contentType: string) => void;
|
|
50
48
|
addOverlays: (params: import("../types").IOverlayParam) => Promise<import("../types").IResult>;
|
|
51
49
|
removeOverlaysByType: (types: string[]) => import("../types").IResult;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import View from '@arcgis/core/views/View';
|
|
2
|
+
import { IToggleTrafficInfoParams } from '../../../types';
|
|
2
3
|
export default class Index {
|
|
3
4
|
private readonly view;
|
|
4
5
|
private traceHoloFlow;
|
|
@@ -8,6 +9,7 @@ export default class Index {
|
|
|
8
9
|
* 处理全息流轨迹数据
|
|
9
10
|
* */
|
|
10
11
|
handleVehicleTraceData(data: any): void;
|
|
12
|
+
toggleTrafficObject(params: IToggleTrafficInfoParams): void;
|
|
11
13
|
clearHoloTrace(): void;
|
|
12
14
|
updatePanelContent(contentType: string): void;
|
|
13
15
|
handleSignalData(data: any): Promise<void>;
|
|
@@ -1,48 +1,59 @@
|
|
|
1
|
-
import { EVehiclePlateState as
|
|
1
|
+
import { EVehiclePlateState as a } from "../../../types/index.mjs";
|
|
2
2
|
import t from "./signal-holo-flow.mjs";
|
|
3
3
|
import i from "./trace-holo-flow.mjs";
|
|
4
4
|
class h {
|
|
5
|
-
constructor(
|
|
6
|
-
this.view =
|
|
5
|
+
constructor(e) {
|
|
6
|
+
this.view = e;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* 处理全息流轨迹数据
|
|
10
10
|
* */
|
|
11
|
-
handleVehicleTraceData(
|
|
12
|
-
this.traceHoloFlow || (this.traceHoloFlow = new i(this.view)), this.traceHoloFlow.handleVehicleTraceData(
|
|
11
|
+
handleVehicleTraceData(e) {
|
|
12
|
+
this.traceHoloFlow || (this.traceHoloFlow = new i(this.view)), this.traceHoloFlow.handleVehicleTraceData(e);
|
|
13
|
+
}
|
|
14
|
+
toggleTrafficObject(e) {
|
|
15
|
+
var l, o;
|
|
16
|
+
switch (e.name.toLowerCase()) {
|
|
17
|
+
case "groundVehicle".toLowerCase():
|
|
18
|
+
(l = this.traceHoloFlow) == null || l.toggleGroundVehicle(e.visible);
|
|
19
|
+
break;
|
|
20
|
+
case "elevatedVehicle".toLowerCase():
|
|
21
|
+
(o = this.traceHoloFlow) == null || o.toggleElevatedVehicle(e.visible);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
13
24
|
}
|
|
14
25
|
clearHoloTrace() {
|
|
15
|
-
var
|
|
16
|
-
(
|
|
26
|
+
var e;
|
|
27
|
+
(e = this.traceHoloFlow) == null || e.clearTrace();
|
|
17
28
|
}
|
|
18
29
|
// public toggleVehiclePlate(visible: boolean): void {
|
|
19
30
|
// this.traceHoloFlow?.togglePlateLayer(visible);
|
|
20
31
|
// }
|
|
21
|
-
updatePanelContent(
|
|
32
|
+
updatePanelContent(e) {
|
|
22
33
|
var o;
|
|
23
|
-
let
|
|
24
|
-
switch (
|
|
34
|
+
let l = a.None;
|
|
35
|
+
switch (e) {
|
|
25
36
|
case "none":
|
|
26
|
-
|
|
37
|
+
l = a.None;
|
|
27
38
|
break;
|
|
28
39
|
case "plateNumber":
|
|
29
|
-
|
|
40
|
+
l = a.PlateNumber;
|
|
30
41
|
break;
|
|
31
42
|
case "vehicleId":
|
|
32
|
-
|
|
43
|
+
l = a.Id;
|
|
33
44
|
break;
|
|
34
45
|
case "mix":
|
|
35
|
-
|
|
46
|
+
l = a.Mix;
|
|
36
47
|
break;
|
|
37
48
|
}
|
|
38
|
-
(o = this.traceHoloFlow) == null || o.updatePanelContent(
|
|
49
|
+
(o = this.traceHoloFlow) == null || o.updatePanelContent(l);
|
|
39
50
|
}
|
|
40
|
-
async handleSignalData(
|
|
41
|
-
this.signalHoloFlow || (this.signalHoloFlow = new t(this.view)), await this.signalHoloFlow.initializeLayer(), await this.signalHoloFlow.handleSignalData(
|
|
51
|
+
async handleSignalData(e) {
|
|
52
|
+
this.signalHoloFlow || (this.signalHoloFlow = new t(this.view)), await this.signalHoloFlow.initializeLayer(), await this.signalHoloFlow.handleSignalData(e);
|
|
42
53
|
}
|
|
43
54
|
clearHoloSignal() {
|
|
44
|
-
var
|
|
45
|
-
(
|
|
55
|
+
var e;
|
|
56
|
+
(e = this.signalHoloFlow) == null || e.clearSignal();
|
|
46
57
|
}
|
|
47
58
|
}
|
|
48
59
|
export {
|
|
@@ -25,6 +25,15 @@ export default class SignalHoloFlow {
|
|
|
25
25
|
* 获取显示倒计时的canvas
|
|
26
26
|
* */
|
|
27
27
|
private updateCountdown;
|
|
28
|
+
/**
|
|
29
|
+
* 在倒计时面板上写入倒计时时间
|
|
30
|
+
* @param countdownCanvas 倒计时面板canvas
|
|
31
|
+
* @param rtStage 相位数据
|
|
32
|
+
* @param rtStage.stageID 相位名
|
|
33
|
+
* @param rtStage.stageRemainingTime 剩余时间
|
|
34
|
+
* @param rtStage.stageAllRedTime 全红时间
|
|
35
|
+
* @param rtStage.stageYellowTime 黄灯时间
|
|
36
|
+
*/
|
|
28
37
|
private drawCountdownText;
|
|
29
38
|
private updatePhaseLine;
|
|
30
39
|
/**
|
|
@@ -16,14 +16,14 @@ class f {
|
|
|
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}`, o = (await (await fetch(e)).json()).features.map((
|
|
19
|
+
const e = `${this.mapConfig.assetsRoot}/${this.mapConfig.phaseLineLayer}`, o = (await (await fetch(e)).json()).features.map((s, n) => ({
|
|
20
20
|
geometry: {
|
|
21
21
|
type: "polyline",
|
|
22
|
-
paths: [
|
|
22
|
+
paths: [s.geometry.coordinates]
|
|
23
23
|
},
|
|
24
24
|
attributes: {
|
|
25
|
-
ObjectID:
|
|
26
|
-
id:
|
|
25
|
+
ObjectID: n + 1,
|
|
26
|
+
id: s.properties.id,
|
|
27
27
|
color: "hide"
|
|
28
28
|
}
|
|
29
29
|
}));
|
|
@@ -110,12 +110,12 @@ class f {
|
|
|
110
110
|
if (t - this.lastDataTime < 100)
|
|
111
111
|
return;
|
|
112
112
|
this.lastDataTime = t;
|
|
113
|
-
const { crossId: o, lat:
|
|
114
|
-
await this.updateCountdown(o,
|
|
113
|
+
const { crossId: o, lat: s, lon: n, rtStage: a, channelsConfig: l } = e;
|
|
114
|
+
await this.updateCountdown(o, s, n, a), !(!this.phaseLineLayer || !l) && ((!this.currentPhaseMap.has(o) || this.currentPhaseMap.get(o) !== a.stagePhase) && await this.updatePhaseLine(
|
|
115
115
|
o,
|
|
116
|
-
|
|
116
|
+
a.channelsConfig,
|
|
117
117
|
l
|
|
118
|
-
), this.currentPhaseMap.set(o,
|
|
118
|
+
), this.currentPhaseMap.set(o, a.stagePhase));
|
|
119
119
|
}
|
|
120
120
|
/**
|
|
121
121
|
* 清除实时信号相关图层
|
|
@@ -128,54 +128,63 @@ class f {
|
|
|
128
128
|
/**
|
|
129
129
|
* 获取显示倒计时的canvas
|
|
130
130
|
* */
|
|
131
|
-
async updateCountdown(e, t,
|
|
131
|
+
async updateCountdown(e, t, i, o) {
|
|
132
132
|
if (this.isDeletingCanvas)
|
|
133
133
|
return;
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
136
|
-
this.drawCountdownText(
|
|
134
|
+
const s = this.countdownCanvasMap.get(e);
|
|
135
|
+
if (s)
|
|
136
|
+
this.drawCountdownText(s.countdownCanvas, o);
|
|
137
137
|
else {
|
|
138
|
-
const
|
|
139
|
-
longitude:
|
|
138
|
+
const n = new c({
|
|
139
|
+
longitude: i,
|
|
140
140
|
latitude: t,
|
|
141
141
|
z: 10
|
|
142
|
-
}),
|
|
143
|
-
if (
|
|
142
|
+
}), a = this.view.toScreen(n);
|
|
143
|
+
if (a.x > this.view.width || a.y > this.view.height || a.x <= 0 || a.y <= 0)
|
|
144
144
|
return;
|
|
145
145
|
this.createCountdownCanvas((l) => {
|
|
146
146
|
const h = l[0], r = l[1];
|
|
147
|
-
h.style.left =
|
|
147
|
+
h.style.left = a.x + "px", h.style.top = a.y + "px", r.style.left = a.x + "px", r.style.top = a.y + "px", this.countdownCanvasMap.set(e, {
|
|
148
148
|
backgroundCanvas: h,
|
|
149
149
|
countdownCanvas: r,
|
|
150
|
-
mapPoint:
|
|
150
|
+
mapPoint: n
|
|
151
151
|
}), this.drawCountdownText(r, o);
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
this.countdownWatchHandel || (this.countdownWatchHandel = d.watch(
|
|
155
155
|
() => this.view.extent,
|
|
156
156
|
() => {
|
|
157
|
-
this.countdownCanvasMap.forEach((
|
|
158
|
-
const
|
|
159
|
-
|
|
157
|
+
this.countdownCanvasMap.forEach((n) => {
|
|
158
|
+
const a = this.view.toScreen(n.mapPoint);
|
|
159
|
+
a.x > this.view.width || a.y > this.view.height || a.x <= 0 || a.y <= 0 ? (this.isDeletingCanvas = !0, this.view.container.removeChild(n.backgroundCanvas), this.view.container.removeChild(n.countdownCanvas), this.countdownCanvasMap.delete(e), this.isDeletingCanvas = !1) : (n.backgroundCanvas.style.left = a.x + "px", n.backgroundCanvas.style.top = a.y + "px", n.countdownCanvas.style.left = a.x + "px", n.countdownCanvas.style.top = a.y + "px");
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
162
|
));
|
|
163
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* 在倒计时面板上写入倒计时时间
|
|
166
|
+
* @param countdownCanvas 倒计时面板canvas
|
|
167
|
+
* @param rtStage 相位数据
|
|
168
|
+
* @param rtStage.stageID 相位名
|
|
169
|
+
* @param rtStage.stageRemainingTime 剩余时间
|
|
170
|
+
* @param rtStage.stageAllRedTime 全红时间
|
|
171
|
+
* @param rtStage.stageYellowTime 黄灯时间
|
|
172
|
+
*/
|
|
164
173
|
drawCountdownText(e, t) {
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
t.stageRemainingTime
|
|
174
|
+
const i = e.getContext("2d");
|
|
175
|
+
i.clearRect(0, 0, e.width, e.height), i.font = "32px LESLIE", i.textBaseline = "middle", i.textAlign = "center", i.fillStyle = t.stageRemainingTime <= t.stageAllRedTime ? "red" : t.stageRemainingTime <= t.stageAllRedTime + t.stageYellowTime ? "yellow" : "lime", i.fillText(
|
|
176
|
+
`${t.stageID} ${t.stageRemainingTime.toFixed(0)}`,
|
|
168
177
|
e.width / 2,
|
|
169
178
|
e.height / 2
|
|
170
179
|
);
|
|
171
180
|
}
|
|
172
|
-
async updatePhaseLine(e, t,
|
|
181
|
+
async updatePhaseLine(e, t, i) {
|
|
173
182
|
const o = this.phaseLineLayer.source.filter(
|
|
174
|
-
(
|
|
183
|
+
(s) => s.getAttribute("id").includes(e)
|
|
175
184
|
);
|
|
176
|
-
o.forEach((
|
|
177
|
-
const
|
|
178
|
-
this.isLaneInChannels(
|
|
185
|
+
o.forEach((s) => {
|
|
186
|
+
const n = s.getAttribute("id");
|
|
187
|
+
this.isLaneInChannels(n, t) ? s.setAttribute("color", "green") : this.isLaneInChannels(n, i) ? s.setAttribute("color", "red") : s.setAttribute("color", "green");
|
|
179
188
|
}), await this.phaseLineLayer.applyEdits({ updateFeatures: o });
|
|
180
189
|
}
|
|
181
190
|
/**
|
|
@@ -185,11 +194,11 @@ class f {
|
|
|
185
194
|
* @returns
|
|
186
195
|
*/
|
|
187
196
|
isLaneInChannels(e, t) {
|
|
188
|
-
const
|
|
189
|
-
for (let
|
|
190
|
-
for (let
|
|
191
|
-
const l = t[
|
|
192
|
-
if (o === l[0] &&
|
|
197
|
+
const i = e.split("+"), o = i[1], s = i[2];
|
|
198
|
+
for (let n = 0; n < t.length; n++)
|
|
199
|
+
for (let a = 0; a < t[n].laneSnList.length; a++) {
|
|
200
|
+
const l = t[n].laneSnList[a].toFixed(0);
|
|
201
|
+
if (o === l[0] && s === l[1])
|
|
193
202
|
return !0;
|
|
194
203
|
}
|
|
195
204
|
return !1;
|
|
@@ -197,10 +206,10 @@ class f {
|
|
|
197
206
|
createCountdownCanvas(e) {
|
|
198
207
|
const t = new Image();
|
|
199
208
|
t.src = `${this.mapConfig.assetsRoot}/Images/timeboard/CountdownBG.png`, t.onload = () => {
|
|
200
|
-
const a = document.createElement("canvas");
|
|
201
|
-
a.width = this.canvasWidth, a.height = this.canvasHeight, a.style.position = "absolute", a.style.transform = "translate(-50%, -50%)", a.getContext("2d").drawImage(t, 0, 0, this.canvasWidth, this.canvasHeight), this.view.container.appendChild(a);
|
|
202
209
|
const i = document.createElement("canvas");
|
|
203
|
-
i.width = this.canvasWidth
|
|
210
|
+
i.width = this.canvasWidth, i.height = this.canvasHeight, i.style.position = "absolute", i.style.transform = "translate(-50%, -50%)", i.getContext("2d").drawImage(t, 0, 0, this.canvasWidth, this.canvasHeight), this.view.container.appendChild(i);
|
|
211
|
+
const s = document.createElement("canvas");
|
|
212
|
+
s.width = this.canvasWidth - 10, s.height = this.canvasHeight - 10, s.style.position = "absolute", s.style.transform = "translate(-50%, -50%)", this.view.container.appendChild(s), e([i, s]);
|
|
204
213
|
}, t.onerror = () => {
|
|
205
214
|
console.error("倒计时背景图加载失败");
|
|
206
215
|
};
|
|
@@ -49,6 +49,8 @@ export default class TraceExternalRenderer implements ITraceRendererInterface {
|
|
|
49
49
|
* @returns
|
|
50
50
|
*/
|
|
51
51
|
updatePanelContent(contentType: EVehiclePlateState): void;
|
|
52
|
+
toggleGroundVehicle(visible: boolean): void;
|
|
53
|
+
toggleElevatedVehicle(visible: boolean): void;
|
|
52
54
|
/**
|
|
53
55
|
* 释放模型资源
|
|
54
56
|
* */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import b from "@arcgis/core/geometry/SpatialReference";
|
|
2
|
-
import * as
|
|
2
|
+
import * as u from "@arcgis/core/views/3d/externalRenderers";
|
|
3
3
|
import * as o from "three";
|
|
4
4
|
import { GLTFLoader as v } from "three/examples/jsm/loaders/GLTFLoader.js";
|
|
5
5
|
import { EVehiclePlateState as M } from "../../../types/index.mjs";
|
|
@@ -64,7 +64,7 @@ class k {
|
|
|
64
64
|
const a = this.computeVehiclePosition(r);
|
|
65
65
|
if (a) {
|
|
66
66
|
const c = [0, 0, 0];
|
|
67
|
-
|
|
67
|
+
u.toRenderCoordinates(
|
|
68
68
|
this.view,
|
|
69
69
|
a,
|
|
70
70
|
0,
|
|
@@ -84,7 +84,7 @@ class k {
|
|
|
84
84
|
t.ambient.color[0],
|
|
85
85
|
t.ambient.color[1],
|
|
86
86
|
t.ambient.color[2]
|
|
87
|
-
), this.renderer.resetState(), i.bindRenderTarget(), this.renderer.render(this.scene, this.camera),
|
|
87
|
+
), this.renderer.resetState(), i.bindRenderTarget(), this.renderer.render(this.scene, this.camera), u.requestRender(this.view), i.resetWebGLState();
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* 新增车辆
|
|
@@ -115,8 +115,8 @@ class k {
|
|
|
115
115
|
if (n) {
|
|
116
116
|
if ((n.data.vehicleColor !== e.vehicleColor || n.data.vehicleType !== e.vehicleType) && (this.scene.remove(n.model), this.disposeModel(n.model), n.model = this.getVehicleModel(e), this.scene.add(n.model)), n.data.showName !== e.showName || n.data.plateColor !== e.plateColor) {
|
|
117
117
|
const m = n.model.getObjectByName("VehiclePlate");
|
|
118
|
-
m && (n.model.remove(m), this.disposeModel(m)), this.createPlateSprite(e, (
|
|
119
|
-
n.model.add(
|
|
118
|
+
m && (n.model.remove(m), this.disposeModel(m)), this.createPlateSprite(e, (g) => {
|
|
119
|
+
n.model.add(g), g.position.set(0, 5, -4);
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
122
|
n.data = e;
|
|
@@ -180,6 +180,10 @@ class k {
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
+
toggleGroundVehicle(i) {
|
|
184
|
+
}
|
|
185
|
+
toggleElevatedVehicle(i) {
|
|
186
|
+
}
|
|
183
187
|
/**
|
|
184
188
|
* 释放模型资源
|
|
185
189
|
* */
|
|
@@ -306,8 +310,8 @@ class k {
|
|
|
306
310
|
return;
|
|
307
311
|
const d = new o.CanvasTexture(n), p = new o.SpriteMaterial({
|
|
308
312
|
map: d
|
|
309
|
-
}), f = new o.Sprite(p), m = 0.05,
|
|
310
|
-
f.scale.set(
|
|
313
|
+
}), f = new o.Sprite(p), m = 0.05, g = n.width * m, y = n.height * m;
|
|
314
|
+
f.scale.set(g, y, 1), f.name = "VehiclePlate", e(f);
|
|
311
315
|
};
|
|
312
316
|
}
|
|
313
317
|
}
|
|
@@ -14,5 +14,7 @@ export default class TraceHoloFlow {
|
|
|
14
14
|
* */
|
|
15
15
|
clearTrace(): void;
|
|
16
16
|
updatePanelContent(contentType: EVehiclePlateState): void;
|
|
17
|
+
toggleGroundVehicle(visible: boolean): void;
|
|
18
|
+
toggleElevatedVehicle(visible: boolean): void;
|
|
17
19
|
private buildVehicleTrackData;
|
|
18
20
|
}
|