gisviewer-vue3-arcgis 1.0.99 → 1.0.101
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.mjs +23 -23
- package/es/src/gis-map/utils/GreenWaveline.d.ts +68 -0
- package/es/src/gis-map/utils/holo-flow/index.d.ts +1 -0
- package/es/src/gis-map/utils/holo-flow/index.mjs +14 -10
- package/es/src/gis-map/utils/holo-flow/trace-external-renderer.d.ts +2 -1
- package/es/src/gis-map/utils/holo-flow/trace-external-renderer.mjs +2 -0
- package/es/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +6 -1
- package/es/src/gis-map/utils/holo-flow/trace-holo-flow.mjs +41 -34
- package/es/src/gis-map/utils/holo-flow/trace-layer-renderer.d.ts +4 -0
- package/es/src/gis-map/utils/holo-flow/trace-layer-renderer.mjs +33 -35
- package/es/src/types/index.d.ts +1 -0
- package/lib/src/gis-map/gis-map.vue.js +1 -1
- package/lib/src/gis-map/utils/GreenWaveline.d.ts +68 -0
- package/lib/src/gis-map/utils/holo-flow/index.d.ts +1 -0
- package/lib/src/gis-map/utils/holo-flow/index.js +1 -1
- package/lib/src/gis-map/utils/holo-flow/trace-external-renderer.d.ts +2 -1
- 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 +6 -1
- 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 +4 -0
- package/lib/src/gis-map/utils/holo-flow/trace-layer-renderer.js +1 -1
- package/lib/src/types/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { defineComponent as te, ref as
|
|
1
|
+
import { defineComponent as te, ref as ne, onMounted as ae, getCurrentInstance as re, computed as oe, openBlock as se, createElementBlock as ce, createElementVNode as ie } from "vue";
|
|
2
2
|
import le, { registerStore as me } from "./stores/index.mjs";
|
|
3
3
|
import "./style/index.css";
|
|
4
4
|
import g from "./utils/holo-flow/index.mjs";
|
|
5
5
|
import pe from "./utils/map-initializer.mjs";
|
|
6
|
-
import
|
|
7
|
-
import
|
|
6
|
+
import fe from "./utils/open-drive-renderer/index.mjs";
|
|
7
|
+
import ue from "./utils/overlay.mjs";
|
|
8
8
|
import de from "./utils/queue-length.mjs";
|
|
9
9
|
import v from "./utils/road-config-tool/index.mjs";
|
|
10
10
|
import ge from "./utils/traffic-flow.mjs";
|
|
@@ -16,9 +16,9 @@ const ye = { class: "gis-viewer" }, Le = /* @__PURE__ */ te({
|
|
|
16
16
|
},
|
|
17
17
|
emits: ["mapLoaded", "markerClick", "mapClick"],
|
|
18
18
|
setup(w, { expose: O, emit: T }) {
|
|
19
|
-
const m =
|
|
20
|
-
let o, s,
|
|
21
|
-
me(),
|
|
19
|
+
const m = ne(null);
|
|
20
|
+
let o, s, a, r, t, n, i, l;
|
|
21
|
+
me(), ae(async () => {
|
|
22
22
|
if (!m.value)
|
|
23
23
|
return;
|
|
24
24
|
const e = re(), { $gisviewerAssetsRoot: c } = e.appContext.config.globalProperties, C = await (await fetch(y.config)).json();
|
|
@@ -26,21 +26,21 @@ const ye = { class: "gis-viewer" }, Le = /* @__PURE__ */ te({
|
|
|
26
26
|
const F = le.useAppDataStore;
|
|
27
27
|
F.mapConfig = C, s = new pe(), o = await s.initialize({
|
|
28
28
|
container: m.value,
|
|
29
|
-
markerClickCallback: (
|
|
30
|
-
p("markerClick",
|
|
29
|
+
markerClickCallback: (f, u, d, ee) => {
|
|
30
|
+
p("markerClick", f, u, d, ee);
|
|
31
31
|
},
|
|
32
|
-
mapClickCallback: (
|
|
33
|
-
p("mapClick",
|
|
32
|
+
mapClickCallback: (f, u, d) => {
|
|
33
|
+
p("mapClick", f, u, d);
|
|
34
34
|
}
|
|
35
35
|
}), t = new g(o), p("mapLoaded");
|
|
36
36
|
});
|
|
37
|
-
const
|
|
37
|
+
const k = oe(() => o), h = async (e) => await s.setMapCenter(e), I = async (e) => await s.setMapCamera(e), b = async (e) => await s.lookAt(e), A = (e) => s.setLayerVisibility(e), L = (e, c) => s.requestCoordinateTransform(e, c), D = (e) => {
|
|
38
38
|
s.cancelCoordinateTransform(e);
|
|
39
39
|
}, S = (e) => {
|
|
40
40
|
s.setMapZoomRange(e);
|
|
41
|
-
}, _ = (e) => (
|
|
42
|
-
|
|
43
|
-
}, R = async (e) => (
|
|
41
|
+
}, _ = (e) => (a || (a = new v(o)), a.showLaneNumber(e)), M = () => {
|
|
42
|
+
a == null || a.clearLaneNumber();
|
|
43
|
+
}, R = async (e) => (a || (a = new v(o)), await a.initializeSearch(e)), V = async () => a == null ? void 0 : a.calCrossIndicatorArea(), x = async () => {
|
|
44
44
|
}, B = async (e, c) => {
|
|
45
45
|
r || (r = new ge(o)), r.connectTrafficFlow(e, c);
|
|
46
46
|
}, H = () => {
|
|
@@ -54,28 +54,28 @@ const ye = { class: "gis-viewer" }, Le = /* @__PURE__ */ te({
|
|
|
54
54
|
}, j = () => {
|
|
55
55
|
t == null || t.clearHoloSignal();
|
|
56
56
|
}, E = (e) => {
|
|
57
|
-
r == null || r.toggleTrafficInfo(e);
|
|
57
|
+
r == null || r.toggleTrafficInfo(e), t == null || t.toggleTrafficInfo(e);
|
|
58
58
|
}, P = (e) => {
|
|
59
59
|
t == null || t.toggleTrafficObject(e), r == null || r.toggleTrafficObject(e);
|
|
60
60
|
}, Z = (e) => {
|
|
61
61
|
t == null || t.updatePanelContent(e);
|
|
62
|
-
}, q = async (e) => (
|
|
63
|
-
|
|
62
|
+
}, q = async (e) => (n || (n = new ue(o)), n.addOverlays(e)), $ = (e) => n == null ? void 0 : n.removeOverlaysByType(e), G = (e) => n == null ? void 0 : n.removeOverlaysById(e), J = () => n == null ? void 0 : n.removeAllOverlays(), K = () => {
|
|
63
|
+
n == null || n.showAllOverlays();
|
|
64
64
|
}, U = (e) => {
|
|
65
65
|
i || (i = new de(o)), i.updateQueueLength(e);
|
|
66
66
|
}, W = () => {
|
|
67
67
|
i == null || i.removeQueueLength();
|
|
68
68
|
}, X = async (e, c) => {
|
|
69
|
-
l || (l = new
|
|
69
|
+
l || (l = new fe(o)), await l.showOpenDrive(e, c);
|
|
70
70
|
}, Y = async () => {
|
|
71
71
|
await (l == null ? void 0 : l.hideOpenDrive());
|
|
72
72
|
}, y = w, p = T;
|
|
73
73
|
return O({
|
|
74
|
-
mapViewer:
|
|
75
|
-
setLayerVisibility:
|
|
76
|
-
setMapCenter:
|
|
77
|
-
lookAt:
|
|
78
|
-
setMapCamera:
|
|
74
|
+
mapViewer: k,
|
|
75
|
+
setLayerVisibility: A,
|
|
76
|
+
setMapCenter: h,
|
|
77
|
+
lookAt: b,
|
|
78
|
+
setMapCamera: I,
|
|
79
79
|
setMapZoomRange: S,
|
|
80
80
|
requestCoordinateTransform: L,
|
|
81
81
|
cancelCoordinateTransform: D,
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import Graphic from '@arcgis/core/Graphic';
|
|
2
|
+
import GraphicsLayer from '@arcgis/core/layers/GraphicsLayer';
|
|
3
|
+
import MapView from '@arcgis/core/views/MapView';
|
|
4
|
+
import SceneView from '@arcgis/core/views/SceneView';
|
|
5
|
+
interface GreenWaveLineOptions {
|
|
6
|
+
viewer: MapView | SceneView;
|
|
7
|
+
graphicsLayerOptions: {
|
|
8
|
+
id: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface roadPath {
|
|
12
|
+
paths: [number, number][];
|
|
13
|
+
symbol: any;
|
|
14
|
+
attributes: any;
|
|
15
|
+
visible?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface animationOptions {
|
|
18
|
+
isAnimation: boolean;
|
|
19
|
+
positive?: boolean;
|
|
20
|
+
positiveColor?: number[];
|
|
21
|
+
negative?: boolean;
|
|
22
|
+
negativeColor?: number[];
|
|
23
|
+
}
|
|
24
|
+
export default class GreenWaveLine {
|
|
25
|
+
private viewer;
|
|
26
|
+
overlayLayer: GraphicsLayer;
|
|
27
|
+
customGreenWaveLineView: any;
|
|
28
|
+
material: THREE.ShaderMaterial;
|
|
29
|
+
renderer: THREE.WebGLRenderer;
|
|
30
|
+
threeScene: THREE.Scene;
|
|
31
|
+
camera: THREE.PerspectiveCamera;
|
|
32
|
+
private defaultAnimationOptions;
|
|
33
|
+
constructor(options: GreenWaveLineOptions);
|
|
34
|
+
addGreenWaveLine(paths: roadPath[], options?: animationOptions): void;
|
|
35
|
+
getAnimationPath(paths: [number, number][], options?: animationOptions): any;
|
|
36
|
+
createLine(paths: any, symbol: any, attributes: any, visible: boolean): Graphic;
|
|
37
|
+
addPointText(points: any[]): void;
|
|
38
|
+
createPointText(point: any, symbol: any, attributes: any, visible: boolean): Graphic;
|
|
39
|
+
/**
|
|
40
|
+
* 隐藏覆盖物
|
|
41
|
+
*
|
|
42
|
+
* @param {string[]} [ids]
|
|
43
|
+
* @memberof GreenWaveLine
|
|
44
|
+
*/
|
|
45
|
+
hideWaveLine(ids?: string[]): void;
|
|
46
|
+
/**
|
|
47
|
+
* 显示覆盖物
|
|
48
|
+
*
|
|
49
|
+
* @param {string[]} [ids]
|
|
50
|
+
* @memberof GreenWaveLine
|
|
51
|
+
*/
|
|
52
|
+
showWaveLine(ids?: string[]): void;
|
|
53
|
+
/**
|
|
54
|
+
* 隐藏图层
|
|
55
|
+
*
|
|
56
|
+
* @memberof GreenWaveLine
|
|
57
|
+
*/
|
|
58
|
+
hideLayer(): void;
|
|
59
|
+
/**
|
|
60
|
+
* 显示图层
|
|
61
|
+
*
|
|
62
|
+
* @memberof Overlay
|
|
63
|
+
*/
|
|
64
|
+
showLayer(): void;
|
|
65
|
+
clearGreenWaveLine(): void;
|
|
66
|
+
destroy(): void;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
@@ -11,6 +11,7 @@ export default class Index {
|
|
|
11
11
|
handleVehicleTraceData(data: any): void;
|
|
12
12
|
toggleTrafficObject(params: IToggleTrafficInfoParams): void;
|
|
13
13
|
clearHoloTrace(): void;
|
|
14
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
14
15
|
updatePanelContent(contentType: string): void;
|
|
15
16
|
handleSignalData(data: any): Promise<void>;
|
|
16
17
|
clearHoloSignal(): void;
|
|
@@ -12,13 +12,13 @@ class h {
|
|
|
12
12
|
this.traceHoloFlow || (this.traceHoloFlow = new i(this.view)), this.traceHoloFlow.handleVehicleTraceData(e);
|
|
13
13
|
}
|
|
14
14
|
toggleTrafficObject(e) {
|
|
15
|
-
var
|
|
15
|
+
var o, l;
|
|
16
16
|
switch (e.name.toLowerCase()) {
|
|
17
17
|
case "groundVehicle".toLowerCase():
|
|
18
|
-
(
|
|
18
|
+
(o = this.traceHoloFlow) == null || o.toggleGroundVehicle(e.visible);
|
|
19
19
|
break;
|
|
20
20
|
case "elevatedVehicle".toLowerCase():
|
|
21
|
-
(
|
|
21
|
+
(l = this.traceHoloFlow) == null || l.toggleElevatedVehicle(e.visible);
|
|
22
22
|
break;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -29,24 +29,28 @@ class h {
|
|
|
29
29
|
// public toggleVehiclePlate(visible: boolean): void {
|
|
30
30
|
// this.traceHoloFlow?.togglePlateLayer(visible);
|
|
31
31
|
// }
|
|
32
|
-
|
|
32
|
+
toggleTrafficInfo(e) {
|
|
33
33
|
var o;
|
|
34
|
-
|
|
34
|
+
(o = this.traceHoloFlow) == null || o.toggleTrafficInfo(e);
|
|
35
|
+
}
|
|
36
|
+
updatePanelContent(e) {
|
|
37
|
+
var l;
|
|
38
|
+
let o = a.None;
|
|
35
39
|
switch (e) {
|
|
36
40
|
case "none":
|
|
37
|
-
|
|
41
|
+
o = a.None;
|
|
38
42
|
break;
|
|
39
43
|
case "plateNumber":
|
|
40
|
-
|
|
44
|
+
o = a.PlateNumber;
|
|
41
45
|
break;
|
|
42
46
|
case "vehicleId":
|
|
43
|
-
|
|
47
|
+
o = a.Id;
|
|
44
48
|
break;
|
|
45
49
|
case "mix":
|
|
46
|
-
|
|
50
|
+
o = a.Mix;
|
|
47
51
|
break;
|
|
48
52
|
}
|
|
49
|
-
(
|
|
53
|
+
(l = this.traceHoloFlow) == null || l.updatePanelContent(o);
|
|
50
54
|
}
|
|
51
55
|
async handleSignalData(e) {
|
|
52
56
|
this.signalHoloFlow || (this.signalHoloFlow = new t(this.view)), await this.signalHoloFlow.initializeLayer(), await this.signalHoloFlow.handleSignalData(e);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EVehiclePlateState, ITraceRendererInterface, IVehicleTrack } from '../../../types';
|
|
1
|
+
import { EVehiclePlateState, IToggleTrafficInfoParams, ITraceRendererInterface, IVehicleTrack } from '../../../types';
|
|
2
2
|
export default class TraceExternalRenderer implements ITraceRendererInterface {
|
|
3
3
|
private renderer;
|
|
4
4
|
private scene;
|
|
@@ -39,6 +39,7 @@ export default class TraceExternalRenderer implements ITraceRendererInterface {
|
|
|
39
39
|
* 删除车辆
|
|
40
40
|
* */
|
|
41
41
|
deleteVehicles(idList: string[]): void;
|
|
42
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
42
43
|
/**
|
|
43
44
|
* 清除全部车辆
|
|
44
45
|
* */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EVehiclePlateState } from '../../../types';
|
|
1
|
+
import { EVehiclePlateState, IToggleTrafficInfoParams } from '../../../types';
|
|
2
2
|
export default class TraceHoloFlow {
|
|
3
3
|
private mapConfig;
|
|
4
4
|
private view;
|
|
@@ -9,6 +9,11 @@ export default class TraceHoloFlow {
|
|
|
9
9
|
* 处理全息流轨迹数据
|
|
10
10
|
* */
|
|
11
11
|
handleVehicleTraceData(data: any): void;
|
|
12
|
+
/**
|
|
13
|
+
* 切换交通信息可见性
|
|
14
|
+
* @param params
|
|
15
|
+
*/
|
|
16
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
12
17
|
/**
|
|
13
18
|
* 清除轨迹流
|
|
14
19
|
* */
|
|
@@ -1,47 +1,54 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
1
|
+
import * as f from "@arcgis/core/views/3d/externalRenderers";
|
|
2
|
+
import u from "../../stores/index.mjs";
|
|
3
3
|
import g from "./trace-external-renderer.mjs";
|
|
4
|
-
import
|
|
5
|
-
class
|
|
4
|
+
import T from "./trace-layer-renderer.mjs";
|
|
5
|
+
class N {
|
|
6
6
|
constructor(e) {
|
|
7
7
|
this.lastDataTime = 0, this.view = e;
|
|
8
|
-
const
|
|
9
|
-
this.mapConfig = JSON.parse(JSON.stringify(
|
|
8
|
+
const i = u.useAppDataStore;
|
|
9
|
+
this.mapConfig = JSON.parse(JSON.stringify(i.mapConfig)), e.type === "3d" ? (this.traceRenderer = new g(e), f.add(
|
|
10
10
|
e,
|
|
11
11
|
this.traceRenderer
|
|
12
|
-
)) : this.traceRenderer = new
|
|
12
|
+
)) : this.traceRenderer = new T(e);
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* 处理全息流轨迹数据
|
|
16
16
|
* */
|
|
17
17
|
handleVehicleTraceData(e) {
|
|
18
|
-
const
|
|
19
|
-
if (
|
|
18
|
+
const i = new Date().getTime();
|
|
19
|
+
if (i - this.lastDataTime < 100)
|
|
20
20
|
return;
|
|
21
|
-
this.lastDataTime =
|
|
22
|
-
const { newVehList:
|
|
23
|
-
if (
|
|
24
|
-
for (const
|
|
25
|
-
|
|
26
|
-
const t = this.buildVehicleTrackData(
|
|
27
|
-
t &&
|
|
21
|
+
this.lastDataTime = i;
|
|
22
|
+
const { newVehList: s, updateVehList: n, deleteVehList: o, jgsj: l } = e, a = e.crossId || "", h = [], r = [];
|
|
23
|
+
if (s && s.length > 0) {
|
|
24
|
+
for (const c of s) {
|
|
25
|
+
c.localTimestamp || (c.localTimestamp = l || i);
|
|
26
|
+
const t = this.buildVehicleTrackData(c, a);
|
|
27
|
+
t && h.push(t);
|
|
28
28
|
}
|
|
29
29
|
this.traceRenderer.addVehicles(h);
|
|
30
30
|
}
|
|
31
31
|
if (n && n.length > 0) {
|
|
32
|
-
for (const
|
|
33
|
-
const t = this.buildVehicleTrackData(
|
|
34
|
-
t &&
|
|
32
|
+
for (const c of n) {
|
|
33
|
+
const t = this.buildVehicleTrackData(c, a);
|
|
34
|
+
t && r.push(t);
|
|
35
35
|
}
|
|
36
|
-
this.traceRenderer.updateVehicles(
|
|
36
|
+
this.traceRenderer.updateVehicles(r);
|
|
37
37
|
}
|
|
38
38
|
if (o && o.length > 0) {
|
|
39
|
-
const
|
|
39
|
+
const c = o.map(
|
|
40
40
|
(t) => a + "-" + (t.ptcId || t.vehno || t.vehNo)
|
|
41
41
|
);
|
|
42
|
-
this.traceRenderer.deleteVehicles(
|
|
42
|
+
this.traceRenderer.deleteVehicles(c);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* 切换交通信息可见性
|
|
47
|
+
* @param params
|
|
48
|
+
*/
|
|
49
|
+
toggleTrafficInfo(e) {
|
|
50
|
+
this.traceRenderer.toggleTrafficInfo(e);
|
|
51
|
+
}
|
|
45
52
|
/**
|
|
46
53
|
* 清除轨迹流
|
|
47
54
|
* */
|
|
@@ -57,27 +64,27 @@ class L {
|
|
|
57
64
|
toggleElevatedVehicle(e) {
|
|
58
65
|
this.traceRenderer.toggleElevatedVehicle(e);
|
|
59
66
|
}
|
|
60
|
-
buildVehicleTrackData(e,
|
|
61
|
-
const
|
|
67
|
+
buildVehicleTrackData(e, i) {
|
|
68
|
+
const p = e.longitude, s = e.latitude, n = e.ptcId, o = Number(e.ptcType), l = e.heading, a = Number(e.vehicleType), h = Number(e.vehicleColor), r = e.plateNo || e.plateno, c = Number(e.plateColor), t = e.timestamp, d = e.localTimestamp, m = String(e.roadLayer) || "1";
|
|
62
69
|
if (!(o < 0 || o > 8))
|
|
63
70
|
return {
|
|
64
71
|
ptcId: n,
|
|
65
|
-
crossId:
|
|
66
|
-
x:
|
|
67
|
-
y:
|
|
72
|
+
crossId: i,
|
|
73
|
+
x: p,
|
|
74
|
+
y: s,
|
|
68
75
|
ptcType: o,
|
|
69
76
|
vehicleType: a,
|
|
70
77
|
heading: o === 2 ? -l : l,
|
|
71
78
|
vehicleColor: h,
|
|
72
|
-
showName:
|
|
73
|
-
plateNo:
|
|
74
|
-
plateColor:
|
|
75
|
-
timestamp:
|
|
76
|
-
localTimestamp:
|
|
77
|
-
roadLayer:
|
|
79
|
+
showName: r && r !== "" && r !== "0" && r !== "000000" ? r : "",
|
|
80
|
+
plateNo: r,
|
|
81
|
+
plateColor: c,
|
|
82
|
+
timestamp: t,
|
|
83
|
+
localTimestamp: d,
|
|
84
|
+
roadLayer: m
|
|
78
85
|
};
|
|
79
86
|
}
|
|
80
87
|
}
|
|
81
88
|
export {
|
|
82
|
-
|
|
89
|
+
N as default
|
|
83
90
|
};
|
|
@@ -24,6 +24,10 @@ export default class TraceLayerRenderer implements ITraceRendererInterface {
|
|
|
24
24
|
* @param visible
|
|
25
25
|
*/
|
|
26
26
|
toggleElevatedVehicle(visible: boolean): void;
|
|
27
|
+
toggleTrafficInfo(params: {
|
|
28
|
+
name: string;
|
|
29
|
+
visible: boolean;
|
|
30
|
+
}): void;
|
|
27
31
|
private render;
|
|
28
32
|
private updatePosition;
|
|
29
33
|
/**
|
|
@@ -1,53 +1,50 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
class
|
|
1
|
+
import h from "@arcgis/core/Graphic";
|
|
2
|
+
import p from "@arcgis/core/layers/GraphicsLayer";
|
|
3
|
+
import m from "../../stores/index.mjs";
|
|
4
|
+
class u {
|
|
5
5
|
constructor(i) {
|
|
6
6
|
this.showVehiclePlate = !1, this.showGroundVehicle = !0, this.showElevatedVehicle = !0, this.historyPositionMap = /* @__PURE__ */ new Map(), this.vehicleObjectMap = /* @__PURE__ */ new Map(), this.view = i;
|
|
7
|
-
const e =
|
|
8
|
-
this.mapConfig = JSON.parse(JSON.stringify(e.mapConfig)), this.vehicleLayer = new
|
|
7
|
+
const e = m.useAppDataStore;
|
|
8
|
+
this.mapConfig = JSON.parse(JSON.stringify(e.mapConfig)), this.vehicleLayer = new p({
|
|
9
9
|
id: "vehicleLayer"
|
|
10
10
|
}), this.view.map.add(this.vehicleLayer), requestAnimationFrame(() => this.render());
|
|
11
11
|
}
|
|
12
12
|
addVehicles(i) {
|
|
13
13
|
const e = i.map((t) => {
|
|
14
|
-
const { crossId:
|
|
15
|
-
this.historyPositionMap.set(
|
|
16
|
-
{ pos: [
|
|
14
|
+
const { crossId: l, ptcId: n } = t, o = Number(t.x), a = Number(t.y), r = Number(t.heading), s = `${l}-${n}`;
|
|
15
|
+
this.historyPositionMap.set(s, [
|
|
16
|
+
{ pos: [o, a, 0], heading: r, time: Date.now() }
|
|
17
17
|
]);
|
|
18
|
-
const
|
|
18
|
+
const c = new h({
|
|
19
19
|
geometry: {
|
|
20
20
|
type: "point",
|
|
21
|
-
x:
|
|
22
|
-
y:
|
|
21
|
+
x: o,
|
|
22
|
+
y: a
|
|
23
23
|
},
|
|
24
24
|
attributes: {
|
|
25
25
|
...t
|
|
26
26
|
},
|
|
27
27
|
symbol: this.createCIMSymbol(t)
|
|
28
28
|
});
|
|
29
|
-
return
|
|
30
|
-
graphic:
|
|
29
|
+
return c.visible = !1, this.vehicleObjectMap.set(s, {
|
|
30
|
+
graphic: c,
|
|
31
31
|
data: t,
|
|
32
32
|
waitForDelete: !1
|
|
33
|
-
}),
|
|
33
|
+
}), c;
|
|
34
34
|
});
|
|
35
35
|
this.vehicleLayer.addMany(e);
|
|
36
36
|
}
|
|
37
37
|
updateVehicles(i) {
|
|
38
38
|
const e = [];
|
|
39
39
|
i.forEach((t) => {
|
|
40
|
-
const { crossId:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
Math.abs(a - m.heading) >= 180 && (a > m.heading ? m.heading += 360 : a += 360), p.push({ pos: [s, r, 0], heading: a, time: Date.now() });
|
|
49
|
-
} else
|
|
50
|
-
e.push(t);
|
|
40
|
+
const { crossId: l, ptcId: n } = t, o = Number(t.x), a = Number(t.y), r = `${l}-${n}`, s = this.vehicleObjectMap.get(r);
|
|
41
|
+
s ? (s.data = t, this.historyPositionMap.get(
|
|
42
|
+
r
|
|
43
|
+
).push({
|
|
44
|
+
pos: [o, a, 0],
|
|
45
|
+
heading: t.heading,
|
|
46
|
+
time: Date.now()
|
|
47
|
+
})) : e.push(t);
|
|
51
48
|
}), this.addVehicles(e);
|
|
52
49
|
}
|
|
53
50
|
deleteVehicles(i) {
|
|
@@ -76,6 +73,9 @@ class C {
|
|
|
76
73
|
toggleElevatedVehicle(i) {
|
|
77
74
|
this.showElevatedVehicle = i;
|
|
78
75
|
}
|
|
76
|
+
toggleTrafficInfo(i) {
|
|
77
|
+
i.name === "vehiclePlate" && (this.showVehiclePlate = i.visible);
|
|
78
|
+
}
|
|
79
79
|
render() {
|
|
80
80
|
this.vehicleObjectMap.forEach((i, e) => {
|
|
81
81
|
this.updatePosition(e);
|
|
@@ -86,29 +86,27 @@ class C {
|
|
|
86
86
|
if (!e || !t || e.length <= 1)
|
|
87
87
|
return;
|
|
88
88
|
(t.graphic.getAttribute("roadLayer") || "1") === "1" ? t.graphic.visible = this.showGroundVehicle : t.graphic.visible = this.showElevatedVehicle, t.segmentStartTime || (t.segmentStartTime = Date.now(), t.segmentTotalTime = e[1].time - e[0].time);
|
|
89
|
-
const
|
|
89
|
+
const n = Date.now() - t.segmentStartTime, o = Math.min(
|
|
90
90
|
1,
|
|
91
|
-
|
|
91
|
+
n / t.segmentTotalTime
|
|
92
92
|
);
|
|
93
93
|
if (o === 1)
|
|
94
94
|
if (e.shift(), e.length === 1) {
|
|
95
95
|
t.waitForDelete ? (this.vehicleLayer.remove(t.graphic), this.vehicleObjectMap.delete(i), this.historyPositionMap.delete(i)) : (t.segmentStartTime = void 0, t.segmentTotalTime = void 0);
|
|
96
96
|
return;
|
|
97
97
|
} else
|
|
98
|
-
t.segmentStartTime = Date.now(), t.segmentTotalTime = e[1].time - e[0].time,
|
|
99
|
-
e[1].heading - e[0].heading
|
|
100
|
-
) >= 180 && (e[1].heading > e[0].heading ? e[0].heading += 360 : e[1].heading += 360), t.graphic.geometry = {
|
|
98
|
+
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), t.graphic.geometry = {
|
|
101
99
|
type: "point",
|
|
102
100
|
x: e[0].pos[0],
|
|
103
101
|
y: e[0].pos[1]
|
|
104
102
|
};
|
|
105
103
|
else {
|
|
106
|
-
const
|
|
104
|
+
const a = e[0].pos[0] + (e[1].pos[0] - e[0].pos[0]) * o, r = e[0].pos[1] + (e[1].pos[1] - e[0].pos[1]) * o, s = e[0].heading + (e[1].heading - e[0].heading) * o;
|
|
107
105
|
t.graphic.geometry = {
|
|
108
106
|
type: "point",
|
|
109
|
-
x:
|
|
107
|
+
x: a,
|
|
110
108
|
y: r
|
|
111
|
-
}, t.data.heading =
|
|
109
|
+
}, t.data.heading = s, t.graphic.symbol = this.createCIMSymbol(t.data);
|
|
112
110
|
}
|
|
113
111
|
}
|
|
114
112
|
/**
|
|
@@ -296,5 +294,5 @@ class C {
|
|
|
296
294
|
}
|
|
297
295
|
}
|
|
298
296
|
export {
|
|
299
|
-
|
|
297
|
+
u as default
|
|
300
298
|
};
|
package/es/src/types/index.d.ts
CHANGED
|
@@ -146,6 +146,7 @@ export interface ITraceRendererInterface {
|
|
|
146
146
|
updatePanelContent(contentType: EVehiclePlateState): void;
|
|
147
147
|
toggleGroundVehicle(visible: boolean): void;
|
|
148
148
|
toggleElevatedVehicle(visible: boolean): void;
|
|
149
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
149
150
|
}
|
|
150
151
|
export declare enum EVehiclePlateState {
|
|
151
152
|
None = 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue"),w=require("./stores/index.js");require("./style/index.css");const y=require("./utils/holo-flow/index.js"),ae=require("./utils/map-initializer.js"),re=require("./utils/open-drive-renderer/index.js"),se=require("./utils/overlay.js"),ce=require("./utils/queue-length.js"),O=require("./utils/road-config-tool/index.js"),ie=require("./utils/traffic-flow.js"),oe={class:"gis-viewer"},le=o.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(T,{expose:k,emit:b}){const d=o.ref(null);let s,c,a,r,t,n,l,u;w.registerStore(),o.onMounted(async()=>{if(!d.value)return;const e=o.getCurrentInstance(),{$gisviewerAssetsRoot:i}=e.appContext.config.globalProperties,C=await(await fetch(v.config)).json();C.assetsRoot=v.assetsRoot||i;const te=w.default.useAppDataStore;te.mapConfig=C,c=new ae.default,s=await c.initialize({container:d.value,markerClickCallback:(m,p,g,ne)=>{f("markerClick",m,p,g,ne)},mapClickCallback:(m,p,g)=>{f("mapClick",m,p,g)}}),t=new y.default(s),f("mapLoaded")});const h=o.computed(()=>s),q=async e=>await c.setMapCenter(e),A=async e=>await c.setMapCamera(e),I=async e=>await c.lookAt(e),L=e=>c.setLayerVisibility(e),_=(e,i)=>c.requestCoordinateTransform(e,i),S=e=>{c.cancelCoordinateTransform(e)},D=e=>{c.setMapZoomRange(e)},M=e=>(a||(a=new O.default(s)),a.showLaneNumber(e)),x=()=>{a==null||a.clearLaneNumber()},V=async e=>(a||(a=new O.default(s)),await a.initializeSearch(e)),B=async()=>a==null?void 0:a.calCrossIndicatorArea(),H=async()=>{},R=async(e,i)=>{r||(r=new ie.default(s)),r.connectTrafficFlow(e,i)},j=()=>{r==null||r.disconnectTrafficFlow()},z=e=>{t||(t=new y.default(s)),t.handleVehicleTraceData(e)},N=()=>{t==null||t.clearHoloTrace()},Q=async e=>{t||(t=new y.default(s)),await t.handleSignalData(e)},P=()=>{t==null||t.clearHoloSignal()},E=e=>{r==null||r.toggleTrafficInfo(e),t==null||t.toggleTrafficInfo(e)},Z=e=>{t==null||t.toggleTrafficObject(e),r==null||r.toggleTrafficObject(e)},G=e=>{t==null||t.updatePanelContent(e)},J=async e=>(n||(n=new se.default(s)),n.addOverlays(e)),K=e=>n==null?void 0:n.removeOverlaysByType(e),U=e=>n==null?void 0:n.removeOverlaysById(e),W=()=>n==null?void 0:n.removeAllOverlays(),X=()=>{n==null||n.showAllOverlays()},Y=e=>{l||(l=new ce.default(s)),l.updateQueueLength(e)},$=()=>{l==null||l.removeQueueLength()},F=async(e,i)=>{u||(u=new re.default(s)),await u.showOpenDrive(e,i)},ee=async()=>{await(u==null?void 0:u.hideOpenDrive())},v=T,f=b;return k({mapViewer:h,setLayerVisibility:L,setMapCenter:q,lookAt:I,setMapCamera:A,setMapZoomRange:D,requestCoordinateTransform:_,cancelCoordinateTransform:S,addOverlays:J,showAllOverlays:X,removeOverlaysByType:K,removeOverlaysById:U,removeAllOverlays:W,showLaneNumber:M,clearLaneNumber:x,initializeAreaTool:V,calCrossIndicatorArea:B,calRoadIndicatorArea:H,connectCarFlow:R,disconnectCarFlow:j,handleHoloVehicleTraceData:z,clearHoloTrace:N,handleHoloSignalData:Q,clearHoloSignal:P,toggleTrafficInfo:E,toggleTrafficObject:Z,toggleVehicleInfo:G,updateQueueLength:Y,removeQueueLength:$,showOpenDrive:F,hideOpenDrive:ee}),(e,i)=>(o.openBlock(),o.createElementBlock("div",oe,[o.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:d},null,512)]))}});exports.default=le;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import Graphic from '@arcgis/core/Graphic';
|
|
2
|
+
import GraphicsLayer from '@arcgis/core/layers/GraphicsLayer';
|
|
3
|
+
import MapView from '@arcgis/core/views/MapView';
|
|
4
|
+
import SceneView from '@arcgis/core/views/SceneView';
|
|
5
|
+
interface GreenWaveLineOptions {
|
|
6
|
+
viewer: MapView | SceneView;
|
|
7
|
+
graphicsLayerOptions: {
|
|
8
|
+
id: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface roadPath {
|
|
12
|
+
paths: [number, number][];
|
|
13
|
+
symbol: any;
|
|
14
|
+
attributes: any;
|
|
15
|
+
visible?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface animationOptions {
|
|
18
|
+
isAnimation: boolean;
|
|
19
|
+
positive?: boolean;
|
|
20
|
+
positiveColor?: number[];
|
|
21
|
+
negative?: boolean;
|
|
22
|
+
negativeColor?: number[];
|
|
23
|
+
}
|
|
24
|
+
export default class GreenWaveLine {
|
|
25
|
+
private viewer;
|
|
26
|
+
overlayLayer: GraphicsLayer;
|
|
27
|
+
customGreenWaveLineView: any;
|
|
28
|
+
material: THREE.ShaderMaterial;
|
|
29
|
+
renderer: THREE.WebGLRenderer;
|
|
30
|
+
threeScene: THREE.Scene;
|
|
31
|
+
camera: THREE.PerspectiveCamera;
|
|
32
|
+
private defaultAnimationOptions;
|
|
33
|
+
constructor(options: GreenWaveLineOptions);
|
|
34
|
+
addGreenWaveLine(paths: roadPath[], options?: animationOptions): void;
|
|
35
|
+
getAnimationPath(paths: [number, number][], options?: animationOptions): any;
|
|
36
|
+
createLine(paths: any, symbol: any, attributes: any, visible: boolean): Graphic;
|
|
37
|
+
addPointText(points: any[]): void;
|
|
38
|
+
createPointText(point: any, symbol: any, attributes: any, visible: boolean): Graphic;
|
|
39
|
+
/**
|
|
40
|
+
* 隐藏覆盖物
|
|
41
|
+
*
|
|
42
|
+
* @param {string[]} [ids]
|
|
43
|
+
* @memberof GreenWaveLine
|
|
44
|
+
*/
|
|
45
|
+
hideWaveLine(ids?: string[]): void;
|
|
46
|
+
/**
|
|
47
|
+
* 显示覆盖物
|
|
48
|
+
*
|
|
49
|
+
* @param {string[]} [ids]
|
|
50
|
+
* @memberof GreenWaveLine
|
|
51
|
+
*/
|
|
52
|
+
showWaveLine(ids?: string[]): void;
|
|
53
|
+
/**
|
|
54
|
+
* 隐藏图层
|
|
55
|
+
*
|
|
56
|
+
* @memberof GreenWaveLine
|
|
57
|
+
*/
|
|
58
|
+
hideLayer(): void;
|
|
59
|
+
/**
|
|
60
|
+
* 显示图层
|
|
61
|
+
*
|
|
62
|
+
* @memberof Overlay
|
|
63
|
+
*/
|
|
64
|
+
showLayer(): void;
|
|
65
|
+
clearGreenWaveLine(): void;
|
|
66
|
+
destroy(): void;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
@@ -11,6 +11,7 @@ export default class Index {
|
|
|
11
11
|
handleVehicleTraceData(data: any): void;
|
|
12
12
|
toggleTrafficObject(params: IToggleTrafficInfoParams): void;
|
|
13
13
|
clearHoloTrace(): void;
|
|
14
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
14
15
|
updatePanelContent(contentType: string): void;
|
|
15
16
|
handleSignalData(data: any): Promise<void>;
|
|
16
17
|
clearHoloSignal(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../../../types/index.js"),o=require("./signal-holo-flow.js"),i=require("./trace-holo-flow.js");class c{constructor(e){this.view=e}handleVehicleTraceData(e){this.traceHoloFlow||(this.traceHoloFlow=new i.default(this.view)),this.traceHoloFlow.handleVehicleTraceData(e)}toggleTrafficObject(e){var l,a;switch(e.name.toLowerCase()){case"groundVehicle".toLowerCase():(l=this.traceHoloFlow)==null||l.toggleGroundVehicle(e.visible);break;case"elevatedVehicle".toLowerCase():(a=this.traceHoloFlow)==null||a.toggleElevatedVehicle(e.visible);break}}clearHoloTrace(){var e;(e=this.traceHoloFlow)==null||e.clearTrace()}updatePanelContent(e){var a;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}(a=this.traceHoloFlow)==null||a.updatePanelContent(l)}async handleSignalData(e){this.signalHoloFlow||(this.signalHoloFlow=new o.default(this.view)),await this.signalHoloFlow.initializeLayer(),await this.signalHoloFlow.handleSignalData(e)}clearHoloSignal(){var e;(e=this.signalHoloFlow)==null||e.clearSignal()}}exports.default=c;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../../../types/index.js"),o=require("./signal-holo-flow.js"),i=require("./trace-holo-flow.js");class c{constructor(e){this.view=e}handleVehicleTraceData(e){this.traceHoloFlow||(this.traceHoloFlow=new i.default(this.view)),this.traceHoloFlow.handleVehicleTraceData(e)}toggleTrafficObject(e){var l,a;switch(e.name.toLowerCase()){case"groundVehicle".toLowerCase():(l=this.traceHoloFlow)==null||l.toggleGroundVehicle(e.visible);break;case"elevatedVehicle".toLowerCase():(a=this.traceHoloFlow)==null||a.toggleElevatedVehicle(e.visible);break}}clearHoloTrace(){var e;(e=this.traceHoloFlow)==null||e.clearTrace()}toggleTrafficInfo(e){var l;(l=this.traceHoloFlow)==null||l.toggleTrafficInfo(e)}updatePanelContent(e){var a;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}(a=this.traceHoloFlow)==null||a.updatePanelContent(l)}async handleSignalData(e){this.signalHoloFlow||(this.signalHoloFlow=new o.default(this.view)),await this.signalHoloFlow.initializeLayer(),await this.signalHoloFlow.handleSignalData(e)}clearHoloSignal(){var e;(e=this.signalHoloFlow)==null||e.clearSignal()}}exports.default=c;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EVehiclePlateState, ITraceRendererInterface, IVehicleTrack } from '../../../types';
|
|
1
|
+
import { EVehiclePlateState, IToggleTrafficInfoParams, ITraceRendererInterface, IVehicleTrack } from '../../../types';
|
|
2
2
|
export default class TraceExternalRenderer implements ITraceRendererInterface {
|
|
3
3
|
private renderer;
|
|
4
4
|
private scene;
|
|
@@ -39,6 +39,7 @@ export default class TraceExternalRenderer implements ITraceRendererInterface {
|
|
|
39
39
|
* 删除车辆
|
|
40
40
|
* */
|
|
41
41
|
deleteVehicles(idList: string[]): void;
|
|
42
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
42
43
|
/**
|
|
43
44
|
* 清除全部车辆
|
|
44
45
|
* */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("@arcgis/core/geometry/SpatialReference"),R=require("@arcgis/core/views/3d/externalRenderers"),S=require("three"),P=require("three/examples/jsm/loaders/GLTFLoader.js"),p=require("../../../types/index.js"),T=require("../../stores/index.js");function b(u){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(u){for(const e in u)if(e!=="default"){const t=Object.getOwnPropertyDescriptor(u,e);Object.defineProperty(i,e,t.get?t:{enumerable:!0,get:()=>u[e]})}}return i.default=u,Object.freeze(i)}const y=b(R),o=b(S);class C{constructor(i){this.defaultMaterial=new o.MeshBasicMaterial({color:6908265}),this.materialMap=new Map([[1,new o.MeshBasicMaterial({color:16777215})],[2,new o.MeshBasicMaterial({color:7833753})],[3,new o.MeshBasicMaterial({color:16766720})],[4,new o.MeshBasicMaterial({color:16758465})],[5,new o.MeshBasicMaterial({color:14423100})],[6,new o.MeshBasicMaterial({color:3329330})],[7,new o.MeshBasicMaterial({color:2003183})],[8,new o.MeshBasicMaterial({color:16032864})],[9,new o.MeshBasicMaterial({color:2105376})],[10,new o.MeshBasicMaterial({color:9662683})],[99,new o.MeshBasicMaterial({color:6908265})]]),this.carModelReady=!1,this.vanModelReady=!1,this.truckModelReady=!1,this.busModelReady=!1,this.bicycleModelReady=!1,this.currentSpriteContent=p.EVehiclePlateState.None,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map;const e=T.default.useAppDataStore;this.assetsRoot=JSON.parse(JSON.stringify(e.mapConfig)).assetsRoot,this.view=i;const t=new P.GLTFLoader;t.load(`${this.assetsRoot}/3DModels/car.glb`,s=>{this.carModel=s.scene,this.carModel.rotation.x=o.MathUtils.degToRad(90),this.carModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/van.glb`,s=>{this.vanModel=s.scene,this.vanModel.rotation.x=o.MathUtils.degToRad(90),this.vanModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/truck.glb`,s=>{this.truckModel=s.scene,this.truckModel.scale.set(1.2,1,1.5),this.truckModel.rotation.x=o.MathUtils.degToRad(90),this.truckModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/bus.glb`,s=>{this.busModel=s.scene,this.busModel.rotation.x=o.MathUtils.degToRad(90),this.busModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/bicycle.glb`,s=>{this.bicycleModel=s.scene,this.bicycleModel.rotation.x=o.MathUtils.degToRad(90),this.bicycleModel.rotation.y=o.MathUtils.degToRad(180),this.bicycleModelReady=!0})}async setup(i){this.renderer=new o.WebGLRenderer({context:i.gl,premultipliedAlpha:!1,antialias:!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=t=>{e(t),t==null&&i.bindRenderTarget()},this.scene=new o.Scene,this.camera=new o.PerspectiveCamera,this.ambient=new o.AmbientLight(16777215,.5),this.scene.add(this.ambient),this.sun=new o.DirectionalLight(16777215,.5),this.scene.add(this.sun),i.resetWebGLState()}async render(i){var s;const e=i.camera;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 o.Vector3(e.center[0],e.center[1],e.center[2])),this.camera.projectionMatrix.fromArray(e.projectionMatrix);for(const r of this.vehicleObjectMap.keys()){const l=(s=this.vehicleObjectMap.get(r))==null?void 0:s.model;if(!l)continue;const a=this.computeVehiclePosition(r);if(a){const c=[0,0,0];y.toRenderCoordinates(this.view,a,0,w.WGS84,c,0,1),l.position.set(c[0],c[1],c[2]),l.rotation.y=o.MathUtils.degToRad(-a[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 o.Color(t.diffuse.color[0],t.diffuse.color[1],t.diffuse.color[2]),this.ambient.intensity=t.ambient.intensity,this.ambient.color=new o.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),y.requestRender(this.view),i.resetWebGLState()}addVehicles(i){!this.carModelReady||!this.vanModelReady||!this.truckModelReady||!this.busModelReady||!this.bicycleModelReady||i.forEach(e=>{const{crossId:t,ptcId:s,localTimestamp:r}=e,l=Number(e.x),a=Number(e.y),c=Number(e.heading),h=`${t}-${s}`;this.historyPositionMap.set(h,[{pos:[l,a,0],heading:c,time:r}]);const n=this.getVehicleModel(e);n.name=h,n.visible=!1,this.createPlateSprite(e,d=>{n.add(d),d.position.set(0,5,-4)}),this.scene.add(n),this.vehicleObjectMap.set(h,{model:n,data:e})})}updateVehicles(i){!this.carModelReady||!this.vanModelReady||!this.truckModelReady||!this.busModelReady||!this.bicycleModelReady||i.forEach(e=>{const{crossId:t,ptcId:s,localTimestamp:r}=e,l=Number(e.x),a=Number(e.y);let c=Number(e.heading);const h=`${t}-${s}`,n=this.vehicleObjectMap.get(h);if(n){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){const f=n.model.getObjectByName("VehiclePlate");f&&(n.model.remove(f),this.disposeModel(f)),this.createPlateSprite(e,g=>{n.model.add(g),g.position.set(0,5,-4)})}n.data=e;const d=this.historyPositionMap.get(h),M=d[d.length-1];Math.abs(c-M.heading)>=180&&(c>M.heading?M.heading+=360:c+=360),d.push({pos:[l,a,0],heading:c,time:r})}else{this.historyPositionMap.set(h,[{pos:[l,a,0],heading:c,time:r}]);const d=this.getVehicleModel(e);d.name=h,d.visible=!1,this.createPlateSprite(e,M=>{d.add(M),M.position.set(0,5,-4)}),this.scene.add(d),this.vehicleObjectMap.set(h,{model:d,data:e})}})}deleteVehicles(i){i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(this.disposeModel(t.model),this.scene.remove(t.model),this.vehicleObjectMap.delete(e),this.historyPositionMap.delete(e))})}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()}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");s&&(t.model.remove(s),this.disposeModel(s)),i!==p.EVehiclePlateState.None&&this.createPlateSprite(t.data,r=>{t.model.add(r),r.position.set(0,5,-4)})}}}}toggleGroundVehicle(i){}toggleElevatedVehicle(i){}disposeModel(i){i.traverse(e=>{e instanceof o.Mesh&&(e.geometry.dispose(),e.material.dispose())})}computeVehiclePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!t||!e)return[0,0,0,0];if(e.length===0)return[0,0,0,0];if(e.length<=2)return[...e[0].pos,e[0].heading];const s=Date.now();t.model.visible=!0,t.segmentStartTime||(t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time);const r=s-t.segmentStartTime,l=Math.min(r/t.segmentTotalTime,1);if(l===1)if(e.shift(),e.length===1){t.segmentStartTime=void 0;return}else return t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time,Math.abs(e[1].heading-e[0].heading)>=180&&(e[1].heading>e[0].heading?e[0].heading+=360:e[1].heading+=360),[...e[0].pos,e[0].heading];else{const a=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*l,c=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*l,h=e[0].heading+(e[1].heading-e[0].heading)*l;return[a,c,0,h]}}getVehicleModel(i){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(r=>{!s&&r instanceof o.Mesh&&(r.material=t,s=!0)})}return e}createCanvas(i,e,t){const s=document.createElement("canvas"),r=i.width,l=i.height;s.width=r,s.height=l;const a=s.getContext("2d");if(!a){console.log("canvas创建失败");return}return a.fillStyle="rgba(0,0,0,0.0)",a.fillRect(0,0,r,l),a.drawImage(i,0,0,r,l),a.beginPath(),a.translate(r/2,l/2),a.fillStyle=t,a.font="bold 32px 宋体",a.textBaseline="middle",a.textAlign="center",a.fillText(e,0,0),s}createPlateSprite(i,e){var c,h;const t=!i.plateNo||i.plateNo==="0"||i.plateNo==="000000";if(this.currentSpriteContent===p.EVehiclePlateState.None||this.currentSpriteContent===p.EVehiclePlateState.PlateNumber&&t)return;const s=new Image;let r="",l="",a="";if(this.currentSpriteContent===p.EVehiclePlateState.PlateNumber||this.currentSpriteContent===p.EVehiclePlateState.Mix)if(t)r="grey",l=i.ptcId,a="#ffffff";else switch(l=((c=i.showName)==null?void 0:c.substring(0,2))+"•"+((h=i.showName)==null?void 0:h.substring(2)),i.plateColor){case 1:r="blue",a="#ffffff";break;case 2:r="yellow",a="#000000";break;case 3:r="white",a="#000000";break;case 4:r="black";break;case 5:r="neo_yellow",a="#000000";break;case 6:r="neo_green",a="#000000";break;default:r="grey",l=i.plateNo,a="#ffffff";break}else this.currentSpriteContent===p.EVehiclePlateState.Id&&(r="grey",l=i.ptcId,a="#ffffff");s.src=`${this.assetsRoot}/Images/PlateBG/${r}.png`,s.onload=()=>{const n=this.createCanvas(s,l,a);if(!n)return;const d=new o.CanvasTexture(n),M=new o.SpriteMaterial({map:d}),m=new o.Sprite(M),f=.05,g=n.width*f,v=n.height*f;m.scale.set(g,v,1),m.name="VehiclePlate",e(m)}}}exports.default=C;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("@arcgis/core/geometry/SpatialReference"),R=require("@arcgis/core/views/3d/externalRenderers"),S=require("three"),P=require("three/examples/jsm/loaders/GLTFLoader.js"),p=require("../../../types/index.js"),T=require("../../stores/index.js");function b(u){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(u){for(const e in u)if(e!=="default"){const t=Object.getOwnPropertyDescriptor(u,e);Object.defineProperty(i,e,t.get?t:{enumerable:!0,get:()=>u[e]})}}return i.default=u,Object.freeze(i)}const y=b(R),o=b(S);class C{constructor(i){this.defaultMaterial=new o.MeshBasicMaterial({color:6908265}),this.materialMap=new Map([[1,new o.MeshBasicMaterial({color:16777215})],[2,new o.MeshBasicMaterial({color:7833753})],[3,new o.MeshBasicMaterial({color:16766720})],[4,new o.MeshBasicMaterial({color:16758465})],[5,new o.MeshBasicMaterial({color:14423100})],[6,new o.MeshBasicMaterial({color:3329330})],[7,new o.MeshBasicMaterial({color:2003183})],[8,new o.MeshBasicMaterial({color:16032864})],[9,new o.MeshBasicMaterial({color:2105376})],[10,new o.MeshBasicMaterial({color:9662683})],[99,new o.MeshBasicMaterial({color:6908265})]]),this.carModelReady=!1,this.vanModelReady=!1,this.truckModelReady=!1,this.busModelReady=!1,this.bicycleModelReady=!1,this.currentSpriteContent=p.EVehiclePlateState.None,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map;const e=T.default.useAppDataStore;this.assetsRoot=JSON.parse(JSON.stringify(e.mapConfig)).assetsRoot,this.view=i;const t=new P.GLTFLoader;t.load(`${this.assetsRoot}/3DModels/car.glb`,s=>{this.carModel=s.scene,this.carModel.rotation.x=o.MathUtils.degToRad(90),this.carModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/van.glb`,s=>{this.vanModel=s.scene,this.vanModel.rotation.x=o.MathUtils.degToRad(90),this.vanModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/truck.glb`,s=>{this.truckModel=s.scene,this.truckModel.scale.set(1.2,1,1.5),this.truckModel.rotation.x=o.MathUtils.degToRad(90),this.truckModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/bus.glb`,s=>{this.busModel=s.scene,this.busModel.rotation.x=o.MathUtils.degToRad(90),this.busModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/bicycle.glb`,s=>{this.bicycleModel=s.scene,this.bicycleModel.rotation.x=o.MathUtils.degToRad(90),this.bicycleModel.rotation.y=o.MathUtils.degToRad(180),this.bicycleModelReady=!0})}async setup(i){this.renderer=new o.WebGLRenderer({context:i.gl,premultipliedAlpha:!1,antialias:!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=t=>{e(t),t==null&&i.bindRenderTarget()},this.scene=new o.Scene,this.camera=new o.PerspectiveCamera,this.ambient=new o.AmbientLight(16777215,.5),this.scene.add(this.ambient),this.sun=new o.DirectionalLight(16777215,.5),this.scene.add(this.sun),i.resetWebGLState()}async render(i){var s;const e=i.camera;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 o.Vector3(e.center[0],e.center[1],e.center[2])),this.camera.projectionMatrix.fromArray(e.projectionMatrix);for(const r of this.vehicleObjectMap.keys()){const l=(s=this.vehicleObjectMap.get(r))==null?void 0:s.model;if(!l)continue;const a=this.computeVehiclePosition(r);if(a){const c=[0,0,0];y.toRenderCoordinates(this.view,a,0,w.WGS84,c,0,1),l.position.set(c[0],c[1],c[2]),l.rotation.y=o.MathUtils.degToRad(-a[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 o.Color(t.diffuse.color[0],t.diffuse.color[1],t.diffuse.color[2]),this.ambient.intensity=t.ambient.intensity,this.ambient.color=new o.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),y.requestRender(this.view),i.resetWebGLState()}addVehicles(i){!this.carModelReady||!this.vanModelReady||!this.truckModelReady||!this.busModelReady||!this.bicycleModelReady||i.forEach(e=>{const{crossId:t,ptcId:s,localTimestamp:r}=e,l=Number(e.x),a=Number(e.y),c=Number(e.heading),h=`${t}-${s}`;this.historyPositionMap.set(h,[{pos:[l,a,0],heading:c,time:r}]);const n=this.getVehicleModel(e);n.name=h,n.visible=!1,this.createPlateSprite(e,d=>{n.add(d),d.position.set(0,5,-4)}),this.scene.add(n),this.vehicleObjectMap.set(h,{model:n,data:e})})}updateVehicles(i){!this.carModelReady||!this.vanModelReady||!this.truckModelReady||!this.busModelReady||!this.bicycleModelReady||i.forEach(e=>{const{crossId:t,ptcId:s,localTimestamp:r}=e,l=Number(e.x),a=Number(e.y);let c=Number(e.heading);const h=`${t}-${s}`,n=this.vehicleObjectMap.get(h);if(n){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){const f=n.model.getObjectByName("VehiclePlate");f&&(n.model.remove(f),this.disposeModel(f)),this.createPlateSprite(e,g=>{n.model.add(g),g.position.set(0,5,-4)})}n.data=e;const d=this.historyPositionMap.get(h),M=d[d.length-1];Math.abs(c-M.heading)>=180&&(c>M.heading?M.heading+=360:c+=360),d.push({pos:[l,a,0],heading:c,time:r})}else{this.historyPositionMap.set(h,[{pos:[l,a,0],heading:c,time:r}]);const d=this.getVehicleModel(e);d.name=h,d.visible=!1,this.createPlateSprite(e,M=>{d.add(M),M.position.set(0,5,-4)}),this.scene.add(d),this.vehicleObjectMap.set(h,{model:d,data:e})}})}deleteVehicles(i){i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(this.disposeModel(t.model),this.scene.remove(t.model),this.vehicleObjectMap.delete(e),this.historyPositionMap.delete(e))})}toggleTrafficInfo(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()}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");s&&(t.model.remove(s),this.disposeModel(s)),i!==p.EVehiclePlateState.None&&this.createPlateSprite(t.data,r=>{t.model.add(r),r.position.set(0,5,-4)})}}}}toggleGroundVehicle(i){}toggleElevatedVehicle(i){}disposeModel(i){i.traverse(e=>{e instanceof o.Mesh&&(e.geometry.dispose(),e.material.dispose())})}computeVehiclePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!t||!e)return[0,0,0,0];if(e.length===0)return[0,0,0,0];if(e.length<=2)return[...e[0].pos,e[0].heading];const s=Date.now();t.model.visible=!0,t.segmentStartTime||(t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time);const r=s-t.segmentStartTime,l=Math.min(r/t.segmentTotalTime,1);if(l===1)if(e.shift(),e.length===1){t.segmentStartTime=void 0;return}else return t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time,Math.abs(e[1].heading-e[0].heading)>=180&&(e[1].heading>e[0].heading?e[0].heading+=360:e[1].heading+=360),[...e[0].pos,e[0].heading];else{const a=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*l,c=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*l,h=e[0].heading+(e[1].heading-e[0].heading)*l;return[a,c,0,h]}}getVehicleModel(i){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(r=>{!s&&r instanceof o.Mesh&&(r.material=t,s=!0)})}return e}createCanvas(i,e,t){const s=document.createElement("canvas"),r=i.width,l=i.height;s.width=r,s.height=l;const a=s.getContext("2d");if(!a){console.log("canvas创建失败");return}return a.fillStyle="rgba(0,0,0,0.0)",a.fillRect(0,0,r,l),a.drawImage(i,0,0,r,l),a.beginPath(),a.translate(r/2,l/2),a.fillStyle=t,a.font="bold 32px 宋体",a.textBaseline="middle",a.textAlign="center",a.fillText(e,0,0),s}createPlateSprite(i,e){var c,h;const t=!i.plateNo||i.plateNo==="0"||i.plateNo==="000000";if(this.currentSpriteContent===p.EVehiclePlateState.None||this.currentSpriteContent===p.EVehiclePlateState.PlateNumber&&t)return;const s=new Image;let r="",l="",a="";if(this.currentSpriteContent===p.EVehiclePlateState.PlateNumber||this.currentSpriteContent===p.EVehiclePlateState.Mix)if(t)r="grey",l=i.ptcId,a="#ffffff";else switch(l=((c=i.showName)==null?void 0:c.substring(0,2))+"•"+((h=i.showName)==null?void 0:h.substring(2)),i.plateColor){case 1:r="blue",a="#ffffff";break;case 2:r="yellow",a="#000000";break;case 3:r="white",a="#000000";break;case 4:r="black";break;case 5:r="neo_yellow",a="#000000";break;case 6:r="neo_green",a="#000000";break;default:r="grey",l=i.plateNo,a="#ffffff";break}else this.currentSpriteContent===p.EVehiclePlateState.Id&&(r="grey",l=i.ptcId,a="#ffffff");s.src=`${this.assetsRoot}/Images/PlateBG/${r}.png`,s.onload=()=>{const n=this.createCanvas(s,l,a);if(!n)return;const d=new o.CanvasTexture(n),M=new o.SpriteMaterial({map:d}),m=new o.Sprite(M),f=.05,g=n.width*f,v=n.height*f;m.scale.set(g,v,1),m.name="VehiclePlate",e(m)}}}exports.default=C;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EVehiclePlateState } from '../../../types';
|
|
1
|
+
import { EVehiclePlateState, IToggleTrafficInfoParams } from '../../../types';
|
|
2
2
|
export default class TraceHoloFlow {
|
|
3
3
|
private mapConfig;
|
|
4
4
|
private view;
|
|
@@ -9,6 +9,11 @@ export default class TraceHoloFlow {
|
|
|
9
9
|
* 处理全息流轨迹数据
|
|
10
10
|
* */
|
|
11
11
|
handleVehicleTraceData(data: any): void;
|
|
12
|
+
/**
|
|
13
|
+
* 切换交通信息可见性
|
|
14
|
+
* @param params
|
|
15
|
+
*/
|
|
16
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
12
17
|
/**
|
|
13
18
|
* 清除轨迹流
|
|
14
19
|
* */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
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"),T=require("./trace-external-renderer.js"),b=require("./trace-layer-renderer.js");function R(i){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const t in i)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(i,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>i[t]})}}return e.default=i,Object.freeze(e)}const V=R(g);class y{constructor(e){this.lastDataTime=0,this.view=e;const t=m.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(t.mapConfig)),e.type==="3d"?(this.traceRenderer=new T.default(e),V.add(e,this.traceRenderer)):this.traceRenderer=new b.default(e)}handleVehicleTraceData(e){const t=new Date().getTime();if(t-this.lastDataTime<100)return;this.lastDataTime=t;const{newVehList:a,updateVehList:l,deleteVehList:o,jgsj:d}=e,h=e.crossId||"",u=[],c=[];if(a&&a.length>0){for(const n of a){n.localTimestamp||(n.localTimestamp=d||t);const r=this.buildVehicleTrackData(n,h);r&&u.push(r)}this.traceRenderer.addVehicles(u)}if(l&&l.length>0){for(const n of l){const r=this.buildVehicleTrackData(n,h);r&&c.push(r)}this.traceRenderer.updateVehicles(c)}if(o&&o.length>0){const n=o.map(r=>h+"-"+(r.ptcId||r.vehno||r.vehNo));this.traceRenderer.deleteVehicles(n)}}toggleTrafficInfo(e){this.traceRenderer.toggleTrafficInfo(e)}clearTrace(){this.traceRenderer.clearVehicles()}updatePanelContent(e){this.traceRenderer.updatePanelContent(e)}toggleGroundVehicle(e){this.traceRenderer.toggleGroundVehicle(e)}toggleElevatedVehicle(e){this.traceRenderer.toggleElevatedVehicle(e)}buildVehicleTrackData(e,t){const s=e.longitude,a=e.latitude,l=e.ptcId,o=Number(e.ptcType),d=e.heading,h=Number(e.vehicleType),u=Number(e.vehicleColor),c=e.plateNo||e.plateno,n=Number(e.plateColor),r=e.timestamp,p=e.localTimestamp,f=String(e.roadLayer)||"1";if(!(o<0||o>8))return{ptcId:l,crossId:t,x:s,y:a,ptcType:o,vehicleType:h,heading:o===2?-d:d,vehicleColor:u,showName:c&&c!==""&&c!=="0"&&c!=="000000"?c:"",plateNo:c,plateColor:n,timestamp:r,localTimestamp:p,roadLayer:f}}}exports.default=y;
|
|
@@ -24,6 +24,10 @@ export default class TraceLayerRenderer implements ITraceRendererInterface {
|
|
|
24
24
|
* @param visible
|
|
25
25
|
*/
|
|
26
26
|
toggleElevatedVehicle(visible: boolean): void;
|
|
27
|
+
toggleTrafficInfo(params: {
|
|
28
|
+
name: string;
|
|
29
|
+
visible: boolean;
|
|
30
|
+
}): void;
|
|
27
31
|
private render;
|
|
28
32
|
private updatePosition;
|
|
29
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("@arcgis/core/Graphic"),p=require("@arcgis/core/layers/GraphicsLayer"),m=require("../../stores/index.js");class g{constructor(i){this.showVehiclePlate=!1,this.showGroundVehicle=!0,this.showElevatedVehicle=!0,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map,this.view=i;const e=m.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(e.mapConfig)),this.vehicleLayer=new p({id:"vehicleLayer"}),this.view.map.add(this.vehicleLayer),requestAnimationFrame(()=>this.render())}addVehicles(i){const e=i.map(t=>{const{crossId:l,ptcId:n}=t,s=Number(t.x),a=Number(t.y),r=Number(t.heading),o=`${l}-${n}`;this.historyPositionMap.set(o,[{pos:[s,a,0],heading:r,time:Date.now()}]);const c=new h({geometry:{type:"point",x:s,y:a},attributes:{...t},symbol:this.createCIMSymbol(t)});return c.visible=!1,this.vehicleObjectMap.set(o,{graphic:c,data:t,waitForDelete:!1}),c});this.vehicleLayer.addMany(e)}updateVehicles(i){const e=[];i.forEach(t=>{const{crossId:l,ptcId:n}=t,s=Number(t.x),a=Number(t.y),r=`${l}-${n}`,o=this.vehicleObjectMap.get(r);o?(o.data=t,this.historyPositionMap.get(r).push({pos:[s,a,0],heading:t.heading,time:Date.now()})):e.push(t)}),this.addVehicles(e)}deleteVehicles(i){i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(t.waitForDelete=!0)})}clearVehicles(){this.vehicleLayer.removeAll(),this.vehicleObjectMap.clear(),this.historyPositionMap.clear()}updatePanelContent(i){console.log(i)}toggleGroundVehicle(i){this.showGroundVehicle=i}toggleElevatedVehicle(i){this.showElevatedVehicle=i}toggleTrafficInfo(i){i.name==="vehiclePlate"&&(this.showVehiclePlate=i.visible)}render(){this.vehicleObjectMap.forEach((i,e)=>{this.updatePosition(e)}),requestAnimationFrame(()=>this.render())}updatePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!e||!t||e.length<=1)return;(t.graphic.getAttribute("roadLayer")||"1")==="1"?t.graphic.visible=this.showGroundVehicle:t.graphic.visible=this.showElevatedVehicle,t.segmentStartTime||(t.segmentStartTime=Date.now(),t.segmentTotalTime=e[1].time-e[0].time);const n=Date.now()-t.segmentStartTime,s=Math.min(1,n/t.segmentTotalTime);if(s===1)if(e.shift(),e.length===1){t.waitForDelete?(this.vehicleLayer.remove(t.graphic),this.vehicleObjectMap.delete(i),this.historyPositionMap.delete(i)):(t.segmentStartTime=void 0,t.segmentTotalTime=void 0);return}else 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),t.graphic.geometry={type:"point",x:e[0].pos[0],y:e[0].pos[1]};else{const a=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*s,r=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*s,o=e[0].heading+(e[1].heading-e[0].heading)*s;t.graphic.geometry={type:"point",x:a,y:r},t.data.heading=o,t.graphic.symbol=this.createCIMSymbol(t.data)}}createCIMSymbol(i){const e=this.getPlateFontColor(i.plateColor);return{type:"cim",data:{type:"CIMSymbolReference",primitiveOverrides:[{type:"CIMPrimitiveOverride",primitiveName:"textGraphic",propertyName:"TextString",valueExpressionInfo:{type:"CIMExpressionInfo",title:"Custom",expression:"$feature.showName",returnType:"Default"}}],symbol:{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:this.showVehiclePlate,size:32,colorLocked:!0,anchorPointUnits:"Relative",frame:{xmin:-8,ymin:-8,xmax:8,ymax:8},markerGraphics:[{type:"CIMMarkerGraphic",primitiveName:"textGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",height:4,horizontalAlignment:"Center",offsetX:0,offsetY:8,haloSize:1,haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:e.backgroundColor}]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:e.fillColor}]},verticalAlignment:"Center"},textString:""}],scaleSymbolsProportionally:!0,respectFrame:!0},{type:"CIMPictureMarker",enable:!0,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",size:30,rotation:i.heading,rotateClockwise:!0,textureFilter:"Picture",url:`${this.mapConfig.assetsRoot}Images/car/${this.getCarPic(i.vehicleColor)}`}]}}}}getCarPic(i){if(this.view.zoom<=15)return"point.png";let e="grey";switch(typeof i=="string"&&(i=i.toLowerCase()),i){case"a":case 1:e="white";break;case"b":case 2:e="grey";break;case"c":case 3:e="yellow";break;case"d":case 4:e="pink";break;case"e":case 5:e="red";break;case"f":case 10:e="purple";break;case"g":case 6:e="green";break;case"h":case 7:e="blue";break;case"i":case 8:e="brown";break;case"j":case 9:e="black";break}return e+".png"}getPlateFontColor(i){let e=[255,255,255,255],t=[169,169,169,255];switch(i){case 0:e=[0,0,0,255],t=[255,255,255,255];break;case 1:e=[0,0,0,255],t=[244,164,96,255];break;case 2:e=[255,255,255,255],t=[65,105,225,255];break;case 3:e=[255,255,255,255],t=[0,0,0,255];break;case 15:e=[244,164,96,255],t=[0,250,154,255];break;case 16:e=[0,0,0,255],t=[0,250,154,255];break}return{fillColor:e,backgroundColor:t}}}exports.default=g;
|
package/lib/src/types/index.d.ts
CHANGED
|
@@ -146,6 +146,7 @@ export interface ITraceRendererInterface {
|
|
|
146
146
|
updatePanelContent(contentType: EVehiclePlateState): void;
|
|
147
147
|
toggleGroundVehicle(visible: boolean): void;
|
|
148
148
|
toggleElevatedVehicle(visible: boolean): void;
|
|
149
|
+
toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
|
|
149
150
|
}
|
|
150
151
|
export declare enum EVehiclePlateState {
|
|
151
152
|
None = 0,
|