gisviewer-vue3-arcgis 1.0.221 → 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.
Files changed (27) hide show
  1. package/es/src/gis-map/gis-map.vue.d.ts +4 -0
  2. package/es/src/gis-map/gis-map.vue.mjs +106 -100
  3. package/es/src/gis-map/index.d.ts +4 -0
  4. package/es/src/gis-map/style/index.css +1 -1
  5. package/es/src/gis-map/utils/holo-flow/index.d.ts +3 -1
  6. package/es/src/gis-map/utils/holo-flow/index.mjs +34 -17
  7. package/es/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.d.ts +2 -0
  8. package/es/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.mjs +44 -26
  9. package/es/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.d.ts +36 -4
  10. package/es/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.mjs +182 -105
  11. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +1 -1
  12. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.mjs +1 -1
  13. package/es/src/gis-map/utils/map-initializer.mjs +102 -93
  14. package/lib/src/gis-map/gis-map.vue.d.ts +4 -0
  15. package/lib/src/gis-map/gis-map.vue.js +1 -1
  16. package/lib/src/gis-map/index.d.ts +4 -0
  17. package/lib/src/gis-map/style/index.css +1 -1
  18. package/lib/src/gis-map/utils/holo-flow/index.d.ts +3 -1
  19. package/lib/src/gis-map/utils/holo-flow/index.js +1 -1
  20. package/lib/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.d.ts +2 -0
  21. package/lib/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.js +1 -1
  22. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.d.ts +36 -4
  23. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.js +1 -1
  24. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +1 -1
  25. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.js +1 -1
  26. package/lib/src/gis-map/utils/map-initializer.js +1 -1
  27. package/package.json +1 -1
@@ -1,23 +1,24 @@
1
1
  import C from "@arcgis/core/Basemap";
2
- import d from "@arcgis/core/config";
2
+ import g from "@arcgis/core/config";
3
3
  import * as k from "@arcgis/core/core/reactiveUtils";
4
- import { Polygon as L, Polyline as W, Point as P } from "@arcgis/core/geometry";
4
+ import { Polygon as L, Polyline as W, Point as T } from "@arcgis/core/geometry";
5
5
  import * as w from "@arcgis/core/geometry/support/webMercatorUtils";
6
6
  import z from "@arcgis/core/layers/FeatureLayer";
7
7
  import x from "@arcgis/core/layers/GeoJSONLayer";
