gisviewer-vue3-arcgis 1.0.167 → 1.0.168

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 (34) hide show
  1. package/es/src/gis-map/gis-map.vue.d.ts +13 -2
  2. package/es/src/gis-map/gis-map.vue.mjs +138 -135
  3. package/es/src/gis-map/index.d.ts +13 -2
  4. package/es/src/gis-map/utils/holo-flow/index.mjs +37 -36
  5. package/es/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.d.ts +8 -0
  6. package/es/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.mjs +2 -2
  7. package/es/src/gis-map/utils/holo-flow/signal-countdown-panel.vue2.mjs +36 -35
  8. package/es/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.d.ts +2 -0
  9. package/es/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.mjs +100 -84
  10. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.mjs +6 -5
  11. package/es/src/gis-map/utils/holo-flow/trace-renderer-external.d.ts +2 -1
  12. package/es/src/gis-map/utils/holo-flow/trace-renderer-external.mjs +10 -9
  13. package/es/src/gis-map/utils/holo-flow/trace-renderer-layer.mjs +6 -5
  14. package/es/src/gis-map/utils/signal-control-area-controller/index.d.ts +3 -1
  15. package/es/src/gis-map/utils/signal-control-area-controller/index.mjs +169 -67
  16. package/es/src/types/index.d.ts +1 -0
  17. package/es/style.css +1 -1
  18. package/lib/src/gis-map/gis-map.vue.d.ts +13 -2
  19. package/lib/src/gis-map/gis-map.vue.js +1 -1
  20. package/lib/src/gis-map/index.d.ts +13 -2
  21. package/lib/src/gis-map/utils/holo-flow/index.js +1 -1
  22. package/lib/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.d.ts +8 -0
  23. package/lib/src/gis-map/utils/holo-flow/signal-countdown-panel.vue.js +1 -1
  24. package/lib/src/gis-map/utils/holo-flow/signal-countdown-panel.vue2.js +1 -1
  25. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.d.ts +2 -0
  26. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow-lsr.js +1 -1
  27. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.js +1 -1
  28. package/lib/src/gis-map/utils/holo-flow/trace-renderer-external.d.ts +2 -1
  29. package/lib/src/gis-map/utils/holo-flow/trace-renderer-external.js +1 -1
  30. package/lib/src/gis-map/utils/holo-flow/trace-renderer-layer.js +1 -1
  31. package/lib/src/gis-map/utils/signal-control-area-controller/index.d.ts +3 -1
  32. package/lib/src/gis-map/utils/signal-control-area-controller/index.js +1 -1
  33. package/lib/src/types/index.d.ts +1 -0
  34. package/package.json +1 -1
@@ -1,25 +1,25 @@
1
- import * as u from "@arcgis/core/core/reactiveUtils.js";
1
+ import * as p from "@arcgis/core/core/reactiveUtils.js";
2
2
  import y from "@arcgis/core/Graphic";
3
3
  import h from "@arcgis/core/layers/GraphicsLayer";
4
- import p from "@turf/buffer";
4
+ import u from "@turf/buffer";
5
5
  import d from "@turf/convex";
6
6
  import * as o from "@turf/helpers";
