gisviewer-vue3-arcgis 1.0.222 → 1.0.223

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.
@@ -1,19 +1,31 @@
1
- import { ISignalCountdownProps } from '../../../types';
1
+ import { IResult, ISignalCountdownProps } from '../../../types';
2
2
  import SignalHoloFlow from './signal-holo-flow';
3
3
  export default class LSRSignalHoloFlow extends SignalHoloFlow {
4
4
  private stopLineLayer;
5
5
  private watchHandle;
6
6
  private countdownPanelProps;
7
+ private currentPanelScale;
7
8
  /** 轨迹延迟时间 */
8
9
  private trajectoryDelayTime;
9
- constructor(view: __esri.MapView | __esri.SceneView, countdownPanelInfos: ISignalCountdownProps[]);
10
+ /** 按照路口id->进口道路段id->停止线坐标保存的停止线 */
10
11
  private stopLineMap;
12
+ /** 信号机id->进口道id->灯组id */
13
+ private lampGroupMap;
14
+ constructor(view: __esri.MapView | __esri.SceneView, countdownPanelInfos: ISignalCountdownProps[]);
11
15
  /**
12
16
  * 读取停止线图层,将灯组面板沿着停止线放置
13
17
  * @returns
14
18
  */
15
19
  initializeLayer(): Promise<void>;
16
- private currentPanelScale;
20
+ /**
21
+ * 初始化灯组与进口道的关联关系
22
+ */
23
+ initializeLampGroup(data: any): void;
24
+ /**
25
+ * 处理统一信控平台信号灯数据
26
+ * @param data
27
+ */
28
+ handleUniSignalData(data: any): IResult;
17
29
  /**
18
30
  * 根据地图比例尺计算灯组面板缩放比例
19
31
  */
@@ -22,6 +34,8 @@ export default class LSRSignalHoloFlow extends SignalHoloFlow {
22
34
  * 地图移动时更新灯组面板位置
23
35
  */
24
36
  private updatePanelPosition;
37
+ private doHoloSignalData;
38
+ private updateLampGroupPanelStatus;
25
39
  /**
26
40
  * 处理全息流信号灯数据
27
41
  * @param data
@@ -1,186 +1,243 @@
1
- import * as u from "@arcgis/core/core/reactiveUtils";
1
+ import * as d from "@arcgis/core/core/reactiveUtils";
2
2
  import { Point as f } from "@arcgis/core/geometry";
3
- import * as d from "@arcgis/core/geometry/support/webMercatorUtils.js";
4
- import g from "@arcgis/core/layers/GraphicsLayer";
5
- import y from "./signal-holo-flow.mjs";
6
- class b extends y {
7
- constructor(e, t) {
8
- var a, l;
9
- super(e), this.stopLineLayer = new g(), this.watchHandle = null, this.trajectoryDelayTime = 0, this.stopLineMap = /* @__PURE__ */ new Map(), this.countdownPanelProps = t, this.view.map.add(this.stopLineLayer), this.trajectoryDelayTime = ((l = (a = this.mapConfig.holoFlow) == null ? void 0 : a.signal) == null ? void 0 : l.delay) || 2;
3
+ import * as u from "@arcgis/core/geometry/support/webMercatorUtils.js";
4
+ import w from "@arcgis/core/layers/GraphicsLayer";
5
+ import g from "./signal-holo-flow.mjs";
6
+ class M extends g {
7
+ constructor(t, o) {
8
+ var r, i;
9
+ super(t), this.stopLineLayer = new w(), this.watchHandle = null, this.trajectoryDelayTime = 2, this.stopLineMap = /* @__PURE__ */ new Map(), this.lampGroupMap = /* @__PURE__ */ new Map(), this.countdownPanelProps = o, this.view.map.add(this.stopLineLayer), this.trajectoryDelayTime = ((i = (r = this.mapConfig.holoFlow) == null ? void 0 : r.signal) == null ? void 0 : i.delay) || 2;
10
10
  }
11
11
  /**
12
12
  * 读取停止线图层,将灯组面板沿着停止线放置
13
13
  * @returns
14
14
  */
15
15
  async initializeLayer() {
16
- var l, c;
16
+ var i, e;
17
+ if (this.stopLineMap.size > 0)
18
+ return;
17
19
  console.time("初始化停止线图层");
18
- let e = (c = (l = this.mapConfig.holoFlow) == null ? void 0 : l.signal) == null ? void 0 : c.stopLineLayer;
19
- if (!e)
20
+ let t = (e = (i = this.mapConfig.holoFlow) == null ? void 0 : i.signal) == null ? void 0 : e.stopLineLayer;
21
+ if (!t)
20
22
  return;
21
- e = this.mapConfig.assetsRoot + "/" + e;
22
- const a = await (await fetch(e)).json();
23
- for (const n of a.features) {
24
- const { roadId: r, nodeId: o } = n.properties;
25
- let { destinationPoint: s } = n.properties;
26
- const { coordinates: i } = n.geometry;
27
- if (s) {
28
- if (typeof s == "string")
23
+ t = this.mapConfig.assetsRoot + "/" + t;
24
+ const r = await (await fetch(t)).json();
25
+ for (const s of r.features) {
26
+ const { roadId: a } = s.properties;
27
+ let { destinationPoint: n } = s.properties;
28
+ const { coordinates: l } = s.geometry;
29
+ if (n) {
30
+ if (typeof n == "string")
29
31
  try {
30
- s = JSON.parse(s);
31
- } catch (h) {
32
- console.error("解析面板基准点失败", h);
32
+ n = JSON.parse(n);
33
+ } catch (c) {
34
+ console.error("解析面板基准点失败", c);
33
35
  continue;
34
36
  }
35
37
  } else {
36
- const h = i[0], w = i[i.length - 1], P = (h[0] + w[0]) / 2, m = (h[1] + w[1]) / 2;
37
- s = [P, m];
38
+ const c = l[0], h = l[l.length - 1], p = (c[0] + h[0]) / 2, m = (c[1] + h[1]) / 2;
39
+ n = [p, m];
38
40
  }
39
- const p = this.stopLineMap.get(o);
40
- p ? p.set(r, {
41
- coord: i,
42
- panelPoint: s
43
- }) : this.stopLineMap.set(
44
- o,
45
- /* @__PURE__ */ new Map([
46
- [r, { coord: i, panelPoint: s }]
47
- ])
48
- );
41
+ this.stopLineMap.set(a, {
42
+ coord: l,
43
+ panelPoint: n
44
+ });
49
45
  }
50
46
  console.timeEnd("初始化停止线图层");
51
47
  }
48
+ /**
49
+ * 初始化灯组与进口道的关联关系
50
+ */
51
+ initializeLampGroup(t) {
52
+ const { sigId: o, lampGroupList: r } = t, i = [];
53
+ r.forEach((e) => {
54
+ const { lampGroupNo: s, lampGroupType: a, crossFlowList: n, pedList: l } = e;
55
+ n.length > 0 && n.forEach((c) => {
56
+ const h = c.upSectionId;
57
+ let p = "s";
58
+ switch (c.turn) {
59
+ case 1:
60
+ p = "s";
61
+ break;
62
+ case 2:
63
+ p = "l";
64
+ break;
65
+ case 4:
66
+ p = "r";
67
+ break;
68
+ case 8:
69
+ p = "u";
70
+ break;
71
+ }
72
+ a === 81 && (p = "bl"), i.push({
73
+ lampGroupId: s,
74
+ roadId: h,
75
+ dir: p
76
+ });
77
+ }), l.length > 0;
78
+ }), this.lampGroupMap.set(o, i), console.log(i);
79
+ }
80
+ /**
81
+ * 处理统一信控平台信号灯数据
82
+ * @param data
83
+ */
84
+ handleUniSignalData(t) {
85
+ this.watchHandle || (this.watchHandle = d.watch(
86
+ () => this.view.extent,
87
+ () => this.updatePanelPosition()
88
+ ));
89
+ const { sigId: o } = t.data.basicInfo, r = this.lampGroupMap.get(o);
90
+ if (!r)
91
+ return { status: -1, message: "灯组未初始化" };
92
+ const { curSigColorInfo: i } = t.data, e = /* @__PURE__ */ new Map();
93
+ return i.forEach((s) => {
94
+ const a = String(s.lamgroupId), { color: n, leftTime: l } = s, c = r.find(
95
+ (h) => h.lampGroupId === a
96
+ );
97
+ if (c) {
98
+ const { roadId: h, dir: p } = c;
99
+ e.set(h, {
100
+ ...e.get(h) || {},
101
+ [`${p}Number`]: l,
102
+ [`${p}Color`]: n === 1 ? "red" : n === 2 ? "yellow" : "green"
103
+ });
104
+ }
105
+ }), this.updateLampGroupPanelStatus(o, e), { status: 0, message: "ok" };
106
+ }
52
107
  /**
53
108
  * 根据地图比例尺计算灯组面板缩放比例
54
109
  */
55
110
  getPanelScale() {
56
- const e = this.view.scale;
57
- let t = 1;
58
- return e < 1e3 ? t = 1 : e < 2e3 ? t = 0.8 : e < 4e3 ? t = 0.4 : t = 0, t;
111
+ const t = this.view.scale;
112
+ let o = 1;
113
+ return t < 1e3 ? o = 1 : t < 2e3 ? o = 0.8 : t < 4e3 ? o = 0.4 : o = 0, o;
59
114
  }
60
115
  /**
61
116
  * 地图移动时更新灯组面板位置
62
117
  */
63
118
  updatePanelPosition() {
64
- const e = this.getPanelScale();
65
- for (const t of this.countdownPanelProps) {
66
- e !== this.currentPanelScale && (t.scale = e);
67
- const { mapPoint: a } = t;
68
- let l = new f({
69
- x: a[0],
70
- y: a[1]
119
+ const t = this.getPanelScale();
120
+ for (const o of this.countdownPanelProps) {
121
+ t !== this.currentPanelScale && (o.scale = t);
122
+ const { mapPoint: r } = o;
123
+ let i = new f({
124
+ x: r[0],
125
+ y: r[1]
71
126
  });
72
- this.view.spatialReference.isWebMercator && (l = d.geographicToWebMercator(
73
- l
127
+ this.view.spatialReference.isWebMercator && (i = u.geographicToWebMercator(
128
+ i
74
129
  ));
75
- const c = this.view.toScreen(l);
76
- if (t.position.left = c.x, t.position.top = c.y, this.view.type === "3d") {
77
- const n = this.getPanelRotation(t.stopLine);
78
- t.rotation = n;
130
+ const e = this.view.toScreen(i);
131
+ if (o.position.left = e.x, o.position.top = e.y, this.view.type === "3d") {
132
+ const s = this.getPanelRotation(o.stopLine);
133
+ o.rotation = s;
134
+ }
135
+ }
136
+ this.currentPanelScale = t;
137
+ }
138
+ doHoloSignalData(t) {
139
+ const o = t.crossId, r = t.phaseCountDownList, i = /* @__PURE__ */ new Map();
140
+ for (const e of r) {
141
+ let s = "";
142
+ for (let c of e.roadIdList)
143
+ if (c.startsWith("-") && (c = c.slice(1)), this.stopLineMap.has(c)) {
144
+ s = c;
145
+ break;
146
+ }
147
+ if (!s) {
148
+ console.log(`没有找到对应的进口道${o}--${s}`);
149
+ continue;
79
150
  }
151
+ let a = i.get(s);
152
+ if (a || (a = {}, i.set(s, a)), !e.direction)
153
+ continue;
154
+ const n = e.direction.toLowerCase(), l = e.color === 1 ? "red" : e.color === 2 ? "yellow" : "green";
155
+ n === "u" ? (a.uNumber = e.leftTime, a.uColor = l) : n === "l" ? (a.lNumber = e.leftTime, a.lColor = l) : n === "s" ? (a.sNumber = e.leftTime, a.sColor = l) : n === "r" && (a.rNumber = e.leftTime, a.rColor = l);
80
156
  }
81
- this.currentPanelScale = e;
157
+ this.updateLampGroupPanelStatus(o, i);
158
+ }
159
+ updateLampGroupPanelStatus(t, o) {
160
+ o.forEach((r, i) => {
161
+ const e = this.stopLineMap.get(i);
162
+ if (!e)
163
+ return;
164
+ const s = this.countdownPanelProps.find(
165
+ (a) => a.roadId === i
166
+ );
167
+ if (s)
168
+ s.lampStatus = r;
169
+ else {
170
+ let a = new f({
171
+ x: e.panelPoint[0],
172
+ y: e.panelPoint[1]
173
+ });
174
+ this.view.spatialReference.isWebMercator && (a = u.geographicToWebMercator(
175
+ a
176
+ ));
177
+ const n = this.view.toScreen(a), l = this.getPanelRotation(e.coord);
178
+ this.countdownPanelProps.push({
179
+ displayMode: "complex",
180
+ crossId: t,
181
+ roadId: i,
182
+ mapPoint: e.panelPoint,
183
+ // 定位点地理坐标
184
+ stopLine: e.coord,
185
+ // 关联的停止线坐标
186
+ position: { left: n.x, top: n.y },
187
+ // 定位点屏幕坐标
188
+ rotation: l,
189
+ // 面板旋转角度
190
+ scale: this.getPanelScale(),
191
+ lampStatus: r
192
+ // 灯组状态
193
+ });
194
+ }
195
+ });
82
196
  }
83
197
  /**
84
198
  * 处理全息流信号灯数据
85
199
  * @param data
86
200
  * @returns
87
201
  */
88
- async handleHoloSignalData(e) {
89
- this.watchHandle || (this.watchHandle = u.watch(
202
+ async handleHoloSignalData(t) {
203
+ this.watchHandle || (this.watchHandle = d.watch(
90
204
  () => this.view.extent,
91
205
  () => this.updatePanelPosition()
92
- )), setTimeout(() => {
93
- const t = e.crossId, a = this.stopLineMap.get(t);
94
- if (!a) {
95
- console.log(`没有找到路口${t}`);
96
- return;
97
- }
98
- const l = e.phaseCountDownList, c = /* @__PURE__ */ new Map();
99
- for (const n of l) {
100
- let r = "";
101
- for (let p of n.roadIdList)
102
- if (p.startsWith("-") && (p = p.slice(1)), a.has(p)) {
103
- r = p;
104
- break;
105
- }
106
- if (!r) {
107
- console.log(`没有找到对应的进口道${t}--${r}`);
108
- continue;
109
- }
110
- let o = c.get(r);
111
- if (o || (o = {}, c.set(r, o)), !n.direction)
112
- continue;
113
- const s = n.direction.toLowerCase(), i = n.color === 1 ? "red" : n.color === 2 ? "yellow" : "green";
114
- s === "u" ? (o.uNumber = n.leftTime, o.uColor = i) : s === "l" ? (o.lNumber = n.leftTime, o.lColor = i) : s === "s" ? (o.sNumber = n.leftTime, o.sColor = i) : s === "r" && (o.rNumber = n.leftTime, o.rColor = i);
115
- }
116
- c.forEach((n, r) => {
117
- const o = a.get(r);
118
- if (!o)
119
- return;
120
- const s = this.countdownPanelProps.find(
121
- (i) => i.crossId === t && i.roadId === r
122
- );
123
- if (s)
124
- s.lampStatus = n;
125
- else {
126
- let i = new f({
127
- x: o.panelPoint[0],
128
- y: o.panelPoint[1]
129
- });
130
- this.view.spatialReference.isWebMercator && (i = d.geographicToWebMercator(
131
- i
132
- ));
133
- const p = this.view.toScreen(i), h = this.getPanelRotation(o.coord);
134
- this.countdownPanelProps.push({
135
- displayMode: "complex",
136
- crossId: t,
137
- roadId: r,
138
- mapPoint: o.panelPoint,
139
- // 定位点地理坐标
140
- stopLine: o.coord,
141
- // 关联的停止线坐标
142
- position: { left: p.x, top: p.y },
143
- // 定位点屏幕坐标
144
- rotation: h,
145
- // 面板旋转角度
146
- scale: this.getPanelScale(),
147
- lampStatus: n
148
- // 灯组状态
149
- });
150
- }
151
- });
152
- }, this.trajectoryDelayTime * 1e3);
206
+ )), this.trajectoryDelayTime === 0 ? this.doHoloSignalData(t) : setTimeout(
207
+ () => this.doHoloSignalData(t),
208
+ this.trajectoryDelayTime * 1e3
209
+ );
153
210
  }
154
211
  clearSignal() {
155
- var e;
156
- this.stopLineLayer.removeAll(), this.countdownPanelProps.length = 0, (e = this.watchHandle) == null || e.remove(), this.watchHandle = null;
212
+ var t;
213
+ this.stopLineLayer.removeAll(), this.countdownPanelProps.length = 0, (t = this.watchHandle) == null || t.remove(), this.watchHandle = null;
157
214
  }
158
215
  /**
159
216
  * 从停止线坐标计算面板旋转角度
160
217
  * @param coordinates
161
218
  * @returns
162
219
  */
163
- getPanelRotation(e) {
164
- const t = e[0];
165
- let a = new f({
166
- x: t[0],
167
- y: t[1]
220
+ getPanelRotation(t) {
221
+ const o = t[0];
222
+ let r = new f({
223
+ x: o[0],
224
+ y: o[1]
168
225
  });
169
- this.view.spatialReference.isWebMercator && (a = d.geographicToWebMercator(
170
- a
226
+ this.view.spatialReference.isWebMercator && (r = u.geographicToWebMercator(
227
+ r
171
228
  ));
172
- const l = this.view.toScreen(a), c = e[e.length - 1];
173
- let n = new f({
174
- x: c[0],
175
- y: c[1]
229
+ const i = this.view.toScreen(r), e = t[t.length - 1];
230
+ let s = new f({
231
+ x: e[0],
232
+ y: e[1]
176
233
  });
177
- this.view.spatialReference.isWebMercator && (n = d.geographicToWebMercator(
178
- n
234
+ this.view.spatialReference.isWebMercator && (s = u.geographicToWebMercator(
235
+ s
179
236
  ));
180
- const r = this.view.toScreen(n), o = r.x - l.x, s = r.y - l.y;
181
- return Math.atan2(s, o) * (180 / Math.PI);
237
+ const a = this.view.toScreen(s), n = a.x - i.x, l = a.y - i.y;
238
+ return Math.atan2(l, n) * (180 / Math.PI);
182
239
  }
183
240
  }
184
241
  export {
185
- b as default
242
+ M as default
186
243
  };
@@ -92,6 +92,8 @@ declare const _sfc_main: import("vue").DefineComponent<{
92
92
  clearHoloTrace: () => void;
93
93
  setInterpolate: (enable: boolean) => void;
94
94
  handleHoloSignalData: (signalData: any) => Promise<void>;
95
+ initializeLampGroup: (data: any) => Promise<void>;
96
+ handleUniSignalData: (signalData: any) => void;
95
97
  clearHoloSignal: () => void;
96
98
  toggleTrafficInfo: (params: IToggleTrafficInfoParams) => void;
97
99
  togglePause: (pause: boolean) => void;
@@ -204,6 +206,8 @@ declare const _sfc_main: import("vue").DefineComponent<{
204
206
  }>;
205
207
  uImage: import("vue").ComputedRef<string>;
206
208
  uNumberStyle: import("vue").ComputedRef<any>;
209
+ blImage: import("vue").ComputedRef<string>;
210
+ blNumberStyle: import("vue").ComputedRef<any>;
207
211
  lImage: import("vue").ComputedRef<string>;
208
212
  lNumberStyle: import("vue").ComputedRef<any>;
209
213
  sImage: import("vue").ComputedRef<string>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),b=require("./stores/index.js");require("./style/index.css");const We=require("./utils/detect-gpu.js"),A=require("./utils/green-wave-band-controller/index.js"),ze=require("./utils/holo-flow/index.js"),je=require("./utils/holo-flow/signal-countdown-panel.vue.js"),Qe=require("./utils/map-initializer.js"),L=require("./utils/open-drive-renderer/index.js"),D=require("./utils/overlay.js"),Ze=require("./utils/queue-length.js"),T=require("./utils/road-config-tool/index.js"),Ke=require("./utils/signal-control-area-controller/edit-area.js"),Ue=require("./utils/signal-control-area-controller/show-area.js"),Je=require("./utils/traffic-flow.js"),Xe={class:"gis-viewer"},Ye={style:{position:"absolute",bottom:"80px",left:"10px","z-index":"9999"}},Fe=a.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(_,{expose:B,emit:q}){const S=a.ref(null);let o,d,l,i,n,r,f,t,u,s,m;const y=a.ref(!1);b.registerStore();const I=b.default.useAppDataStore,k=a.reactive([]);We.default(),a.onMounted(async()=>{if(!S.value)return;document.addEventListener("keydown",p=>{p.ctrlKey&&p.key==="i"&&(y.value=!y.value)});const e=a.getCurrentInstance(),{$gisviewerAssetsRoot:g}=e.appContext.config.globalProperties,c=await(await fetch(O.config)).json();c.assetsRoot=O.assetsRoot||g,I.mapConfig=c,d=new Qe.default,o=await d.initialize({container:S.value,mapConfig:c,markerClickCallback:(p,C,h,Ge)=>{w("markerClick",p,C,h,Ge)},mapClickCallback:(p,C,h)=>{w("mapClick",p,C,h)}}),n=new ze.default(o,k),await n.init(),w("mapLoaded")}),a.onUnmounted(()=>{s==null||s.clearSignalControlArea(),t==null||t.clearOpenDrive(),n.clearHoloTrace(),n.clearHoloSignal(),i==null||i.disconnectTrafficFlow()});const V=a.computed(()=>o),x=()=>{const e=b.default.useAppDataStore;e.saveTrackLog=!0},M=()=>{n.downloadTrackLog()},N=()=>{v("vehicleId")},E=()=>{v("plateNumber")},H=async e=>await d.setMapCenter(e),P=async e=>await d.setMapCamera(e),G=async e=>await d.lookAt(e),W=e=>d.setLayerVisibility(e),z=(e,g)=>d.requestCoordinateTransform(e,g),j=e=>{d.cancelCoordinateTransform(e)},Q=e=>{d.setMapZoomRange(e)},Z=e=>(l||(l=new T.default(o)),l.showLaneNumber(e)),K=()=>{l==null||l.clearLaneNumber()},U=async e=>(l||(l=new T.default(o)),await l.initializeSearch(e)),J=async()=>l==null?void 0:l.calCrossIndicatorArea(),X=async()=>{},Y=async(e,g)=>{i||(i=new Je.default(o)),i.connectTrafficFlow(e,g)},F=()=>{i==null||i.disconnectTrafficFlow()},R=async e=>{n.handleVehicleTraceData(e)},$=()=>{n.clearHoloTrace()},ee=e=>{n.setInterpolate(e)},te=async e=>{await n.handleSignalData(e)},ae=()=>{n.clearHoloSignal()},ne=e=>{i==null||i.toggleTrafficInfo(e),n==null||n.toggleTrafficInfo(e)},re=e=>{n==null||n.togglePause(e)},se=e=>{i==null||i.toggleTrafficObject(e),n==null||n.toggleTrafficObject(e)},v=e=>{n==null||n.updatePanelContent(e)},oe=async e=>(r||(r=new D.default(o)),r.addOverlays(e)),ie=e=>(r||(r=new D.default(o)),r.addMask(e)),ce=()=>{r==null||r.removeMask()},le=e=>r==null?void 0:r.removeOverlaysByType(e),ue=e=>r==null?void 0:r.removeOverlaysById(e),de=()=>r==null?void 0:r.removeAllOverlays(),me=()=>{r==null||r.showAllOverlays()},ge=e=>{f||(f=new Ze.default(o)),f.updateQueueLength(e)},pe=()=>{f==null||f.removeQueueLength()},fe=async(e,g)=>(t||(t=new L.default(o)),await t.showOpenDriveFromServer(e,g)),Se=async e=>(t||(t=new L.default(o)),await t.clearOpenDrive(),await t.showOpenDriveFromFile(e)),ye=async()=>await(t==null?void 0:t.clearOpenDrive()),ve=async e=>t?await(t==null?void 0:t.findSumo(e)):{status:-1,message:"未加载OpenDrive地图"},we=async e=>t?t.selectSumo(e):{status:-1,message:"未加载OpenDrive地图"},Ce=async e=>t?t.unselectSumo(e):{status:-1,message:"未加载OpenDrive地图"},he=async e=>t?await t.geometrySearch(e):{status:-1,message:"未加载OpenDrive地图"},be=async e=>t?await t.getSumoInfo(e):{status:-1,message:"未加载OpenDrive地图"},ke=async e=>t?await(t==null?void 0:t.splitLane(e)):{status:-1,message:"未加载OpenDrive地图"},Oe=async()=>t?t==null?void 0:t.clearSplitLane():{status:-1,message:"未加载OpenDrive地图"},Ae=async e=>(s||(s=new Ue.default(o)),await s.showSignalControlArea(e)),Le=async()=>await(s==null?void 0:s.clearSignalControlArea()),De=e=>s==null?void 0:s.setLayerVisibility(e),Te=async e=>s?await(s==null?void 0:s.locateSignalControlArea(e)):{status:-1,message:"未加载信号控制区"},_e=async e=>s?await s.highlightSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Be=()=>s?s.resetHighlight():{status:-1,message:"未加载信号控制区"},qe=e=>(u||(u=new Ke.default(o)),u.showSubSignalControlArea(e)),Ie=e=>u?u.editSubSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Ve=()=>u?u.stopEditSubSignalControlArea():{status:-1,message:"未加载信号控制区"},xe=e=>u?u.selectSubSignalControlAreaCross(e):{status:-1,message:"未加载信号控制区"},Me=e=>u?u.unselectSubSignalControlAreaCross(e):{status:-1,message:"未加载信号控制区"},Ne=e=>{if(!u)return{status:-1,message:"未加载信号控制区"}},Ee=e=>(m||(m=new A.default(o)),m.addGreenWaveBand(e)),He=()=>{if(!m)return{status:-1,message:"未加载绿波带"};m.stopAddGreenWaveBand()},Pe=async e=>(m||(m=new A.default(o)),await m.showGreenWaveBand(e)),O=_,w=q;return B({mapViewer:V,setLayerVisibility:W,setMapCenter:H,lookAt:G,setMapCamera:P,setMapZoomRange:Q,requestCoordinateTransform:z,cancelCoordinateTransform:j,addOverlays:oe,addMask:ie,removeMask:ce,showAllOverlays:me,removeOverlaysByType:le,removeOverlaysById:ue,removeAllOverlays:de,showLaneNumber:Z,clearLaneNumber:K,initializeAreaTool:U,calCrossIndicatorArea:J,calRoadIndicatorArea:X,connectCarFlow:Y,disconnectCarFlow:F,handleHoloVehicleTraceData:R,clearHoloTrace:$,handleHoloSignalData:te,clearHoloSignal:ae,setInterpolate:ee,toggleTrafficInfo:ne,toggleTrafficObject:se,toggleVehicleInfo:v,togglePause:re,updateQueueLength:ge,removeQueueLength:pe,showOpenDriveFromServer:fe,showOpenDriveFromFile:Se,clearOpenDrive:ye,geometrySearchInOpenDrive:he,findSumoInOpenDrive:ve,selectSumoInOpenDrive:we,unselectSumoInOpenDrive:Ce,getSumoInfo:be,splitOpenDriveLane:ke,clearSplitOpenDriveLane:Oe,showSignalControlArea:Ae,clearSignalControlArea:Le,setSignalControlAreaVisibility:De,locateSignalControlArea:Te,highlightSignalControlArea:_e,resetHighlightSignalControlArea:Be,showSubSignalControlArea:qe,editSubSignalControlArea:Ie,stopEditSubSignalControlArea:Ve,selectSubSignalControlAreaCross:xe,unselectSubSignalControlAreaCross:Me,changeSubSignalControlAreaBorderVisibility:Ne,addGreenWaveBand:Ee,stopAddGreenWaveBand:He,showGreenWaveBand:Pe}),(e,g)=>(a.openBlock(),a.createElementBlock("div",Xe,[a.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:S},[a.withDirectives(a.createElementVNode("div",Ye,[a.createElementVNode("button",{style:{"margin-right":"10px"},onClick:x}," 开始记录 "),a.createElementVNode("button",{style:{"margin-right":"10px"},onClick:M}," 下载日志 "),a.createElementVNode("button",{style:{"margin-right":"10px"},onClick:N}," 显示车辆id "),a.createElementVNode("button",{onClick:E},"显示车辆号牌")],512),[[a.vShow,y.value]])],512),(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(k,(c,p)=>(a.openBlock(),a.createBlock(je.default,{key:p,"display-mode":c.displayMode,"road-id":c.crossId,"cross-id":c.roadId,"map-point":c.mapPoint,"stop-line":c.stopLine,position:c.position,rotation:c.rotation,scale:c.scale,"lamp-status":c.lampStatus},null,8,["display-mode","road-id","cross-id","map-point","stop-line","position","rotation","scale","lamp-status"]))),128))]))}});exports.default=Fe;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),b=require("./stores/index.js");require("./style/index.css");const je=require("./utils/detect-gpu.js"),A=require("./utils/green-wave-band-controller/index.js"),Qe=require("./utils/holo-flow/index.js"),Ue=require("./utils/holo-flow/signal-countdown-panel.vue.js"),Ze=require("./utils/map-initializer.js"),L=require("./utils/open-drive-renderer/index.js"),D=require("./utils/overlay.js"),Ke=require("./utils/queue-length.js"),T=require("./utils/road-config-tool/index.js"),Je=require("./utils/signal-control-area-controller/edit-area.js"),Xe=require("./utils/signal-control-area-controller/show-area.js"),Ye=require("./utils/traffic-flow.js"),Fe={class:"gis-viewer"},Re={style:{position:"absolute",bottom:"80px",left:"10px","z-index":"9999"}},$e=n.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(_,{expose:B,emit:q}){const S=n.ref(null);let o,d,l,i,a,r,f,t,u,s,m;const y=n.ref(!1);b.registerStore();const I=b.default.useAppDataStore,k=n.reactive([]);je.default(),n.onMounted(async()=>{if(!S.value)return;document.addEventListener("keydown",p=>{p.ctrlKey&&p.key==="i"&&(y.value=!y.value)});const e=n.getCurrentInstance(),{$gisviewerAssetsRoot:g}=e.appContext.config.globalProperties,c=await(await fetch(O.config)).json();c.assetsRoot=O.assetsRoot||g,I.mapConfig=c,d=new Ze.default,o=await d.initialize({container:S.value,mapConfig:c,markerClickCallback:(p,C,h,We)=>{w("markerClick",p,C,h,We)},mapClickCallback:(p,C,h)=>{w("mapClick",p,C,h)}}),a=new Qe.default(o,k),await a.init(),w("mapLoaded")}),n.onUnmounted(()=>{s==null||s.clearSignalControlArea(),t==null||t.clearOpenDrive(),a.clearHoloTrace(),a.clearHoloSignal(),i==null||i.disconnectTrafficFlow()});const V=n.computed(()=>o),x=()=>{const e=b.default.useAppDataStore;e.saveTrackLog=!0},M=()=>{a.downloadTrackLog()},N=()=>{v("vehicleId")},E=()=>{v("plateNumber")},H=async e=>await d.setMapCenter(e),P=async e=>await d.setMapCamera(e),G=async e=>await d.lookAt(e),z=e=>d.setLayerVisibility(e),W=(e,g)=>d.requestCoordinateTransform(e,g),j=e=>{d.cancelCoordinateTransform(e)},Q=e=>{d.setMapZoomRange(e)},U=e=>(l||(l=new T.default(o)),l.showLaneNumber(e)),Z=()=>{l==null||l.clearLaneNumber()},K=async e=>(l||(l=new T.default(o)),await l.initializeSearch(e)),J=async()=>l==null?void 0:l.calCrossIndicatorArea(),X=async()=>{},Y=async(e,g)=>{i||(i=new Ye.default(o)),i.connectTrafficFlow(e,g)},F=()=>{i==null||i.disconnectTrafficFlow()},R=async e=>{a.handleVehicleTraceData(e)},$=()=>{a.clearHoloTrace()},ee=e=>{a.setInterpolate(e)},te=async e=>{await a.handleSignalData(e)},ae=async e=>{await a.initializeLampGroup(e)},ne=e=>{a.handleUniSignalData(e)},re=()=>{a.clearHoloSignal()},se=e=>{i==null||i.toggleTrafficInfo(e),a==null||a.toggleTrafficInfo(e)},oe=e=>{a==null||a.togglePause(e)},ie=e=>{i==null||i.toggleTrafficObject(e),a==null||a.toggleTrafficObject(e)},v=e=>{a==null||a.updatePanelContent(e)},ce=async e=>(r||(r=new D.default(o)),r.addOverlays(e)),le=e=>(r||(r=new D.default(o)),r.addMask(e)),ue=()=>{r==null||r.removeMask()},de=e=>r==null?void 0:r.removeOverlaysByType(e),me=e=>r==null?void 0:r.removeOverlaysById(e),ge=()=>r==null?void 0:r.removeAllOverlays(),pe=()=>{r==null||r.showAllOverlays()},fe=e=>{f||(f=new Ke.default(o)),f.updateQueueLength(e)},Se=()=>{f==null||f.removeQueueLength()},ye=async(e,g)=>(t||(t=new L.default(o)),await t.showOpenDriveFromServer(e,g)),ve=async e=>(t||(t=new L.default(o)),await t.clearOpenDrive(),await t.showOpenDriveFromFile(e)),we=async()=>await(t==null?void 0:t.clearOpenDrive()),Ce=async e=>t?await(t==null?void 0:t.findSumo(e)):{status:-1,message:"未加载OpenDrive地图"},he=async e=>t?t.selectSumo(e):{status:-1,message:"未加载OpenDrive地图"},be=async e=>t?t.unselectSumo(e):{status:-1,message:"未加载OpenDrive地图"},ke=async e=>t?await t.geometrySearch(e):{status:-1,message:"未加载OpenDrive地图"},Oe=async e=>t?await t.getSumoInfo(e):{status:-1,message:"未加载OpenDrive地图"},Ae=async e=>t?await(t==null?void 0:t.splitLane(e)):{status:-1,message:"未加载OpenDrive地图"},Le=async()=>t?t==null?void 0:t.clearSplitLane():{status:-1,message:"未加载OpenDrive地图"},De=async e=>(s||(s=new Xe.default(o)),await s.showSignalControlArea(e)),Te=async()=>await(s==null?void 0:s.clearSignalControlArea()),_e=e=>s==null?void 0:s.setLayerVisibility(e),Be=async e=>s?await(s==null?void 0:s.locateSignalControlArea(e)):{status:-1,message:"未加载信号控制区"},qe=async e=>s?await s.highlightSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Ie=()=>s?s.resetHighlight():{status:-1,message:"未加载信号控制区"},Ve=e=>(u||(u=new Je.default(o)),u.showSubSignalControlArea(e)),xe=e=>u?u.editSubSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Me=()=>u?u.stopEditSubSignalControlArea():{status:-1,message:"未加载信号控制区"},Ne=e=>u?u.selectSubSignalControlAreaCross(e):{status:-1,message:"未加载信号控制区"},Ee=e=>u?u.unselectSubSignalControlAreaCross(e):{status:-1,message:"未加载信号控制区"},He=e=>{if(!u)return{status:-1,message:"未加载信号控制区"}},Pe=e=>(m||(m=new A.default(o)),m.addGreenWaveBand(e)),Ge=()=>{if(!m)return{status:-1,message:"未加载绿波带"};m.stopAddGreenWaveBand()},ze=async e=>(m||(m=new A.default(o)),await m.showGreenWaveBand(e)),O=_,w=q;return B({mapViewer:V,setLayerVisibility:z,setMapCenter:H,lookAt:G,setMapCamera:P,setMapZoomRange:Q,requestCoordinateTransform:W,cancelCoordinateTransform:j,addOverlays:ce,addMask:le,removeMask:ue,showAllOverlays:pe,removeOverlaysByType:de,removeOverlaysById:me,removeAllOverlays:ge,showLaneNumber:U,clearLaneNumber:Z,initializeAreaTool:K,calCrossIndicatorArea:J,calRoadIndicatorArea:X,connectCarFlow:Y,disconnectCarFlow:F,handleHoloVehicleTraceData:R,clearHoloTrace:$,initializeLampGroup:ae,handleUniSignalData:ne,handleHoloSignalData:te,clearHoloSignal:re,setInterpolate:ee,toggleTrafficInfo:se,toggleTrafficObject:ie,toggleVehicleInfo:v,togglePause:oe,updateQueueLength:fe,removeQueueLength:Se,showOpenDriveFromServer:ye,showOpenDriveFromFile:ve,clearOpenDrive:we,geometrySearchInOpenDrive:ke,findSumoInOpenDrive:Ce,selectSumoInOpenDrive:he,unselectSumoInOpenDrive:be,getSumoInfo:Oe,splitOpenDriveLane:Ae,clearSplitOpenDriveLane:Le,showSignalControlArea:De,clearSignalControlArea:Te,setSignalControlAreaVisibility:_e,locateSignalControlArea:Be,highlightSignalControlArea:qe,resetHighlightSignalControlArea:Ie,showSubSignalControlArea:Ve,editSubSignalControlArea:xe,stopEditSubSignalControlArea:Me,selectSubSignalControlAreaCross:Ne,unselectSubSignalControlAreaCross:Ee,changeSubSignalControlAreaBorderVisibility:He,addGreenWaveBand:Pe,stopAddGreenWaveBand:Ge,showGreenWaveBand:ze}),(e,g)=>(n.openBlock(),n.createElementBlock("div",Fe,[n.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:S},[n.withDirectives(n.createElementVNode("div",Re,[n.createElementVNode("button",{style:{"margin-right":"10px"},onClick:x}," 开始记录 "),n.createElementVNode("button",{style:{"margin-right":"10px"},onClick:M}," 下载日志 "),n.createElementVNode("button",{style:{"margin-right":"10px"},onClick:N}," 显示车辆id "),n.createElementVNode("button",{onClick:E},"显示车辆号牌")],512),[[n.vShow,y.value]])],512),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(k,(c,p)=>(n.openBlock(),n.createBlock(Ue.default,{key:p,"display-mode":c.displayMode,"road-id":c.crossId,"cross-id":c.roadId,"map-point":c.mapPoint,"stop-line":c.stopLine,position:c.position,rotation:c.rotation,scale:c.scale,"lamp-status":c.lampStatus},null,8,["display-mode","road-id","cross-id","map-point","stop-line","position","rotation","scale","lamp-status"]))),128))]))}});exports.default=$e;
@@ -79,6 +79,8 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
79
79
  clearHoloTrace: () => void;
80
80
  setInterpolate: (enable: boolean) => void;
81
81
  handleHoloSignalData: (signalData: any) => Promise<void>;
82
+ initializeLampGroup: (data: any) => Promise<void>;
83
+ handleUniSignalData: (signalData: any) => void;
82
84
  clearHoloSignal: () => void;
83
85
  toggleTrafficInfo: (params: import("../types").IToggleTrafficInfoParams) => void;
84
86
  togglePause: (pause: boolean) => void;
@@ -191,6 +193,8 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
191
193
  }>;
192
194
  uImage: import("vue").ComputedRef<string>;
193
195
  uNumberStyle: import("vue").ComputedRef<any>;
196
+ blImage: import("vue").ComputedRef<string>;
197
+ blNumberStyle: import("vue").ComputedRef<any>;
194
198
  lImage: import("vue").ComputedRef<string>;
195
199
  lNumberStyle: import("vue").ComputedRef<any>;
196
200
  sImage: import("vue").ComputedRef<string>;
@@ -21,7 +21,7 @@
21
21
  .signal-countdown-container {
22
22
  margin: 0 1px;
23
23
  padding: 0px;
24
- background-color: rgba(0, 0, 0, 0.8);
24
+ background-color: rgba(0, 0, 0, 0.9);
25
25
  border-style: solid;
26
26
  border-color: turquoise;
27
27
  border-width: 2px;
@@ -1,4 +1,4 @@
1
- import { ISignalCountdownProps, IToggleTrafficInfoParams } from '../../../types';
1
+ import { IResult, ISignalCountdownProps, IToggleTrafficInfoParams } from '../../../types';
2
2
  export default class Index {
3
3
  private readonly view;
4
4
  private traceHoloFlow;
@@ -16,6 +16,8 @@ export default class Index {
16
16
  togglePause(pause: boolean): void;
17
17
  updatePanelContent(contentType: string): void;
18
18
  handleSignalData(data: any): Promise<void>;
19
+ initializeLampGroup(data: any): Promise<void>;
20
+ handleUniSignalData(data: any): IResult;
19
21
  clearHoloSignal(): void;
20
22
  setInterpolate(enable: boolean): void;
21
23
  downloadTrackLog(): void;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),t=require("../../../types/index.js"),s=require("../../stores/index.js"),n=require("./signal-holo-flow.js"),r=require("./signal-holo-flow-lsr.js"),c=require("./trace-holo-flow.js");class h{constructor(e,o){this.view=e,this.signalCountdownPanelProps=o}async init(){this.traceHoloFlow=new c.default(this.view),await this.traceHoloFlow.init()}handleVehicleTraceData(e){this.traceHoloFlow.handleVehicleTraceData(e)}toggleTrafficObject(e){switch(e.name.toLowerCase()){case"groundVehicle".toLowerCase():this.traceHoloFlow.toggleGroundVehicle(e.visible);break;case"elevatedVehicle".toLowerCase():this.traceHoloFlow.toggleElevatedVehicle(e.visible);break}}clearHoloTrace(){this.traceHoloFlow.clearTrace()}toggleTrafficInfo(e){this.traceHoloFlow.toggleTrafficInfo(e)}togglePause(e){this.traceHoloFlow.togglePause(e)}updatePanelContent(e){let o=t.EVehiclePlateState.None;switch(e){case"none":o=t.EVehiclePlateState.None;break;case"plateNumber":o=t.EVehiclePlateState.PlateNumber;break;case"vehicleId":o=t.EVehiclePlateState.Id;break;case"mix":o=t.EVehiclePlateState.Mix;break}this.traceHoloFlow.updatePanelContent(o)}async handleSignalData(e){var o,l;if(!this.signalHoloFlow){const a=s.default.useAppDataStore;((l=(o=i.toRaw(a.mapConfig).holoFlow)==null?void 0:o.signal)==null?void 0:l.style)==="LSR"?this.signalHoloFlow=new r.default(this.view,this.signalCountdownPanelProps):this.signalHoloFlow=new n.default(this.view),await this.signalHoloFlow.initializeLayer()}await this.signalHoloFlow.handleHoloSignalData(e)}clearHoloSignal(){var e;(e=this.signalHoloFlow)==null||e.clearSignal()}setInterpolate(e){this.traceHoloFlow.setInterpolate(e)}downloadTrackLog(){this.traceHoloFlow.downloadLog()}}exports.default=h;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),l=require("../../../types/index.js"),n=require("../../stores/index.js"),c=require("./signal-holo-flow.js"),s=require("./signal-holo-flow-lsr.js"),h=require("./trace-holo-flow.js");class w{constructor(e,o){this.view=e,this.signalCountdownPanelProps=o}async init(){this.traceHoloFlow=new h.default(this.view),await this.traceHoloFlow.init()}handleVehicleTraceData(e){this.traceHoloFlow.handleVehicleTraceData(e)}toggleTrafficObject(e){switch(e.name.toLowerCase()){case"groundVehicle".toLowerCase():this.traceHoloFlow.toggleGroundVehicle(e.visible);break;case"elevatedVehicle".toLowerCase():this.traceHoloFlow.toggleElevatedVehicle(e.visible);break}}clearHoloTrace(){this.traceHoloFlow.clearTrace()}toggleTrafficInfo(e){this.traceHoloFlow.toggleTrafficInfo(e)}togglePause(e){this.traceHoloFlow.togglePause(e)}updatePanelContent(e){let o=l.EVehiclePlateState.None;switch(e){case"none":o=l.EVehiclePlateState.None;break;case"plateNumber":o=l.EVehiclePlateState.PlateNumber;break;case"vehicleId":o=l.EVehiclePlateState.Id;break;case"mix":o=l.EVehiclePlateState.Mix;break}this.traceHoloFlow.updatePanelContent(o)}async handleSignalData(e){var o,a;if(!this.signalHoloFlow){const t=n.default.useAppDataStore;((a=(o=i.toRaw(t.mapConfig).holoFlow)==null?void 0:o.signal)==null?void 0:a.style)==="LSR"?this.signalHoloFlow=new s.default(this.view,this.signalCountdownPanelProps):this.signalHoloFlow=new c.default(this.view),await this.signalHoloFlow.initializeLayer()}await this.signalHoloFlow.handleHoloSignalData(e)}async initializeLampGroup(e){var o,a;if(!this.signalHoloFlow){const t=n.default.useAppDataStore;if(((a=(o=i.toRaw(t.mapConfig).holoFlow)==null?void 0:o.signal)==null?void 0:a.style)==="LSR")this.signalHoloFlow=new s.default(this.view,this.signalCountdownPanelProps);else return}await this.signalHoloFlow.initializeLayer(),this.signalHoloFlow.initializeLampGroup(e)}handleUniSignalData(e){return this.signalHoloFlow.handleUniSignalData(e)}clearHoloSignal(){var e;(e=this.signalHoloFlow)==null||e.clearSignal()}setInterpolate(e){this.traceHoloFlow.setInterpolate(e)}downloadTrackLog(){this.traceHoloFlow.downloadLog()}}exports.default=w;
@@ -45,6 +45,8 @@ declare const _sfc_main: import("vue").DefineComponent<{
45
45
  }>;
46
46
  uImage: import("vue").ComputedRef<string>;
47
47
  uNumberStyle: import("vue").ComputedRef<any>;
48
+ blImage: import("vue").ComputedRef<string>;
49
+ blNumberStyle: import("vue").ComputedRef<any>;
48
50
  lImage: import("vue").ComputedRef<string>;
49
51
  lNumberStyle: import("vue").ComputedRef<any>;
50
52
  sImage: import("vue").ComputedRef<string>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),v={key:0,class:"signal-countdown-container"},N=["src"],h={key:1,class:"signal-countdown-container"},w=["src"],V={key:2,class:"signal-countdown-container"},C=["src"],b={key:3,class:"signal-countdown-container"},E=["src"],_=e.defineComponent({__name:"signal-countdown-panel",props:{displayMode:{},crossId:{},roadId:{},mapPoint:{},stopLine:{},scale:{},position:{},rotation:{},lampStatus:{}},setup(a){const t=a,r=e.computed(()=>({top:`${t.position.top}px`,left:`${t.position.left}px`,"transform-origin":"bottom center",transform:`translateX(-50%) translateY(-100%) rotate(${t.rotation}deg) scale(${t.scale})`})),c=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/u-${t.lampStatus.uColor}.png`),i=e.computed(()=>l(t.lampStatus.uColor)),u=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/l-${t.lampStatus.lColor}.png`),m=e.computed(()=>l(t.lampStatus.lColor)),d=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/s-${t.lampStatus.sColor}.png`),p=e.computed(()=>l(t.lampStatus.sColor)),g=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/r-${t.lampStatus.rColor}.png`),S=e.computed(()=>l(t.lampStatus.rColor)),y=o=>{switch(o){case"red":return"red";case"yellow":return"rgb(255, 192, 2)";case"green":return"lime";default:return"white"}},l=o=>{const n={color:y(o)},s=t.rotation<0?t.rotation+360:t.rotation;return s>135&&s<225&&(n.transform="rotate(180deg)"),n};return(o,n)=>(e.openBlock(),e.createElementBlock("div",{class:"signal-countdown-panel",style:e.normalizeStyle(r.value)},[o.lampStatus.uColor?(e.openBlock(),e.createElementBlock("div",v,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(i.value)},e.toDisplayString(o.lampStatus.uNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:c.value,width:"20px",height:"20px"},null,8,N)])])):e.createCommentVNode("",!0),o.lampStatus.lColor?(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(m.value)},e.toDisplayString(o.lampStatus.lNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:u.value,width:"20px",height:"20px"},null,8,w)])])):e.createCommentVNode("",!0),o.lampStatus.sColor?(e.openBlock(),e.createElementBlock("div",V,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(p.value)},e.toDisplayString(o.lampStatus.sNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:d.value,width:"20px",height:"20px"},null,8,C)])])):e.createCommentVNode("",!0),o.lampStatus.rColor!==void 0?(e.openBlock(),e.createElementBlock("div",b,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(S.value)},e.toDisplayString(o.lampStatus.rNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:g.value,width:"20px",height:"20px"},null,8,E)])])):e.createCommentVNode("",!0)],4))}});exports.default=_;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),h={key:0,class:"signal-countdown-container"},b=["src"],w={key:1,class:"signal-countdown-container"},V=["src"],C={key:2,class:"signal-countdown-container"},E=["src"],_={key:3,class:"signal-countdown-container"},k=["src"],B={key:4,class:"signal-countdown-container"},I=["src"],f=e.defineComponent({__name:"signal-countdown-panel",props:{displayMode:{},crossId:{},roadId:{},mapPoint:{},stopLine:{},scale:{},position:{},rotation:{},lampStatus:{}},setup(a){const t=a,r=e.computed(()=>({top:`${t.position.top}px`,left:`${t.position.left}px`,"transform-origin":"bottom center",transform:`translateX(-50%) translateY(-100%) rotate(${t.rotation}deg) scale(${t.scale})`})),c=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/u-${t.lampStatus.uColor}.png`),i=e.computed(()=>l(t.lampStatus.uColor)),u=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/bl-${t.lampStatus.blColor}.png`),m=e.computed(()=>l(t.lampStatus.blColor)),d=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/l-${t.lampStatus.lColor}.png`),p=e.computed(()=>l(t.lampStatus.lColor)),g=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/s-${t.lampStatus.sColor}.png`),S=e.computed(()=>l(t.lampStatus.sColor)),y=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/r-${t.lampStatus.rColor}.png`),v=e.computed(()=>l(t.lampStatus.rColor)),N=o=>{switch(o){case"red":return"red";case"yellow":return"rgb(255, 192, 2)";case"green":return"lime";default:return"white"}},l=o=>{const n={color:N(o)},s=t.rotation<0?t.rotation+360:t.rotation;return s>135&&s<225&&(n.transform="rotate(180deg)"),n};return(o,n)=>(e.openBlock(),e.createElementBlock("div",{class:"signal-countdown-panel",style:e.normalizeStyle(r.value)},[o.lampStatus.uColor?(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(i.value)},e.toDisplayString(o.lampStatus.uNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:c.value,width:"20px",height:"20px"},null,8,b)])])):e.createCommentVNode("",!0),o.lampStatus.blColor?(e.openBlock(),e.createElementBlock("div",w,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(m.value)},e.toDisplayString(o.lampStatus.blNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:u.value,width:"20px",height:"20px"},null,8,V)])])):e.createCommentVNode("",!0),o.lampStatus.lColor?(e.openBlock(),e.createElementBlock("div",C,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(p.value)},e.toDisplayString(o.lampStatus.lNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:d.value,width:"20px",height:"20px"},null,8,E)])])):e.createCommentVNode("",!0),o.lampStatus.sColor?(e.openBlock(),e.createElementBlock("div",_,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(S.value)},e.toDisplayString(o.lampStatus.sNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:g.value,width:"20px",height:"20px"},null,8,k)])])):e.createCommentVNode("",!0),o.lampStatus.rColor!==void 0?(e.openBlock(),e.createElementBlock("div",B,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(v.value)},e.toDisplayString(o.lampStatus.rNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:y.value,width:"20px",height:"20px"},null,8,I)])])):e.createCommentVNode("",!0)],4))}});exports.default=f;
@@ -1,19 +1,31 @@
1
- import { ISignalCountdownProps } from '../../../types';
1
+ import { IResult, ISignalCountdownProps } from '../../../types';
2
2
  import SignalHoloFlow from './signal-holo-flow';
3
3
  export default class LSRSignalHoloFlow extends SignalHoloFlow {
4
4
  private stopLineLayer;
5
5
  private watchHandle;
6
6
  private countdownPanelProps;
7
+ private currentPanelScale;
7
8
  /** 轨迹延迟时间 */
8
9
  private trajectoryDelayTime;
9
- constructor(view: __esri.MapView | __esri.SceneView, countdownPanelInfos: ISignalCountdownProps[]);
10
+ /** 按照路口id->进口道路段id->停止线坐标保存的停止线 */
10
11
  private stopLineMap;
12
+ /** 信号机id->进口道id->灯组id */
13
+ private lampGroupMap;
14
+ constructor(view: __esri.MapView | __esri.SceneView, countdownPanelInfos: ISignalCountdownProps[]);
11
15
  /**
12
16
  * 读取停止线图层,将灯组面板沿着停止线放置
13
17
  * @returns
14
18
  */
15
19
  initializeLayer(): Promise<void>;
16
- private currentPanelScale;
20
+ /**
21
+ * 初始化灯组与进口道的关联关系
22
+ */
23
+ initializeLampGroup(data: any): void;
24
+ /**
25
+ * 处理统一信控平台信号灯数据
26
+ * @param data
27
+ */
28
+ handleUniSignalData(data: any): IResult;
17
29
  /**
18
30
  * 根据地图比例尺计算灯组面板缩放比例
19
31
  */
@@ -22,6 +34,8 @@ export default class LSRSignalHoloFlow extends SignalHoloFlow {
22
34
  * 地图移动时更新灯组面板位置
23
35
  */
24
36
  private updatePanelPosition;
37
+ private doHoloSignalData;
38
+ private updateLampGroupPanelStatus;
25
39
  /**
26
40
  * 处理全息流信号灯数据
27
41
  * @param data