8
- import I from "@arcgis/core/layers/MapImageLayer";
9
- import R from "@arcgis/core/layers/TileLayer";
10
- import H from "@arcgis/core/layers/WebTileLayer";
11
- import G from "@arcgis/core/Map";
12
- import O from "@arcgis/core/views/MapView";
13
- import S from "@arcgis/core/views/SceneView";
14
- import B from "@turf/destination";
15
- import * as N from "@turf/helpers";
16
- import E from "./custom-layer/custom-wmts-layer.mjs";
17
- function T(h, t) {
18
- return h && (h.startsWith("http://") || h.startsWith("https://") ? h : t + h);
8
+ import I from "@arcgis/core/layers/IntegratedMesh3DTilesLayer";
9
+ import R from "@arcgis/core/layers/MapImageLayer";
10
+ import H from "@arcgis/core/layers/TileLayer";
11
+ import G from "@arcgis/core/layers/WebTileLayer";
12
+ import O from "@arcgis/core/Map";
13
+ import S from "@arcgis/core/views/MapView";
14
+ import B from "@arcgis/core/views/SceneView";
15
+ import N from "@turf/destination";
16
+ import * as E from "@turf/helpers";
17
+ import A from "./custom-layer/custom-wmts-layer.mjs";
18
+ function P(h, e) {
19
+ return h && (h.startsWith("http://") || h.startsWith("https://") ? h : e + h);
19
20
  }
20
- class X {
21
+ class ee {
21
22
  constructor() {
22
23
  this.mapConfig = {}, this.watchHandleMap = /* @__PURE__ */ new Map(), this.handleIndex = 0, this.zoomWatchHandle = null;
23
24
  }
@@ -26,19 +27,19 @@ class X {
26
27
  * @param params 容器
27
28
  * @returns view
28
29
  */
29
- async initialize(t) {
30
- var p, u, b, v;
31
- this.mapConfig = t.mapConfig;
32
- const { container: i, markerClickCallback: o, mapClickCallback: r } = t;
33
- d.assetsPath = `${this.mapConfig.assetsRoot}/ArcgisAssets`, d.fontsUrl = `${this.mapConfig.assetsRoot}/fonts`, d.apiKey = "AAPKf5a3e1044d7a4faeb3b1ec7060f5c68equIrP2KbRyL-t_b40Kk4GTWUQ1BFCyttvyQPQnWpFmBd7kp9gkrVihjfmcKBwxjW";
34
- const s = new G();
35
- if (((p = this.mapConfig) == null ? void 0 : p.mapOptions.mode.toLowerCase()) === "2d" ? (this.view = new O({
30
+ async initialize(e) {
31
+ var p, u, b, y;
32
+ this.mapConfig = e.mapConfig;
33
+ const { container: i, markerClickCallback: o, mapClickCallback: r } = e;
34
+ g.assetsPath = `${this.mapConfig.assetsRoot}/ArcgisAssets`, g.fontsUrl = `${this.mapConfig.assetsRoot}/fonts`, g.apiKey = "AAPKf5a3e1044d7a4faeb3b1ec7060f5c68equIrP2KbRyL-t_b40Kk4GTWUQ1BFCyttvyQPQnWpFmBd7kp9gkrVihjfmcKBwxjW";
35
+ const s = new O();
36
+ if (((p = this.mapConfig) == null ? void 0 : p.mapOptions.mode.toLowerCase()) === "2d" ? (this.view = new S({
36
37
  map: s,
37
38
  container: i,
38
39
  ...this.mapConfig.mapOptions
39
- }), this.view.on("drag", (e) => {
40
- e.button === 2 && e.stopPropagation();
41
- })) : this.view = new S({
40
+ }), this.view.on("drag", (t) => {
41
+ t.button === 2 && t.stopPropagation();
42
+ })) : this.view = new B({
42
43
  map: s,
43
44
  container: i,
44
45
  environment: {
@@ -56,16 +57,16 @@ class X {
56
57
  }, this.view.popup.dockOptions = {
57
58
  buttonEnabled: !1,
58
59
  breakpoint: !1
59
- }, this.view.on("click", async (e) => {
60
- var y, M;
60
+ }, this.view.on("click", async (t) => {
61
+ var v, M;
61
62
  if (r) {
62
- let a = e.mapPoint;
63
+ let a = t.mapPoint;
63
64
  a.spatialReference.isWebMercator && (a = w.webMercatorToGeographic(
64
65
  a
65
66
  )), r(
66
67
  [a.x, a.y],
67
- [e.screenPoint.x, e.screenPoint.y],
68
- e
68
+ [t.screenPoint.x, t.screenPoint.y],
69
+ t
69
70
  );
70
71
  }
71
72
  if (this.view.type === "3d") {
@@ -78,7 +79,7 @@ class X {
78
79
  tilt: a.tilt,
79
80
  position: m.toJSON()
80
81
  };
81
- console.log(f), (y = navigator.clipboard) == null || y.writeText(JSON.stringify(f));
82
+ console.log(f), (v = navigator.clipboard) == null || v.writeText(JSON.stringify(f));
82
83
  } else
83
84
  console.log(a.toJSON());
84
85
  console.log(this.view.zoom, this.view.scale);
@@ -92,7 +93,7 @@ class X {
92
93
  scale: this.view.scale
93
94
  });
94
95
  }
95
- const n = (M = (await this.view.hitTest(e)).results) == null ? void 0 : M.filter(
96
+ const n = (M = (await this.view.hitTest(t)).results) == null ? void 0 : M.filter(
96
97
  (a) => a.type === "graphic"
97
98
  );
98
99
  n.length > 0 && n.forEach((a) => {
@@ -102,51 +103,59 @@ class X {
102
103
  m.attributes.type,
103
104
  m.attributes.id,
104
105
  m.attributes,
105
- e
106
+ t
106
107
  );
107
108
  });
108
- }), (b = this.mapConfig) != null && b.baseLayers ? this.mapConfig.baseLayers.forEach((e) => {
109
- const c = T(e.url, this.mapConfig.assetsRoot);
110
- switch (e.type.toLowerCase()) {
109
+ }), (b = this.mapConfig) != null && b.baseLayers ? this.mapConfig.baseLayers.forEach((t) => {
110
+ const c = P(t.url, this.mapConfig.assetsRoot);
111
+ switch (t.type.toLowerCase()) {
111
112
  case "webTile".toLowerCase(): {
112
- const n = new H({
113
+ const n = new G({
113
114
  urlTemplate: c,
114
- ...e.options
115
+ ...t.options
115
116
  });
116
117
  s.add(n);
117
118
  break;
118
119
  }
119
120
  case "tile": {
120
- const n = new R({
121
+ const n = new H({
121
122
  url: c,
122
- ...e.options
123
+ ...t.options
123
124
  });
124
125
  s.add(n);
125
126
  break;
126
127
  }
127
128
  case "customWMTS".toLowerCase(): {
128
- const n = new E({
129
+ const n = new A({
129
130
  urlTemplate: c,
130
- ...e.options
131
+ ...t.options
131
132
  });
132
133
  s.add(n);
133
134
  break;
134
135
  }
135
136
  case "mapImage".toLowerCase(): {
136
- const n = new I({
137
+ const n = new R({
137
138
  url: c,
138
- ...e.options
139
+ ...t.options
139
140
  });
140
141
  s.add(n);
141
142
  break;
142
143
  }
143
144
  case "arcgis": {
144
- const n = new C(e.options);
145
+ const n = new C(t.options);
145
146
  s.basemap = n;
146
147
  break;
147
148
  }
148
149
  case "feature": {
149
- const n = new z({ url: c, ...e.options });
150
+ const n = new z({ url: c, ...t.options });
151
+ s.add(n);
152
+ break;
153
+ }
154
+ case "3dtiles": {
155
+ const n = new I({
156
+ url: c,
157
+ ...t.options
158
+ });
150
159
  s.add(n);
151
160
  break;
152
161
  }
@@ -156,41 +165,41 @@ class X {
156
165
  id: "arcgis/light-gray",
157
166
  language: "zh-CN"
158
167
  }
159
- }), (v = this.mapConfig) != null && v.hdLayers) {
160
- const e = this.mapConfig.hdLayers.map(
168
+ }), (y = this.mapConfig) != null && y.hdLayers) {
169
+ const t = this.mapConfig.hdLayers.map(
161
170
  (c) => (
162
171
  // 图层文件为GeoJson格式, renderer和symbol使用autocast配置
163
172
  new x({
164
- url: T(c.url, this.mapConfig.assetsRoot),
173
+ url: P(c.url, this.mapConfig.assetsRoot),
165
174
  ...c.options,
166
175
  title: c.options.id
167
176
  })
168
177
  )
169
178
  );
170
- s.addMany(e);
179
+ s.addMany(t);
171
180
  }
172
181
  this.view.ui.remove("attribution"), await this.view.when();
173
- const g = this.mapConfig.camera;
182
+ const d = this.mapConfig.camera;
174
183
  let l;
175
184
  if (this.view.type === "2d") {
176
- let e = this.view.center;
177
- this.view.spatialReference.isWebMercator && (e = w.webMercatorToGeographic(
178
- e
179
- )), l = { center: [e.x, e.y], zoom: this.view.zoom };
185
+ let t = this.view.center;
186
+ this.view.spatialReference.isWebMercator && (t = w.webMercatorToGeographic(
187
+ t
188
+ )), l = { center: [t.x, t.y], zoom: this.view.zoom };
180
189
  } else {
181
- let e = this.view.camera.position;
182
- this.view.spatialReference.isWebMercator && (e = w.webMercatorToGeographic(
183
- e
190
+ let t = this.view.camera.position;
191
+ this.view.spatialReference.isWebMercator && (t = w.webMercatorToGeographic(
192
+ t
184
193
  )), l = {
185
- position: e,
194
+ position: t,
186
195
  heading: this.view.camera.heading,
187
196
  tilt: this.view.camera.tilt
188
197
  };
189
198
  }
190
- return g ? g.home = l : this.mapConfig.camera = { home: l }, this.view;
199
+ return d ? d.home = l : this.mapConfig.camera = { home: l }, this.view;
191
200
  }
192
- setLayerVisibility(t) {
193
- const { id: i, visible: o } = t, r = this.view.map.findLayerById(i);
201
+ setLayerVisibility(e) {
202
+ const { id: i, visible: o } = e, r = this.view.map.findLayerById(i);
194
203
  return r ? (r.visible = o, { status: 0, message: "ok" }) : { status: -1, message: "未找到图层" };
195
204
  }
196
205
  /**
@@ -198,49 +207,49 @@ class X {
198
207
  * @param params
199
208
  * @returns
200
209
  */
201
- async setMapCenter(t) {
210
+ async setMapCenter(e) {
202
211
  var i;
203
212
  if (!this.view)
204
213
  return { status: -1, message: "未初始化" };
205
- if (t.center || t.target) {
206
- switch ((i = t.target) == null ? void 0 : i.type) {
214
+ if (e.center || e.target) {
215
+ switch ((i = e.target) == null ? void 0 : i.type) {
207
216
  case "point":
208
- t.target = new P(t.target);
217
+ e.target = new T(e.target);
209
218
  break;
210
219
  case "polyline":
211
- t.target = new W(t.target);
220
+ e.target = new W(e.target);
212
221
  break;
213
222
  case "polygon":
214
- t.target = new L(t.target);
223
+ e.target = new L(e.target);
215
224
  break;
216
225
  }
217
- await this.view.goTo(t, { duration: (t.duration || 0) * 1e3 });
226
+ await this.view.goTo(e, { duration: (e.duration || 0) * 1e3 });
218
227
  }
219
228
  return { status: 0, message: "成功" };
220
229
  }
221
230
  /**
222
231
  * 在一定的高度,以一定的角度去观察某个坐标
223
232
  * */
224
- async lookAt(t) {
233
+ async lookAt(e) {
225
234
  if (this.view.type === "2d")
226
235
  return;
227
- const i = t.tilt || 0, o = t.heading || 0;
236
+ const i = e.tilt || 0, o = e.heading || 0;
228
237
  if (i === 0)
229
238
  await this.view.goTo(
230
239
  {
231
240
  position: {
232
- x: t.center[0],
233
- y: t.center[1],
234
- z: t.height
241
+ x: e.center[0],
242
+ y: e.center[1],
243
+ z: e.height
235
244
  },
236
245
  heading: o,
237
246
  tilt: 0
238
247
  },
239
- { duration: (t.duration || 2) * 1e3 }
248
+ { duration: (e.duration || 2) * 1e3 }
240
249
  );
241
250
  else {
242
- const r = Math.tan(i * Math.PI / 180) * t.height, s = B(
243
- N.point(t.center),
251
+ const r = Math.tan(i * Math.PI / 180) * e.height, s = N(
252
+ E.point(e.center),
244
253
  r,
245
254
  o + 180,
246
255
  {
@@ -252,19 +261,19 @@ class X {
252
261
  position: {
253
262
  x: s.geometry.coordinates[0],
254
263
  y: s.geometry.coordinates[1],
255
- z: t.height
264
+ z: e.height
256
265
  },
257
266
  heading: o,
258
267
  tilt: i
259
268
  },
260
- { duration: (t.duration || 2) * 1e3 }
269
+ { duration: (e.duration || 2) * 1e3 }
261
270
  );
262
271
  }
263
272
  }
264
- async setMapCamera(t) {
273
+ async setMapCamera(e) {
265
274
  if (!this.view)
266
275
  return { status: -1, message: "未初始化" };
267
- const { name: i, duration: o = 0 } = t, { camera: r } = this.mapConfig;
276
+ const { name: i, duration: o = 0 } = e, { camera: r } = this.mapConfig;
268
277
  if (!r)
269
278
  return { status: -1, message: "未配置camera" };
270
279
  const s = r[i];
@@ -273,20 +282,20 @@ class X {
273
282
  /**
274
283
  * 经纬度转像素坐标,在地图移动时回调
275
284
  * */
276
- requestCoordinateTransform(t, i) {
285
+ requestCoordinateTransform(e, i) {
277
286
  let o = 0;
278
- const s = 1e3 / 30, g = k.watch(
287
+ const s = 1e3 / 30, d = k.watch(
279
288
  () => this.view.center,
280
289
  () => {
281
- const l = this.transformPoints(t), p = Date.now();
290
+ const l = this.transformPoints(e), p = Date.now();
282
291
  p - o > s && (i(l), o = p);
283
292
  }
284
293
  );
285
- return this.handleIndex++, this.watchHandleMap.set(this.handleIndex, g), { handle: this.handleIndex, points: this.transformPoints(t) };
294
+ return this.handleIndex++, this.watchHandleMap.set(this.handleIndex, d), { handle: this.handleIndex, points: this.transformPoints(e) };
286
295
  }
287
- transformPoints(t) {
288
- return t.map((i) => {
289
- const o = new P({
296
+ transformPoints(e) {
297
+ return e.map((i) => {
298
+ const o = new T({
290
299
  x: i[0],
291
300
  y: i[1]
292
301
  }), r = this.view.toScreen(o);
@@ -296,15 +305,15 @@ class X {
296
305
  /**
297
306
  * 停止坐标转换回调
298
307
  * */
299
- cancelCoordinateTransform(t) {
300
- const i = this.watchHandleMap.get(t);
301
- i && (i.remove(), this.watchHandleMap.delete(t));
308
+ cancelCoordinateTransform(e) {
309
+ const i = this.watchHandleMap.get(e);
310
+ i && (i.remove(), this.watchHandleMap.delete(e));
302
311
  }
303
312
  /**
304
313
  * 设置地图zoom范围
305
314
  * */
306
- setMapZoomRange(t) {
307
- const { min: i, max: o } = t;
315
+ setMapZoomRange(e) {
316
+ const { min: i, max: o } = e;
308
317
  !i && !o || (this.zoomWatchHandle && this.zoomWatchHandle.remove(), this.zoomWatchHandle = k.watch(
309
318
  () => this.view.zoom,
310
319
  (r) => {
@@ -314,5 +323,5 @@ class X {
314
323
  }
315
324
  }
316
325
  export {
317
- X as default
326
+ ee as default
318
327
  };
@@ -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.handleSignalData(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<315&&(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,15 +1,47 @@
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
- constructor(view: __esri.MapView | __esri.SceneView, countdownPanelInfos: ISignalCountdownProps[]);
7
+ private currentPanelScale;
8
+ /** 轨迹延迟时间 */
9
+ private trajectoryDelayTime;
10
+ /** 按照路口id->进口道路段id->停止线坐标保存的停止线 */
8
11
  private stopLineMap;
12
+ /** 信号机id->进口道id->灯组id */
13
+ private lampGroupMap;
14
+ constructor(view: __esri.MapView | __esri.SceneView, countdownPanelInfos: ISignalCountdownProps[]);
15
+ /**
16
+ * 读取停止线图层,将灯组面板沿着停止线放置
17
+ * @returns
18
+ */
9
19
  initializeLayer(): Promise<void>;
10
- private currentPanelScale;
20
+ /**
21
+ * 初始化灯组与进口道的关联关系
22
+ */
23
+ initializeLampGroup(data: any): void;
24
+ /**
25
+ * 处理统一信控平台信号灯数据
26
+ * @param data
27
+ */
28
+ handleUniSignalData(data: any): IResult;
29
+ /**
30
+ * 根据地图比例尺计算灯组面板缩放比例
31
+ */
11
32
  private getPanelScale;
12
- handleSignalData(data: any): Promise<void>;
33
+ /**
34
+ * 地图移动时更新灯组面板位置
35
+ */
36
+ private updatePanelPosition;
37
+ private doHoloSignalData;
38
+ private updateLampGroupPanelStatus;
39
+ /**
40
+ * 处理全息流信号灯数据
41
+ * @param data
42
+ * @returns
43
+ */
44
+ handleHoloSignalData(data: any): Promise<void>;
13
45
  clearSignal(): void;
14
46
  /**
15
47
  * 从停止线坐标计算面板旋转角度
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const y=require("@arcgis/core/core/reactiveUtils"),u=require("@arcgis/core/geometry"),L=require("@arcgis/core/geometry/support/webMercatorUtils.js"),M=require("@arcgis/core/layers/GraphicsLayer"),S=require("./signal-holo-flow.js");function P(f){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(f){for(const n in f)if(n!=="default"){const l=Object.getOwnPropertyDescriptor(f,n);Object.defineProperty(o,n,l.get?l:{enumerable:!0,get:()=>f[n]})}}return o.default=f,Object.freeze(o)}const b=P(y),d=P(L);class v extends S.default{constructor(o,n){super(o),this.stopLineLayer=new M,this.watchHandle=null,this.stopLineMap=new Map,this.countdownPanelProps=n,this.view.map.add(this.stopLineLayer)}async initializeLayer(){var p,c;console.time("初始化停止线图层");let o=(c=(p=this.mapConfig.holoFlow)==null?void 0:p.signal)==null?void 0:c.stopLineLayer;if(!o)return;o=this.mapConfig.assetsRoot+"/"+o;const l=await(await fetch(o)).json();for(const t of l.features){const{roadId:i,nodeId:e}=t.properties;let{destinationPoint:s}=t.properties;const{coordinates:a}=t.geometry;if(s){if(typeof s=="string")try{s=JSON.parse(s)}catch(h){console.error("解析面板基准点失败",h);continue}}else{const h=a[0],w=a[a.length-1],g=(h[0]+w[0])/2,m=(h[1]+w[1])/2;s=[g,m]}const r=this.stopLineMap.get(e);r?r.set(i,{coord:a,panelPoint:s}):this.stopLineMap.set(e,new Map([[i,{coord:a,panelPoint:s}]]))}console.timeEnd("初始化停止线图层")}getPanelScale(){const o=this.view.scale;let n=1;return o<1e3?n=1:o<2e3?n=.8:o<4e3?n=.4:n=0,n}async handleSignalData(o){this.watchHandle||(this.watchHandle=b.watch(()=>this.view.extent,()=>{const t=this.getPanelScale();for(const i of this.countdownPanelProps){t!==this.currentPanelScale&&(i.scale=t);const{mapPoint:e}=i;let s=new u.Point({x:e[0],y:e[1]});this.view.spatialReference.isWebMercator&&(s=d.geographicToWebMercator(s));const a=this.view.toScreen(s);if(i.position.left=a.x,i.position.top=a.y,this.view.type==="3d"){const r=this.getPanelRotation(i.stopLine);i.rotation=r}}this.currentPanelScale=t}));const n=o.crossId,l=this.stopLineMap.get(n);if(!l)return;const p=o.phaseCountDownList,c=new Map;for(const t of p){let i="";for(let r of t.roadIdList)if(r.startsWith("-")&&(r=r.slice(1)),l.has(r)){i=r;break}if(!i)continue;let e=c.get(i);if(e||(e={},c.set(i,e)),!t.direction){console.log(`没有找到对应的方向${n}--${JSON.stringify(t)}`);continue}const s=t.direction.toLowerCase(),a=t.color===1?"red":t.color===2?"yellow":"green";s==="u"?(e.uNumber=t.leftTime,e.uColor=a):s==="l"?(e.lNumber=t.leftTime,e.lColor=a):s==="s"?(e.sNumber=t.leftTime,e.sColor=a):s==="r"&&(e.rNumber=t.leftTime,e.rColor=a)}c.forEach((t,i)=>{const e=l.get(i);if(!e)return;const s=this.countdownPanelProps.find(a=>a.crossId===n&&a.roadId===i);if(s)s.lampStatus=t;else{let a=new u.Point({x:e.panelPoint[0],y:e.panelPoint[1]});this.view.spatialReference.isWebMercator&&(a=d.geographicToWebMercator(a));const r=this.view.toScreen(a),h=this.getPanelRotation(e.coord);this.countdownPanelProps.push({displayMode:"complex",crossId:n,roadId:i,mapPoint:e.panelPoint,stopLine:e.coord,position:{left:r.x,top:r.y},rotation:h,scale:this.getPanelScale(),lampStatus:t})}})}clearSignal(){var o;this.stopLineLayer.removeAll(),this.countdownPanelProps.length=0,(o=this.watchHandle)==null||o.remove(),this.watchHandle=null}getPanelRotation(o){const n=o[0];let l=new u.Point({x:n[0],y:n[1]});this.view.spatialReference.isWebMercator&&(l=d.geographicToWebMercator(l));const p=this.view.toScreen(l),c=o[o.length-1];let t=new u.Point({x:c[0],y:c[1]});this.view.spatialReference.isWebMercator&&(t=d.geographicToWebMercator(t));const i=this.view.toScreen(t),e=i.x-p.x,s=i.y-p.y;return Math.atan2(s,e)*(180/Math.PI)}}exports.default=v;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const P=require("@arcgis/core/core/reactiveUtils"),f=require("@arcgis/core/geometry"),y=require("@arcgis/core/geometry/support/webMercatorUtils.js"),S=require("@arcgis/core/layers/GraphicsLayer"),L=require("./signal-holo-flow.js");function g(h){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(h){for(const t in h)if(t!=="default"){const a=Object.getOwnPropertyDescriptor(h,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:()=>h[t]})}}return e.default=h,Object.freeze(e)}const m=g(P),d=g(y);class b extends L.default{constructor(e,t){var a,i;super(e),this.stopLineLayer=new S,this.watchHandle=null,this.trajectoryDelayTime=2,this.stopLineMap=new Map,this.lampGroupMap=new Map,this.countdownPanelProps=t,this.view.map.add(this.stopLineLayer),this.trajectoryDelayTime=((i=(a=this.mapConfig.holoFlow)==null?void 0:a.signal)==null?void 0:i.delay)||2}async initializeLayer(){var i,o;if(this.stopLineMap.size>0)return;console.time("初始化停止线图层");let e=(o=(i=this.mapConfig.holoFlow)==null?void 0:i.signal)==null?void 0:o.stopLineLayer;if(!e)return;e=this.mapConfig.assetsRoot+"/"+e;const a=await(await fetch(e)).json();for(const s of a.features){const{roadId:n}=s.properties;let{destinationPoint:r}=s.properties;const{coordinates:l}=s.geometry;if(r){if(typeof r=="string")try{r=JSON.parse(r)}catch(c){console.error("解析面板基准点失败",c);continue}}else{const c=l[0],u=l[l.length-1],p=(c[0]+u[0])/2,w=(c[1]+u[1])/2;r=[p,w]}this.stopLineMap.set(n,{coord:l,panelPoint:r})}console.timeEnd("初始化停止线图层")}initializeLampGroup(e){const{sigId:t,lampGroupList:a}=e,i=[];a.forEach(o=>{const{lampGroupNo:s,lampGroupType:n,crossFlowList:r,pedList:l}=o;r.length>0&&r.forEach(c=>{const u=c.upSectionId;let p="s";switch(c.turn){case 1:p="s";break;case 2:p="l";break;case 4:p="r";break;case 8:p="u";break}n===81&&(p="bl"),i.push({lampGroupId:s,roadId:u,dir:p})}),l.length>0}),this.lampGroupMap.set(t,i),console.log(i)}handleUniSignalData(e){this.watchHandle||(this.watchHandle=m.watch(()=>this.view.extent,()=>this.updatePanelPosition()));const{sigId:t}=e.data.basicInfo,a=this.lampGroupMap.get(t);if(!a)return{status:-1,message:"灯组未初始化"};const{curSigColorInfo:i}=e.data,o=new Map;return i.forEach(s=>{const n=String(s.lamgroupId),{color:r,leftTime:l}=s,c=a.find(u=>u.lampGroupId===n);if(c){const{roadId:u,dir:p}=c;o.set(u,{...o.get(u)||{},[`${p}Number`]:l,[`${p}Color`]:r===1?"red":r===2?"yellow":"green"})}}),this.updateLampGroupPanelStatus(t,o),{status:0,message:"ok"}}getPanelScale(){const e=this.view.scale;let t=1;return e<1e3?t=1:e<2e3?t=.8:e<4e3?t=.4:t=0,t}updatePanelPosition(){const e=this.getPanelScale();for(const t of this.countdownPanelProps){e!==this.currentPanelScale&&(t.scale=e);const{mapPoint:a}=t;let i=new f.Point({x:a[0],y:a[1]});this.view.spatialReference.isWebMercator&&(i=d.geographicToWebMercator(i));const o=this.view.toScreen(i);if(t.position.left=o.x,t.position.top=o.y,this.view.type==="3d"){const s=this.getPanelRotation(t.stopLine);t.rotation=s}}this.currentPanelScale=e}doHoloSignalData(e){const t=e.crossId,a=e.phaseCountDownList,i=new Map;for(const o of a){let s="";for(let c of o.roadIdList)if(c.startsWith("-")&&(c=c.slice(1)),this.stopLineMap.has(c)){s=c;break}if(!s){console.log(`没有找到对应的进口道${t}--${s}`);continue}let n=i.get(s);if(n||(n={},i.set(s,n)),!o.direction)continue;const r=o.direction.toLowerCase(),l=o.color===1?"red":o.color===2?"yellow":"green";r==="u"?(n.uNumber=o.leftTime,n.uColor=l):r==="l"?(n.lNumber=o.leftTime,n.lColor=l):r==="s"?(n.sNumber=o.leftTime,n.sColor=l):r==="r"&&(n.rNumber=o.leftTime,n.rColor=l)}this.updateLampGroupPanelStatus(t,i)}updateLampGroupPanelStatus(e,t){t.forEach((a,i)=>{const o=this.stopLineMap.get(i);if(!o)return;const s=this.countdownPanelProps.find(n=>n.roadId===i);if(s)s.lampStatus=a;else{let n=new f.Point({x:o.panelPoint[0],y:o.panelPoint[1]});this.view.spatialReference.isWebMercator&&(n=d.geographicToWebMercator(n));const r=this.view.toScreen(n),l=this.getPanelRotation(o.coord);this.countdownPanelProps.push({displayMode:"complex",crossId:e,roadId:i,mapPoint:o.panelPoint,stopLine:o.coord,position:{left:r.x,top:r.y},rotation:l,scale:this.getPanelScale(),lampStatus:a})}})}async handleHoloSignalData(e){this.watchHandle||(this.watchHandle=m.watch(()=>this.view.extent,()=>this.updatePanelPosition())),this.trajectoryDelayTime===0?this.doHoloSignalData(e):setTimeout(()=>this.doHoloSignalData(e),this.trajectoryDelayTime*1e3)}clearSignal(){var e;this.stopLineLayer.removeAll(),this.countdownPanelProps.length=0,(e=this.watchHandle)==null||e.remove(),this.watchHandle=null}getPanelRotation(e){const t=e[0];let a=new f.Point({x:t[0],y:t[1]});this.view.spatialReference.isWebMercator&&(a=d.geographicToWebMercator(a));const i=this.view.toScreen(a),o=e[e.length-1];let s=new f.Point({x:o[0],y:o[1]});this.view.spatialReference.isWebMercator&&(s=d.geographicToWebMercator(s));const n=this.view.toScreen(s),r=n.x-i.x,l=n.y-i.y;return Math.atan2(l,r)*(180/Math.PI)}}exports.default=b;
@@ -16,7 +16,7 @@ export default class SignalHoloFlow {
16
16
  * */
17
17
  initializeLayer(): Promise<void>;
18
18
  private initializePlateBackground;
19
- handleSignalData(data: any): Promise<void>;
19
+ handleHoloSignalData(data: any): Promise<void>;
20
20
  /**
21
21
  * 清除实时信号相关图层
22
22
  * */