7
- import f from "concaveman";
8
- import b from "./district-controller.mjs";
7
+ import b from "concaveman";
8
+ import f from "./district-controller.mjs";
9
9
  class x {
10
10
  constructor(e) {
11
11
  this.crossScale = 5e3, this.view = e, this.districtControllerLayer = new h({
12
- id: "districtControllerLayer",
13
- maxScale: 144447,
14
- minScale: 1155582
12
+ id: "districtControllerLayer"
15
13
  }), this.subDistrictControllerLayer = new h({
16
14
  id: "subDistrictControllerLayer",
17
- maxScale: 0,
18
- minScale: 144447
15
+ visible: !1
16
+ // maxScale: 0,
17
+ // minScale: 144447
19
18
  }), this.crossLayer = new h({
20
19
  id: "crossLayer",
21
- maxScale: 0,
22
- minScale: 36112
20
+ visible: !1
21
+ // maxScale: 0,
22
+ // minScale: 36112
23
23
  }), this.highlightLayer = new h({
24
24
  id: "highlightLayer"
25
25
  }), this.view.map.addMany([
@@ -30,15 +30,15 @@ class x {
30
30
  ]);
31
31
  }
32
32
  showSignalControlArea(e) {
33
- this.districtControllerLayer.removeAll(), this.subDistrictControllerLayer.removeAll(), this.crossLayer.removeAll(), this.highlightLayer.removeAll(), this.districtControllerLayer.visible = !0, this.subDistrictControllerLayer.visible = !0;
33
+ this.districtControllerLayer.removeAll(), this.subDistrictControllerLayer.removeAll(), this.crossLayer.removeAll(), this.highlightLayer.removeAll(), this.districtControllerLayer.visible = !0;
34
34
  for (const t of e) {
35
- const r = new b(t);
36
- this.drawArea(r, !0);
35
+ const i = new f(t);
36
+ this.drawArea(i, !0);
37
37
  }
38
- return this.watchHandle = u.watch(
38
+ return this.watchHandle = p.watch(
39
39
  () => this.view.scale,
40
- (t, r) => {
41
- t > this.crossScale && r <= this.crossScale ? (this.crossLayer.graphics.forEach((s) => {
40
+ (t, i) => {
41
+ t > this.crossScale && i <= this.crossScale ? (this.crossLayer.graphics.forEach((s) => {
42
42
  s.symbol = this.getCrossGraphicSymbol(
43
43
  s.attributes,
44
44
  "marker"
@@ -48,7 +48,7 @@ class x {
48
48
  s.attributes,
49
49
  "marker"
50
50
  ));
51
- })) : t <= this.crossScale && r > this.crossScale && (this.crossLayer.graphics.forEach((s) => {
51
+ })) : t <= this.crossScale && i > this.crossScale && (this.crossLayer.graphics.forEach((s) => {
52
52
  s.symbol = this.getCrossGraphicSymbol(
53
53
  s.attributes,
54
54
  "picture"
@@ -73,30 +73,23 @@ class x {
73
73
  scale: 1500
74
74
  }) : await this.view.goTo(t.geometry), { status: 0, message: "ok" }) : { status: 1, message: "未找到" };
75
75
  }
76
- showPopup(e) {
77
- const t = e.geometry.type === "point" ? e.geometry : e.geometry.centroid;
78
- this.view.openPopup({
79
- features: [e],
80
- location: t
81
- });
82
- }
83
76
  async highlightSignalControlArea(e) {
84
77
  if (!e.id || e.id === "")
85
78
  return { status: 1, message: "请输入id" };
86
- this.highlightLayer.removeAll(), this.districtControllerLayer.visible = !1, this.subDistrictControllerLayer.visible = !1, this.crossLayer.visible = !1;
87
- const t = this.districtControllerLayer.graphics.filter((i) => i.getAttribute("id") === e.id).toArray().map((i) => i.clone()), r = this.subDistrictControllerLayer.graphics.filter(
88
- (i) => i.getAttribute("id") === e.id || i.getAttribute("parentId") === e.id
89
- ).toArray().map((i) => i.clone()), s = this.crossLayer.graphics.filter(
90
- (i) => i.getAttribute("id") === e.id || i.getAttribute("districtId") === e.id || i.getAttribute("subDistrictId") === e.id
91
- ).toArray().map((i) => i.clone());
92
- if (t.length > 0 && this.highlightLayer.addMany(t), r.length > 0 && this.highlightLayer.addMany(r), s.length > 0 && this.highlightLayer.addMany(s), this.highlightLayer.graphics.length === 0)
79
+ this.highlightLayer.removeAll(), this.districtControllerLayer.visible = !1;
80
+ const t = this.districtControllerLayer.graphics.filter((r) => r.getAttribute("id") === e.id).toArray().map((r) => r.clone()), i = this.subDistrictControllerLayer.graphics.filter(
81
+ (r) => r.getAttribute("id") === e.id || r.getAttribute("parentId") === e.id
82
+ ).toArray().map((r) => r.clone()), s = this.crossLayer.graphics.filter(
83
+ (r) => r.getAttribute("id") === e.id || r.getAttribute("districtId") === e.id || r.getAttribute("subDistrictId") === e.id
84
+ ).toArray().map((r) => r.clone());
85
+ if (t.length > 0 && this.highlightLayer.addMany(t), i.length > 0 && this.highlightLayer.addMany(i), s.length > 0 && this.highlightLayer.addMany(s), this.highlightLayer.graphics.length === 0)
93
86
  return { status: 1, message: "未找到" };
94
87
  if (t.length > 0)
95
88
  await this.view.goTo(t);
96
- else if (r.length > 0) {
97
- const i = r[0].geometry.centroid;
89
+ else if (i.length > 0) {
90
+ const r = i[0].geometry.centroid;
98
91
  await this.view.goTo({
99
- target: i,
92
+ target: r,
100
93
  scale: this.crossScale - 500
101
94
  });
102
95
  } else
@@ -107,7 +100,28 @@ class x {
107
100
  return { status: 0, message: "ok" };
108
101
  }
109
102
  resetHighlight() {
110
- return this.highlightLayer.removeAll(), this.view.closePopup(), this.districtControllerLayer.visible = !0, this.subDistrictControllerLayer.visible = !0, this.crossLayer.visible = !0, { status: 0, message: "ok" };
103
+ return this.highlightLayer.removeAll(), this.view.closePopup(), this.districtControllerLayer.visible = !0, { status: 0, message: "ok" };
104
+ }
105
+ showSubSignalControlArea(e) {
106
+ const t = e.children;
107
+ console.log(t);
108
+ const i = t.map((s) => new y({
109
+ geometry: {
110
+ type: "point",
111
+ x: s.longitude,
112
+ y: s.latitude
113
+ },
114
+ symbol: this.getCrossGraphicInSubDistrict(),
115
+ attributes: {
116
+ id: s.id,
117
+ name: s.name,
118
+ signalId: s.signalId
119
+ }
120
+ }));
121
+ return this.crossLayer.addMany(i), this.view.goTo(i), { status: 0, message: "ok" };
122
+ }
123
+ editSubSignalArea() {
124
+ return { status: 0, message: "ok" };
111
125
  }
112
126
  /**
113
127
  * 在区控\子区\路口图层中查找对应的graphic
@@ -116,11 +130,11 @@ class x {
116
130
  */
117
131
  findAreaGraphic(e) {
118
132
  let t = this.districtControllerLayer.graphics.find(
119
- (r) => r.attributes.id === e
133
+ (i) => i.attributes.id === e
120
134
  );
121
135
  return t || (t = this.subDistrictControllerLayer.graphics.find(
122
- (r) => r.attributes.id === e
123
- )), t || (t = this.crossLayer.graphics.find((r) => r.attributes.id === e)), t;
136
+ (i) => i.attributes.id === e
137
+ )), t || (t = this.crossLayer.graphics.find((i) => i.attributes.id === e)), t;
124
138
  }
125
139
  /**
126
140
  * 绘制区控与子区
@@ -129,25 +143,25 @@ class x {
129
143
  * @returns
130
144
  */
131
145
  drawArea(e, t) {
132
- const r = e.getAllCrossCoordinates();
133
- if (r.length >= 2) {
134
- let i = null;
135
- if (r.length === 2)
136
- i = o.lineString(r);
146
+ const i = e.getAllCrossCoordinates();
147
+ if (i.length >= 2) {
148
+ let r = null;
149
+ if (i.length === 2)
150
+ r = o.lineString(i);
137
151
  else {
138
152
  if (t) {
139
153
  const n = o.featureCollection(
140
- r.map((g) => o.point(g))
154
+ i.map((g) => o.point(g))
141
155
  );
142
- i = d(n);
156
+ r = d(n);
143
157
  } else {
144
- const n = f(r, 0.5);
145
- n.length >= 4 && (i = o.polygon([n]));
158
+ const n = b(i, 0.5);
159
+ n.length >= 4 && (r = o.polygon([n]));
146
160
  }
147
- i || (i = o.lineString(r));
161
+ r || (r = o.lineString(i));
148
162
  }
149
- const l = p(
150
- i.geometry,
163
+ const l = u(
164
+ r.geometry,
151
165
  // 区控面积更大,需要更大的缓冲半径
152
166
  t ? 200 : 30,
153
167
  {
@@ -213,31 +227,31 @@ class x {
213
227
  });
214
228
  t ? this.districtControllerLayer.add(c) : this.subDistrictControllerLayer.add(c);
215
229
  }
216
- for (const i of e.subDistricts)
217
- this.drawArea(i, !1);
230
+ for (const r of e.subDistricts)
231
+ this.drawArea(r, !1);
218
232
  const s = [];
219
- e.crosses.forEach((i) => {
233
+ e.crosses.forEach((r) => {
220
234
  const l = {
221
235
  type: "cross",
222
- id: i.id,
223
- name: i.name,
236
+ id: r.id,
237
+ name: r.name,
224
238
  color: e.areaColor,
225
- signalId: i.signalId,
239
+ signalId: r.signalId,
226
240
  districtId: t ? e.id : e.parentId,
227
241
  districtName: t ? e.name : e.parentName,
228
242
  subDistrictId: t ? "" : e.id,
229
243
  subDistrictName: t ? "" : e.name,
230
- isKey: i.isKey
244
+ isKey: r.isKey
231
245
  }, a = new y({
232
246
  geometry: {
233
247
  type: "point",
234
- x: i.longitude,
235
- y: i.latitude
248
+ x: r.longitude,
249
+ y: r.latitude
236
250
  },
237
251
  symbol: this.getCrossGraphicSymbol(l, "marker"),
238
252
  attributes: l,
239
253
  popupTemplate: {
240
- title: i.name,
254
+ title: r.name,
241
255
  content: [
242
256
  {
243
257
  type: "fields",
@@ -266,6 +280,94 @@ class x {
266
280
  s.push(a);
267
281
  }), this.crossLayer.addMany(s);
268
282
  }
283
+ getCrossGraphicInSubDistrict() {
284
+ return {
285
+ type: "cim",
286
+ data: {
287
+ type: "CIMSymbolReference",
288
+ primitiveOverrides: [
289
+ {
290
+ // 将textGraphic的TextString替换为graphic.attributes.name
291
+ type: "CIMPrimitiveOverride",
292
+ primitiveName: "textGraphic",
293
+ propertyName: "TextString",
294
+ valueExpressionInfo: {
295
+ type: "CIMExpressionInfo",
296
+ title: "Custom",
297
+ expression: 'Replace($feature.name, "与", "/") + " " + $feature.signalId',
298
+ returnType: "Default"
299
+ }
300
+ }
301
+ ],
302
+ symbol: {
303
+ type: "CIMPointSymbol",
304
+ symbolLayers: [
305
+ // 路口名称
306
+ {
307
+ type: "CIMVectorMarker",
308
+ size: 32,
309
+ colorLocked: !0,
310
+ anchorPointUnits: "Relative",
311
+ frame: { xmin: -16, ymin: -16, xmax: 16, ymax: 16 },
312
+ markerGraphics: [
313
+ {
314
+ type: "CIMMarkerGraphic",
315
+ primitiveName: "textGraphic",
316
+ geometry: { x: 0, y: 0 },
317
+ symbol: {
318
+ type: "CIMTextSymbol",
319
+ height: 12,
320
+ horizontalAlignment: "Center",
321
+ offsetX: 0,
322
+ offsetY: 20,
323
+ haloSize: 1,
324
+ haloSymbol: {
325
+ type: "CIMPolygonSymbol",
326
+ symbolLayers: [
327
+ {
328
+ type: "CIMSolidFill",
329
+ enable: !0,
330
+ color: [255, 255, 255, 255]
331
+ }
332
+ ]
333
+ },
334
+ symbol: {
335
+ type: "CIMPolygonSymbol",
336
+ symbolLayers: [
337
+ {
338
+ type: "CIMSolidFill",
339
+ enable: !0,
340
+ color: [0, 0, 0, 255]
341
+ }
342
+ ]
343
+ },
344
+ verticalAlignment: "Center"
345
+ },
346
+ textString: ""
347
+ }
348
+ ],
349
+ scaleSymbolsProportionally: !0,
350
+ respectFrame: !0
351
+ },
352
+ // 路口图标
353
+ {
354
+ type: "CIMPictureMarker",
355
+ enable: !0,
356
+ anchorPoint: {
357
+ x: 0,
358
+ y: 0
359
+ },
360
+ anchorPointUnits: "Relative",
361
+ size: 20,
362
+ rotateClockwise: !0,
363
+ textureFilter: "Picture",
364
+ url: "/GisViewerAssets/Images/gis_lkcz_xz.png"
365
+ }
366
+ ]
367
+ }
368
+ }
369
+ };
370
+ }
269
371
  /**
270
372
  * 生成路口点符号。在不同比例尺下,使用不同的符号
271
373
  * @param attributes
@@ -273,9 +375,9 @@ class x {
273
375
  * @returns
274
376
  */
275
377
  getCrossGraphicSymbol(e, t) {
276
- const { isKey: r, color: s } = e;
378
+ const { isKey: i, color: s } = e;
277
379
  if (t === "marker")
278
- return r ? {
380
+ return i ? {
279
381
  type: "picture-marker",
280
382
  url: "/GisViewerAssets/Images/icon_star.png",
281
383
  width: "30px",
@@ -329,7 +431,7 @@ class x {
329
431
  height: 12,
330
432
  horizontalAlignment: "Center",
331
433
  offsetX: 0,
332
- offsetY: r ? 50 : 40,
434
+ offsetY: i ? 50 : 40,
333
435
  haloSize: 1,
334
436
  haloSymbol: {
335
437
  type: "CIMPolygonSymbol",
@@ -368,11 +470,11 @@ class x {
368
470
  y: 0
369
471
  },
370
472
  anchorPointUnits: "Relative",
371
- size: r ? 45 : 30,
473
+ size: i ? 45 : 30,
372
474
  rotateClockwise: !0,
373
475
  textureFilter: "Picture",
374
- url: `/GisViewerAssets/Images/xhj_${r ? 4 : 1}.png`,
375
- offsetY: r ? 22 : 15
476
+ url: `/GisViewerAssets/Images/xhj_${i ? 4 : 1}.png`,
477
+ offsetY: i ? 22 : 15
376
478
  }
377
479
  ]
378
480
  }
@@ -258,6 +258,7 @@ export interface ISignalCountdownProps {
258
258
  top: number;
259
259
  };
260
260
  rotation: number;
261
+ scale: number;
261
262
  lampStatus: {
262
263
  uNumber?: number;
263
264
  uColor?: string;
package/es/style.css CHANGED
@@ -1 +1 @@
1
- .gis-viewer{overflow:auto;scrollbar-width:none;-ms-overflow-style:none;&::-webkit-scrollbar{display:none}}.signal-countdown-panel[data-v-d749c855]{position:absolute;display:flex;flex-direction:row;padding:0;margin:0}.signal-countdown-container[data-v-d749c855]{margin:0 1px;padding:0;background-color:#000c;border-style:solid;border-color:#40e0d0;border-width:2px;border-radius:5px;color:#fff;width:40px;height:70px;justify-content:center;align-items:center;display:flex;flex-direction:column}.signal-countdown-number[data-v-d749c855]{font:30px bold}
1
+ .gis-viewer{overflow:auto;scrollbar-width:none;-ms-overflow-style:none;&::-webkit-scrollbar{display:none}}.signal-countdown-panel[data-v-f1172941]{position:absolute;display:flex;flex-direction:row;padding:0;margin:0}.signal-countdown-container[data-v-f1172941]{margin:0 1px;padding:0;background-color:#000c;border-style:solid;border-color:#40e0d0;border-width:2px;border-radius:5px;color:#fff;width:40px;height:70px;justify-content:center;align-items:center;display:flex;flex-direction:column}.signal-countdown-number[data-v-f1172941]{font:30px bold}
@@ -47,6 +47,7 @@ declare const _sfc_main: import("vue").DefineComponent<{
47
47
  top: number;
48
48
  };
49
49
  rotation: number;
50
+ scale: number;
50
51
  lampStatus: {
51
52
  uNumber?: number | undefined;
52
53
  uColor?: string | undefined;
@@ -81,7 +82,7 @@ declare const _sfc_main: import("vue").DefineComponent<{
81
82
  calRoadIndicatorArea: () => Promise<void>;
82
83
  connectCarFlow: (url: string, options?: any) => Promise<void>;
83
84
  disconnectCarFlow: () => void;
84
- handleHoloVehicleTraceData: (vehicleTrace: any) => void;
85
+ handleHoloVehicleTraceData: (vehicleTrace: any) => Promise<void>;
85
86
  clearHoloTrace: () => void;
86
87
  setInterpolate: (enable: boolean) => void;
87
88
  handleHoloSignalData: (signalData: any) => Promise<void>;
@@ -112,7 +113,7 @@ declare const _sfc_main: import("vue").DefineComponent<{
112
113
  status: number;
113
114
  message: string;
114
115
  }>;
115
- showSignalControlArea: (params: any) => Promise<import("../types").IResult>;
116
+ showSignalControlArea: (params: any) => import("../types").IResult;
116
117
  clearSignalControlArea: () => void;
117
118
  locateSignalControlArea: (params: {
118
119
  id: string;
@@ -121,6 +122,8 @@ declare const _sfc_main: import("vue").DefineComponent<{
121
122
  id: string;
122
123
  }) => Promise<import("../types").IResult>;
123
124
  resetHighlightSignalControlArea: () => import("../types").IResult;
125
+ showSubSignalControlArea: (params: any) => import("../types").IResult;
126
+ editSubSignalControlArea: () => import("../types").IResult;
124
127
  props: any;
125
128
  emit: (event: "mapLoaded" | "markerClick" | "mapClick", ...args: any[]) => void;
126
129
  SignalCountdownPanel: import("vue").DefineComponent<{
@@ -144,6 +147,10 @@ declare const _sfc_main: import("vue").DefineComponent<{
144
147
  type: ArrayConstructor;
145
148
  required: true;
146
149
  };
150
+ scale: {
151
+ type: NumberConstructor;
152
+ required: true;
153
+ };
147
154
  position: {
148
155
  type: ObjectConstructor;
149
156
  required: true;
@@ -202,6 +209,10 @@ declare const _sfc_main: import("vue").DefineComponent<{
202
209
  type: ArrayConstructor;
203
210
  required: true;
204
211
  };
212
+ scale: {
213
+ type: NumberConstructor;
214
+ required: true;
215
+ };
205
216
  position: {
206
217
  type: ObjectConstructor;
207
218
  required: true;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),De=require("pinia"),S=require("./stores/index.js");require("./style/index.css");const Ae=require("./utils/holo-flow/index.js"),be=require("./utils/holo-flow/signal-countdown-panel.vue.js"),Ie=require("./utils/map-initializer.js"),k=require("./utils/open-drive-renderer/index.js"),C=require("./utils/overlay.js"),qe=require("./utils/queue-length.js"),L=require("./utils/road-config-tool/index.js"),Me=require("./utils/signal-control-area-controller/index.js"),_e=require("./utils/traffic-flow.js"),xe={class:"gis-viewer"},Be={style:{position:"absolute",bottom:"10px",left:"10px"}},He=a.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(T,{expose:D,emit:A}){const g=a.ref(null);let i,u,c,s,r,n,p,t,o;const f=a.ref(!1);S.registerStore();const h=S.default.useAppDataStore,{countdownPanels:b}=De.storeToRefs(h);a.onMounted(async()=>{if(!g.value)return;document.addEventListener("keydown",d=>{d.ctrlKey&&d.key==="i"&&(f.value=!f.value)});const e=a.getCurrentInstance(),{$gisviewerAssetsRoot:m}=e.appContext.config.globalProperties,l=await(await fetch(O.config)).json();l.assetsRoot=O.assetsRoot||m,h.mapConfig=l,u=new Ie.default,i=await u.initialize({container:g.value,mapConfig:l,markerClickCallback:(d,y,v,Te)=>{w("markerClick",d,y,v,Te)},mapClickCallback:(d,y,v)=>{w("mapClick",d,y,v)}}),r=new Ae.default(i),await r.init(),w("mapLoaded")}),a.onUnmounted(()=>{o==null||o.clearSignalControlArea(),t==null||t.clearOpenDrive(),r==null||r.clearHoloTrace(),r==null||r.clearHoloSignal(),s==null||s.disconnectTrafficFlow()});const I=a.computed(()=>i),q=()=>{const e=S.default.useAppDataStore;e.saveTrackLog=!0},M=()=>{r.downloadTrackLog()},_=async e=>await u.setMapCenter(e),x=async e=>await u.setMapCamera(e),B=async e=>await u.lookAt(e),H=e=>u.setLayerVisibility(e),V=(e,m)=>u.requestCoordinateTransform(e,m),P=e=>{u.cancelCoordinateTransform(e)},N=e=>{u.setMapZoomRange(e)},E=e=>(c||(c=new L.default(i)),c.showLaneNumber(e)),j=()=>{c==null||c.clearLaneNumber()},z=async e=>(c||(c=new L.default(i)),await c.initializeSearch(e)),Q=async()=>c==null?void 0:c.calCrossIndicatorArea(),F=async()=>{},Z=async(e,m)=>{s||(s=new _e.default(i)),s.connectTrafficFlow(e,m)},K=()=>{s==null||s.disconnectTrafficFlow()},U=e=>{r.handleVehicleTraceData(e)},G=()=>{r.clearHoloTrace()},J=e=>{r.setInterpolate(e)},W=async e=>{await r.handleSignalData(e)},X=()=>{r.clearHoloSignal()},Y=e=>{s==null||s.toggleTrafficInfo(e),r.toggleTrafficInfo(e)},R=e=>{r.togglePause(e)},$=e=>{s==null||s.toggleTrafficObject(e),r.toggleTrafficObject(e)},ee=e=>{r.updatePanelContent(e)},te=async e=>(n||(n=new C.default(i)),n.addOverlays(e)),ae=e=>(n||(n=new C.default(i)),n.addMask(e)),ne=()=>{n==null||n.removeMask()},re=e=>n==null?void 0:n.removeOverlaysByType(e),se=e=>n==null?void 0:n.removeOverlaysById(e),oe=()=>n==null?void 0:n.removeAllOverlays(),ie=()=>{n==null||n.showAllOverlays()},ce=e=>{p||(p=new qe.default(i)),p.updateQueueLength(e)},le=()=>{p==null||p.removeQueueLength()},ue=async(e,m)=>(t||(t=new k.default(i)),await t.showOpenDriveFromServer(e,m)),me=async e=>(t||(t=new k.default(i)),await t.clearOpenDrive(),await t.showOpenDriveFromFile(e)),de=async()=>await(t==null?void 0:t.clearOpenDrive()),pe=async e=>t?await(t==null?void 0:t.findSumo(e)):{status:-1,message:"未加载OpenDrive地图"},ge=async e=>t?t.selectSumo(e):{status:-1,message:"未加载OpenDrive地图"},fe=async e=>t?t.unselectSumo(e):{status:-1,message:"未加载OpenDrive地图"},we=async e=>t?await t.geometrySearch(e):{status:-1,message:"未加载OpenDrive地图"},ye=async e=>t?await t.getSumoInfo(e):{status:-1,message:"未加载OpenDrive地图"},ve=async e=>t?await(t==null?void 0:t.splitLane(e)):{status:-1,message:"未加载OpenDrive地图"},Se=async()=>t?t==null?void 0:t.clearSplitLane():{status:-1,message:"未加载OpenDrive地图"},he=async e=>(o||(o=new Me.default(i)),await o.showSignalControlArea(e)),Oe=()=>{o==null||o.clearSignalControlArea()},ke=async e=>o?await o.locateSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Ce=async e=>o?await o.highlightSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Le=()=>o?o.resetHighlight():{status:-1,message:"未加载信号控制区"},O=T,w=A;return D({mapViewer:I,setLayerVisibility:H,setMapCenter:_,lookAt:B,setMapCamera:x,setMapZoomRange:N,requestCoordinateTransform:V,cancelCoordinateTransform:P,addOverlays:te,addMask:ae,removeMask:ne,showAllOverlays:ie,removeOverlaysByType:re,removeOverlaysById:se,removeAllOverlays:oe,showLaneNumber:E,clearLaneNumber:j,initializeAreaTool:z,calCrossIndicatorArea:Q,calRoadIndicatorArea:F,connectCarFlow:Z,disconnectCarFlow:K,handleHoloVehicleTraceData:U,clearHoloTrace:G,handleHoloSignalData:W,clearHoloSignal:X,setInterpolate:J,toggleTrafficInfo:Y,toggleTrafficObject:$,toggleVehicleInfo:ee,togglePause:R,updateQueueLength:ce,removeQueueLength:le,showOpenDriveFromServer:ue,showOpenDriveFromFile:me,clearOpenDrive:de,geometrySearchInOpenDrive:we,findSumoInOpenDrive:pe,selectSumoInOpenDrive:ge,unselectSumoInOpenDrive:fe,getSumoInfo:ye,splitOpenDriveLane:ve,clearSplitOpenDriveLane:Se,showSignalControlArea:he,clearSignalControlArea:Oe,locateSignalControlArea:ke,highlightSignalControlArea:Ce,resetHighlightSignalControlArea:Le}),(e,m)=>(a.openBlock(),a.createElementBlock("div",xe,[a.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:g},[a.withDirectives(a.createElementVNode("div",Be,[a.createElementVNode("button",{style:{"margin-right":"10px"},onClick:q}," 开始记录 "),a.createElementVNode("button",{onClick:M},"下载日志")],512),[[a.vShow,f.value]])],512),(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(a.unref(b),(l,d)=>(a.openBlock(),a.createBlock(be.default,{key:d,"display-mode":l.displayMode,"road-id":l.crossId,"cross-id":l.roadId,"map-point":l.mapPoint,"stop-line":l.stopLine,position:l.position,rotation:l.rotation,"lamp-status":l.lampStatus},null,8,["display-mode","road-id","cross-id","map-point","stop-line","position","rotation","lamp-status"]))),128))]))}});exports.default=He;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("vue"),Ie=require("pinia"),v=require("./stores/index.js");require("./style/index.css");const O=require("./utils/holo-flow/index.js"),Me=require("./utils/holo-flow/signal-countdown-panel.vue.js"),_e=require("./utils/map-initializer.js"),k=require("./utils/open-drive-renderer/index.js"),A=require("./utils/overlay.js"),xe=require("./utils/queue-length.js"),L=require("./utils/road-config-tool/index.js"),T=require("./utils/signal-control-area-controller/index.js"),Be=require("./utils/traffic-flow.js"),He={class:"gis-viewer"},Ve={style:{position:"absolute",bottom:"10px",left:"10px"}},Pe=n.defineComponent({__name:"gis-map",props:{config:{},assetsRoot:{}},emits:["mapLoaded","markerClick","mapClick"],setup(b,{expose:D,emit:q}){const p=n.ref(null);let i,u,l,o,a,r,g,t,s;const f=n.ref(!1);v.registerStore();const h=v.default.useAppDataStore,{countdownPanels:I}=Ie.storeToRefs(h);n.onMounted(async()=>{if(!p.value)return;document.addEventListener("keydown",m=>{m.ctrlKey&&m.key==="i"&&(f.value=!f.value)});const e=n.getCurrentInstance(),{$gisviewerAssetsRoot:d}=e.appContext.config.globalProperties,c=await(await fetch(C.config)).json();c.assetsRoot=C.assetsRoot||d,h.mapConfig=c,u=new _e.default,i=await u.initialize({container:p.value,mapConfig:c,markerClickCallback:(m,y,S,qe)=>{w("markerClick",m,y,S,qe)},mapClickCallback:(m,y,S)=>{w("mapClick",m,y,S)}}),a=new O.default(i),await a.init(),w("mapLoaded")}),n.onUnmounted(()=>{s==null||s.clearSignalControlArea(),t==null||t.clearOpenDrive(),a.clearHoloTrace(),a.clearHoloSignal(),o==null||o.disconnectTrafficFlow()});const M=n.computed(()=>i),_=()=>{const e=v.default.useAppDataStore;e.saveTrackLog=!0},x=()=>{a.downloadTrackLog()},B=async e=>await u.setMapCenter(e),H=async e=>await u.setMapCamera(e),V=async e=>await u.lookAt(e),P=e=>u.setLayerVisibility(e),N=(e,d)=>u.requestCoordinateTransform(e,d),E=e=>{u.cancelCoordinateTransform(e)},j=e=>{u.setMapZoomRange(e)},z=e=>(l||(l=new L.default(i)),l.showLaneNumber(e)),Q=()=>{l==null||l.clearLaneNumber()},Z=async e=>(l||(l=new L.default(i)),await l.initializeSearch(e)),K=async()=>l==null?void 0:l.calCrossIndicatorArea(),U=async()=>{},G=async(e,d)=>{o||(o=new Be.default(i)),o.connectTrafficFlow(e,d)},J=()=>{o==null||o.disconnectTrafficFlow()},W=async e=>{a||(a=new O.default(i),await a.init()),a.handleVehicleTraceData(e)},X=()=>{a.clearHoloTrace()},Y=e=>{a.setInterpolate(e)},F=async e=>{await a.handleSignalData(e)},R=()=>{a.clearHoloSignal()},$=e=>{o==null||o.toggleTrafficInfo(e),a==null||a.toggleTrafficInfo(e)},ee=e=>{a==null||a.togglePause(e)},te=e=>{o==null||o.toggleTrafficObject(e),a==null||a.toggleTrafficObject(e)},ae=e=>{a==null||a.updatePanelContent(e)},ne=async e=>(r||(r=new A.default(i)),r.addOverlays(e)),re=e=>(r||(r=new A.default(i)),r.addMask(e)),se=()=>{r==null||r.removeMask()},oe=e=>r==null?void 0:r.removeOverlaysByType(e),ie=e=>r==null?void 0:r.removeOverlaysById(e),ce=()=>r==null?void 0:r.removeAllOverlays(),le=()=>{r==null||r.showAllOverlays()},ue=e=>{g||(g=new xe.default(i)),g.updateQueueLength(e)},de=()=>{g==null||g.removeQueueLength()},me=async(e,d)=>(t||(t=new k.default(i)),await t.showOpenDriveFromServer(e,d)),ge=async e=>(t||(t=new k.default(i)),await t.clearOpenDrive(),await t.showOpenDriveFromFile(e)),pe=async()=>await(t==null?void 0:t.clearOpenDrive()),fe=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地图"},ye=async e=>t?t.unselectSumo(e):{status:-1,message:"未加载OpenDrive地图"},Se=async e=>t?await t.geometrySearch(e):{status:-1,message:"未加载OpenDrive地图"},ve=async e=>t?await t.getSumoInfo(e):{status:-1,message:"未加载OpenDrive地图"},he=async e=>t?await(t==null?void 0:t.splitLane(e)):{status:-1,message:"未加载OpenDrive地图"},Ce=async()=>t?t==null?void 0:t.clearSplitLane():{status:-1,message:"未加载OpenDrive地图"},Oe=e=>(s||(s=new T.default(i)),s.showSignalControlArea(e)),ke=()=>{s==null||s.clearSignalControlArea()},Ae=async e=>s?await s.locateSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Le=async e=>s?await s.highlightSignalControlArea(e):{status:-1,message:"未加载信号控制区"},Te=()=>s?s.resetHighlight():{status:-1,message:"未加载信号控制区"},be=e=>(s||(s=new T.default(i)),s.showSubSignalControlArea(e)),De=()=>s?s.editSubSignalArea():{status:-1,message:"未加载信号控制区"},C=b,w=q;return D({mapViewer:M,setLayerVisibility:P,setMapCenter:B,lookAt:V,setMapCamera:H,setMapZoomRange:j,requestCoordinateTransform:N,cancelCoordinateTransform:E,addOverlays:ne,addMask:re,removeMask:se,showAllOverlays:le,removeOverlaysByType:oe,removeOverlaysById:ie,removeAllOverlays:ce,showLaneNumber:z,clearLaneNumber:Q,initializeAreaTool:Z,calCrossIndicatorArea:K,calRoadIndicatorArea:U,connectCarFlow:G,disconnectCarFlow:J,handleHoloVehicleTraceData:W,clearHoloTrace:X,handleHoloSignalData:F,clearHoloSignal:R,setInterpolate:Y,toggleTrafficInfo:$,toggleTrafficObject:te,toggleVehicleInfo:ae,togglePause:ee,updateQueueLength:ue,removeQueueLength:de,showOpenDriveFromServer:me,showOpenDriveFromFile:ge,clearOpenDrive:pe,geometrySearchInOpenDrive:Se,findSumoInOpenDrive:fe,selectSumoInOpenDrive:we,unselectSumoInOpenDrive:ye,getSumoInfo:ve,splitOpenDriveLane:he,clearSplitOpenDriveLane:Ce,showSignalControlArea:Oe,clearSignalControlArea:ke,locateSignalControlArea:Ae,highlightSignalControlArea:Le,resetHighlightSignalControlArea:Te,showSubSignalControlArea:be,editSubSignalControlArea:De}),(e,d)=>(n.openBlock(),n.createElementBlock("div",He,[n.createElementVNode("div",{class:"gis-viewer-main",ref_key:"mapContainer",ref:p},[n.withDirectives(n.createElementVNode("div",Ve,[n.createElementVNode("button",{style:{"margin-right":"10px"},onClick:_}," 开始记录 "),n.createElementVNode("button",{onClick:x},"下载日志")],512),[[n.vShow,f.value]])],512),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(n.unref(I),(c,m)=>(n.openBlock(),n.createBlock(Me.default,{key:m,"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=Pe;
@@ -36,6 +36,7 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
36
36
  top: number;
37
37
  };
38
38
  rotation: number;
39
+ scale: number;
39
40
  lampStatus: {
40
41
  uNumber?: number | undefined;
41
42
  uColor?: string | undefined;
@@ -70,7 +71,7 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
70
71
  calRoadIndicatorArea: () => Promise<void>;
71
72
  connectCarFlow: (url: string, options?: any) => Promise<void>;
72
73
  disconnectCarFlow: () => void;
73
- handleHoloVehicleTraceData: (vehicleTrace: any) => void;
74
+ handleHoloVehicleTraceData: (vehicleTrace: any) => Promise<void>;
74
75
  clearHoloTrace: () => void;
75
76
  setInterpolate: (enable: boolean) => void;
76
77
  handleHoloSignalData: (signalData: any) => Promise<void>;
@@ -101,7 +102,7 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
101
102
  status: number;
102
103
  message: string;
103
104
  }>;
104
- showSignalControlArea: (params: any) => Promise<import("../types").IResult>;
105
+ showSignalControlArea: (params: any) => import("../types").IResult;
105
106
  clearSignalControlArea: () => void;
106
107
  locateSignalControlArea: (params: {
107
108
  id: string;
@@ -110,6 +111,8 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
110
111
  id: string;
111
112
  }) => Promise<import("../types").IResult>;
112
113
  resetHighlightSignalControlArea: () => import("../types").IResult;
114
+ showSubSignalControlArea: (params: any) => import("../types").IResult;
115
+ editSubSignalControlArea: () => import("../types").IResult;
113
116
  props: any;
114
117
  emit: (event: "mapLoaded" | "markerClick" | "mapClick", ...args: any[]) => void;
115
118
  SignalCountdownPanel: import("vue").DefineComponent<{
@@ -133,6 +136,10 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
133
136
  type: ArrayConstructor;
134
137
  required: true;
135
138
  };
139
+ scale: {
140
+ type: NumberConstructor;
141
+ required: true;
142
+ };
136
143
  position: {
137
144
  type: ObjectConstructor;
138
145
  required: true;
@@ -191,6 +198,10 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
191
198
  type: ArrayConstructor;
192
199
  required: true;
193
200
  };
201
+ scale: {
202
+ type: NumberConstructor;
203
+ required: true;
204
+ };
194
205
  position: {
195
206
  type: ObjectConstructor;
196
207
  required: true;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("../../../types/index.js"),i=require("../../stores/index.js"),s=require("./signal-holo-flow.js"),n=require("./signal-holo-flow-lsr.js"),c=require("./trace-holo-flow.js");class r{constructor(e){this.view=e}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=i.default.useAppDataStore;((l=(o=JSON.parse(JSON.stringify(a.mapConfig)).holoFlow)==null?void 0:o.signal)==null?void 0:l.style)==="LSR"?this.signalHoloFlow=new n.default(this.view):this.signalHoloFlow=new s.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=r;
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"),c=require("./signal-holo-flow-lsr.js"),r=require("./trace-holo-flow.js");class h{constructor(e){this.view=e}async init(){this.traceHoloFlow=new r.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 c.default(this.view):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;
@@ -19,6 +19,10 @@ declare const _sfc_main: import("vue").DefineComponent<{
19
19
  type: ArrayConstructor;
20
20
  required: true;
21
21
  };
22
+ scale: {
23
+ type: NumberConstructor;
24
+ required: true;
25
+ };
22
26
  position: {
23
27
  type: ObjectConstructor;
24
28
  required: true;
@@ -77,6 +81,10 @@ declare const _sfc_main: import("vue").DefineComponent<{
77
81
  type: ArrayConstructor;
78
82
  required: true;
79
83
  };
84
+ scale: {
85
+ type: NumberConstructor;
86
+ required: true;
87
+ };
80
88
  position: {
81
89
  type: ObjectConstructor;
82
90
  required: true;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./signal-countdown-panel.vue2.js");require("./signal-countdown-panel.vue3.js");const t=require("../../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-d749c855"]]);exports.default=u;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./signal-countdown-panel.vue2.js");require("./signal-countdown-panel.vue3.js");const t=require("../../../../_virtual/_plugin-vue_export-helper.js"),u=t.default(e.default,[["__scopeId","data-v-f1172941"]]);exports.default=u;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),g={key:0,class:"signal-countdown-container"},S=["src"],v={key:1,class:"signal-countdown-container"},y=["src"],N={key:2,class:"signal-countdown-container"},h=["src"],w={key:3,class:"signal-countdown-container"},V=["src"],C=e.defineComponent({__name:"signal-countdown-panel",props:{displayMode:{},crossId:{},roadId:{},mapPoint:{},stopLine:{},position:{},rotation:{},lampStatus:{}},setup(n){const t=n,s=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)`})),a=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/u-${t.lampStatus.uColor}.png`),r=e.computed(()=>({color:l(t.lampStatus.uColor)})),c=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/l-${t.lampStatus.lColor}.png`),i=e.computed(()=>({color:l(t.lampStatus.lColor)})),m=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/s-${t.lampStatus.sColor}.png`),u=e.computed(()=>({color:l(t.lampStatus.sColor)})),d=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/r-${t.lampStatus.rColor}.png`),p=e.computed(()=>({color:l(t.lampStatus.rColor)})),l=o=>{switch(o){case"red":return"red";case"yellow":return"rgb(255, 192, 2)";case"green":return"lime";default:return"white"}};return(o,E)=>(e.openBlock(),e.createElementBlock("div",{class:"signal-countdown-panel",style:e.normalizeStyle(s.value)},[o.lampStatus.uColor?(e.openBlock(),e.createElementBlock("div",g,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(r.value)},e.toDisplayString(o.lampStatus.uNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:a.value,width:"20px",height:"20px"},null,8,S)])])):e.createCommentVNode("",!0),o.lampStatus.lColor?(e.openBlock(),e.createElementBlock("div",v,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(i.value)},e.toDisplayString(o.lampStatus.lNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:c.value,width:"20px",height:"20px"},null,8,y)])])):e.createCommentVNode("",!0),o.lampStatus.sColor?(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(u.value)},e.toDisplayString(o.lampStatus.sNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:m.value,width:"20px",height:"20px"},null,8,h)])])):e.createCommentVNode("",!0),o.lampStatus.rColor!==void 0?(e.openBlock(),e.createElementBlock("div",w,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(p.value)},e.toDisplayString(o.lampStatus.rNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:d.value,width:"20px",height:"20px"},null,8,V)])])):e.createCommentVNode("",!0)],4))}});exports.default=C;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),g={key:0,class:"signal-countdown-container"},S=["src"],v={key:1,class:"signal-countdown-container"},y=["src"],N={key:2,class:"signal-countdown-container"},h=["src"],w={key:3,class:"signal-countdown-container"},V=["src"],C=e.defineComponent({__name:"signal-countdown-panel",props:{displayMode:{},crossId:{},roadId:{},mapPoint:{},stopLine:{},scale:{},position:{},rotation:{},lampStatus:{}},setup(n){const t=n,s=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})`})),a=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/u-${t.lampStatus.uColor}.png`),r=e.computed(()=>({color:l(t.lampStatus.uColor)})),c=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/l-${t.lampStatus.lColor}.png`),i=e.computed(()=>({color:l(t.lampStatus.lColor)})),m=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/s-${t.lampStatus.sColor}.png`),u=e.computed(()=>({color:l(t.lampStatus.sColor)})),d=e.computed(()=>`/GisViewerAssets/Images/SignalLamp/r-${t.lampStatus.rColor}.png`),p=e.computed(()=>({color:l(t.lampStatus.rColor)})),l=o=>{switch(o){case"red":return"red";case"yellow":return"rgb(255, 192, 2)";case"green":return"lime";default:return"white"}};return(o,E)=>(e.openBlock(),e.createElementBlock("div",{class:"signal-countdown-panel",style:e.normalizeStyle(s.value)},[o.lampStatus.uColor?(e.openBlock(),e.createElementBlock("div",g,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(r.value)},e.toDisplayString(o.lampStatus.uNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:a.value,width:"20px",height:"20px"},null,8,S)])])):e.createCommentVNode("",!0),o.lampStatus.lColor?(e.openBlock(),e.createElementBlock("div",v,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(i.value)},e.toDisplayString(o.lampStatus.lNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:c.value,width:"20px",height:"20px"},null,8,y)])])):e.createCommentVNode("",!0),o.lampStatus.sColor?(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(u.value)},e.toDisplayString(o.lampStatus.sNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:m.value,width:"20px",height:"20px"},null,8,h)])])):e.createCommentVNode("",!0),o.lampStatus.rColor!==void 0?(e.openBlock(),e.createElementBlock("div",w,[e.createElementVNode("div",{class:"signal-countdown-number",style:e.normalizeStyle(p.value)},e.toDisplayString(o.lampStatus.rNumber),5),e.createElementVNode("div",null,[e.createElementVNode("img",{src:d.value,width:"20px",height:"20px"},null,8,V)])])):e.createCommentVNode("",!0)],4))}});exports.default=C;
@@ -6,6 +6,8 @@ export default class LSRSignalHoloFlow extends SignalHoloFlow {
6
6
  constructor(view: __esri.MapView | __esri.SceneView);
7
7
  private stopLineMap;
8
8
  initializeLayer(): Promise<void>;
9
+ private currentPanelScale;
10
+ private getPanelScale;
9
11
  handleSignalData(data: any): Promise<void>;
10
12
  clearSignal(): void;
11
13
  /**
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const y=require("@arcgis/core/core/reactiveUtils"),w=require("@arcgis/core/geometry"),S=require("@arcgis/core/layers/GraphicsLayer"),L=require("@turf/bearing"),R=require("@turf/destination"),v=require("@turf/helpers"),M=require("../../stores/index.js"),b=require("../common-utils.js"),x=require("./signal-holo-flow.js");function P(h){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(h){for(const t in h)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(h,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>h[t]})}}return e.default=h,Object.freeze(e)}const C=P(y),m=P(v);class T extends x.default{constructor(e){super(e),this.stopLineLayer=new S,this.store=M.default.useAppDataStore,this.watchHandle=null,this.stopLineMap=new Map,this.view.map.add(this.stopLineLayer)}async initializeLayer(){var p,f;console.time("初始化停止线图层");let e=(f=(p=this.mapConfig.holoFlow)==null?void 0:p.signal)==null?void 0:f.stopLineLayer;if(!e)return;e=this.mapConfig.assetsRoot+"/"+e,(await(await fetch(e)).json()).features.forEach(a=>{const{roadId:o,nodeId:s}=a.properties,{coordinates:r}=a.geometry,n=this.stopLineMap.get(s);n?n.set(o,r):this.stopLineMap.set(s,new Map([[o,r]]))}),console.timeEnd("初始化停止线图层")}async handleSignalData(e){this.watchHandle||(this.watchHandle=C.watch(()=>this.view.extent,()=>{for(const o of this.store.countdownPanels){const{mapPoint:s}=o,r=this.view.toScreen({type:"point",x:s[0],y:s[1]});o.position.left=r.x,o.position.top=r.y}}));const t=e.crossId,i=e.rtStage,p=e.nonCurStageRemainingTime,f=e.allStageFlows;console.log(t,i,p,f);const a=new Map;f.forEach(o=>{const{stageId:s,stageFlows:r}=o;let n="green",u=i.stageRemainingTime;if(s===i.stageId)u<=i.stageAllRedTime?n="red":i.stageYellowTime!==0&&u<=i.stageYellowTime+i.stageAllRedTime&&(n="yellow");else{n="red";const l=p.find(g=>g.stageId===s);u=l?l.stageNextRunRemainingTime:0}r.forEach(l=>{let{fromRoadId:g}=l;g.startsWith("-")&&(g=g.slice(1));const d=l.direction.toLowerCase();let c=a.get(g);c||(c={},a.set(g,c)),d==="u"?(c.uNumber=u,c.uColor=n):d==="l"?(c.lNumber=u,c.lColor=n):d==="s"?(c.sNumber=u,c.sColor=n):d==="r"&&(c.rNumber=u,c.rColor=n==="yellow"?"red":n)})}),a.forEach((o,s)=>{console.log(s,o);const r=this.stopLineMap.get(t);if(!r){console.error(`路口${t}没有找到对应的停止线`);return}const n=r.get(s);if(!n){console.error(`路口${t}的进口道${s}没有找到对应的停止线`);return}const u=this.store.countdownPanels.find(l=>l.crossId===t&&l.roadId===s);if(u)u.lampStatus=o;else{const l=this.getPanelPoint(n),g=this.view.toScreen({type:"point",x:l[0],y:l[1]}),d=this.getPanelRotation(n);this.store.countdownPanels.push({displayMode:"complete",crossId:t,roadId:s,mapPoint:l,stopLine:n,position:{left:g.x,top:g.y},rotation:d,lampStatus:o})}})}clearSignal(){var e;this.stopLineLayer.removeAll(),this.store.countdownPanels=[],(e=this.watchHandle)==null||e.remove(),this.watchHandle=null}getPanelPoint(e){const t=b.default.getCenterPointInLine(e),i=e[0],p=e[e.length-1];let a=L(m.point(i),m.point(p))-90;return a<-180&&(a+=360),R(m.point(t),1,a,{units:"meters"}).geometry.coordinates}getPanelRotation(e){const t=e[0],i=new w.Point({x:t[0],y:t[1],spatialReference:this.view.spatialReference}),p=this.view.toScreen(i),f=e[e.length-1],a=new w.Point({x:f[0],y:f[1],spatialReference:this.view.spatialReference}),o=this.view.toScreen(a),s=o.x-p.x,r=o.y-p.y;return Math.atan2(r,s)*(180/Math.PI)}}exports.default=T;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const P=require("@arcgis/core/core/reactiveUtils"),d=require("@arcgis/core/geometry"),m=require("@arcgis/core/layers/GraphicsLayer"),w=require("@turf/bearing"),y=require("@turf/destination"),L=require("@turf/helpers"),S=require("../../stores/index.js"),v=require("../common-utils.js"),M=require("./signal-holo-flow.js");function g(f){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(f){for(const o in f)if(o!=="default"){const r=Object.getOwnPropertyDescriptor(f,o);Object.defineProperty(e,o,r.get?r:{enumerable:!0,get:()=>f[o]})}}return e.default=f,Object.freeze(e)}const b=g(P),h=g(L);class x extends M.default{constructor(e){super(e),this.stopLineLayer=new m,this.store=S.default.useAppDataStore,this.watchHandle=null,this.stopLineMap=new Map,this.view.map.add(this.stopLineLayer)}async initializeLayer(){var p,c;console.time("初始化停止线图层");let e=(c=(p=this.mapConfig.holoFlow)==null?void 0:p.signal)==null?void 0:c.stopLineLayer;if(!e)return;e=this.mapConfig.assetsRoot+"/"+e,(await(await fetch(e)).json()).features.forEach(t=>{const{roadId:s,nodeId:n,angle:i,destinationPoint:a}=t.properties,{coordinates:l}=t.geometry,u=this.stopLineMap.get(n);u?u.set(s,{coord:l,panelPoint:a,angle:i}):this.stopLineMap.set(n,new Map([[s,{coord:l,panelPoint:a,angle:i}]]))}),console.timeEnd("初始化停止线图层")}getPanelScale(){const e=this.view.scale;let o=1;return e<1e3?o=1:e<2e3?o=.8:o=.4,o}async handleSignalData(e){this.watchHandle||(this.watchHandle=b.watch(()=>this.view.extent,()=>{const t=this.getPanelScale();for(const s of this.store.countdownPanels){t!==this.currentPanelScale&&(s.scale=t);const{mapPoint:n}=s,i=this.view.toScreen({type:"point",x:n[0],y:n[1]});s.position.left=i.x,s.position.top=i.y}this.currentPanelScale=t}));const o=e.crossId,r=this.stopLineMap.get(o);if(!r){console.log(`没有找到路口${o}`);return}const p=e.phaseCountDownList,c=new Map;for(const t of p){let s="";for(let l of t.roadIdList)if(l.startsWith("-")&&(l=l.slice(1)),r.has(l)){s=l;break}if(!s){console.log(`没有找到对应的进口道${o}--${s}`);continue}let n=c.get(s);if(n||(n={},c.set(s,n)),!t.direction){console.log(`没有找到对应的方向${o}--${JSON.stringify(t)}`);continue}const i=t.direction.toLowerCase(),a=t.color===1?"red":t.color===2?"yellow":"green";i==="u"?(n.uNumber=t.leftTime,n.uColor=a):i==="l"?(n.lNumber=t.leftTime,n.lColor=a):i==="s"?(n.sNumber=t.leftTime,n.sColor=a):i==="r"&&(n.rNumber=t.leftTime,n.rColor=a)}c.forEach((t,s)=>{const n=r.get(s);if(!n)return;const i=this.store.countdownPanels.find(a=>a.crossId===o&&a.roadId===s);if(i)i.lampStatus=t;else{const a=n.panelPoint,l=this.view.toScreen({type:"point",x:a[0],y:a[1]}),u=this.getPanelRotation(n.coord);this.store.countdownPanels.push({displayMode:"complex",crossId:o,roadId:s,mapPoint:a,stopLine:n.coord,position:{left:l.x,top:l.y},rotation:u,scale:this.getPanelScale(),lampStatus:t})}})}clearSignal(){var e;this.stopLineLayer.removeAll(),this.store.countdownPanels=[],(e=this.watchHandle)==null||e.remove(),this.watchHandle=null}getPanelPoint(e){const o=v.default.getCenterPointInLine(e),r=e[0],p=e[e.length-1];let t=w(h.point(r),h.point(p))-90;return t<-180&&(t+=360),y(h.point(o),1,t,{units:"meters"}).geometry.coordinates}getPanelRotation(e){const o=e[0],r=new d.Point({x:o[0],y:o[1],spatialReference:this.view.spatialReference}),p=this.view.toScreen(r),c=e[e.length-1],t=new d.Point({x:c[0],y:c[1],spatialReference:this.view.spatialReference}),s=this.view.toScreen(t),n=s.x-p.x,i=s.y-p.y;return Math.atan2(i,n)*(180/Math.PI)}}exports.default=x;