gisviewer-vue3-arcgis 1.0.265 → 1.0.267
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/src/gis-map/gis-map.vue.d.ts +10 -3
- package/es/src/gis-map/gis-map.vue.mjs +177 -174
- package/es/src/gis-map/index.d.ts +8 -2
- package/es/src/gis-map/utils/map-initializer.mjs +86 -79
- package/es/src/gis-map/utils/open-drive-renderer/index.d.ts +6 -1
- package/es/src/gis-map/utils/open-drive-renderer/index.mjs +15 -12
- package/es/src/gis-map/utils/signal-control-area/cross-renderer.mjs +101 -45
- package/es/src/gis-map/utils/signal-control-area/{show-area.d.ts → signal-area-controller.d.ts} +3 -0
- package/es/src/gis-map/utils/signal-control-area/{show-area.mjs → signal-area-controller.mjs} +11 -11
- package/es/src/gis-map/utils/signal-control-area/signal-cross-controller.d.ts +24 -0
- package/es/src/gis-map/utils/signal-control-area/signal-cross-controller.mjs +193 -0
- package/es/src/types/index.d.ts +15 -0
- package/lib/src/gis-map/gis-map.vue.d.ts +10 -3
- package/lib/src/gis-map/gis-map.vue.js +1 -1
- package/lib/src/gis-map/index.d.ts +8 -2
- package/lib/src/gis-map/utils/map-initializer.js +1 -1
- package/lib/src/gis-map/utils/open-drive-renderer/index.d.ts +6 -1
- package/lib/src/gis-map/utils/open-drive-renderer/index.js +1 -1
- package/lib/src/gis-map/utils/signal-control-area/cross-renderer.js +1 -1
- package/lib/src/gis-map/utils/signal-control-area/{show-area.d.ts → signal-area-controller.d.ts} +3 -0
- package/lib/src/gis-map/utils/signal-control-area/signal-area-controller.js +1 -0
- package/lib/src/gis-map/utils/signal-control-area/signal-cross-controller.d.ts +24 -0
- package/lib/src/gis-map/utils/signal-control-area/signal-cross-controller.js +1 -0
- package/lib/src/types/index.d.ts +15 -0
- package/package.json +1 -1
- package/lib/src/gis-map/utils/signal-control-area/show-area.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Point as h } from "@arcgis/core/geometry";
|
|
2
2
|
import u from "@arcgis/core/Graphic";
|
|
3
|
-
import
|
|
4
|
-
class
|
|
3
|
+
import p from "@arcgis/core/layers/GraphicsLayer";
|
|
4
|
+
class x {
|
|
5
5
|
constructor(e) {
|
|
6
6
|
this.crossGraphicSymbol = {
|
|
7
7
|
type: "cim",
|
|
@@ -85,26 +85,28 @@ class C {
|
|
|
85
85
|
]
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
}, this.locations = [], this.clusteredLocations = [], this.filteredLocations = [], this.currentShowMode = "scatter", this.symbolScale = 5e3, this.oldScale = 0, this.clusterRadius = 120, this.minClusterPoints = 2, this.maxClusterSymbolSize = 50, this.minClusterSymbolSize = 25, this.view = e, this.crossLayer = new
|
|
88
|
+
}, this.locations = [], this.clusteredLocations = [], this.filteredLocations = [], this.currentShowMode = "scatter", this.symbolScale = 5e3, this.oldScale = 0, this.clusterRadius = 120, this.minClusterPoints = 2, this.maxClusterSymbolSize = 50, this.minClusterSymbolSize = 25, this.view = e, this.crossLayer = new p(), this.view.map.add(this.crossLayer), this.oldScale = e.scale;
|
|
89
89
|
}
|
|
90
90
|
async addCrosses(e) {
|
|
91
91
|
e.forEach((t) => {
|
|
92
|
-
t.signals.forEach((
|
|
93
|
-
|
|
94
|
-
id:
|
|
95
|
-
x:
|
|
96
|
-
y:
|
|
92
|
+
t.signals.forEach((i) => {
|
|
93
|
+
i.longitude && i.latitude && !isNaN(i.longitude) && !isNaN(i.latitude) && this.locations.push({
|
|
94
|
+
id: i.id,
|
|
95
|
+
x: i.longitude,
|
|
96
|
+
y: i.latitude,
|
|
97
97
|
visited: !1,
|
|
98
98
|
filtered: !1,
|
|
99
99
|
clusterId: void 0,
|
|
100
100
|
properties: {
|
|
101
|
-
...
|
|
101
|
+
...i,
|
|
102
102
|
districtId: t.id,
|
|
103
|
-
|
|
103
|
+
districtName: t.name,
|
|
104
|
+
subDistrictId: "",
|
|
105
|
+
subDistrictName: ""
|
|
104
106
|
}
|
|
105
107
|
});
|
|
106
|
-
}), t.subDistricts.forEach((
|
|
107
|
-
|
|
108
|
+
}), t.subDistricts.forEach((i) => {
|
|
109
|
+
i.signals.forEach((s) => {
|
|
108
110
|
s.longitude && s.latitude && !isNaN(s.longitude) && !isNaN(s.latitude) && this.locations.push({
|
|
109
111
|
id: s.id,
|
|
110
112
|
x: s.longitude,
|
|
@@ -115,7 +117,9 @@ class C {
|
|
|
115
117
|
properties: {
|
|
116
118
|
...s,
|
|
117
119
|
districtId: t.id,
|
|
118
|
-
|
|
120
|
+
districtName: t.name,
|
|
121
|
+
subDistrictId: i.id,
|
|
122
|
+
subDistrictName: i.name
|
|
119
123
|
}
|
|
120
124
|
});
|
|
121
125
|
});
|
|
@@ -137,7 +141,7 @@ class C {
|
|
|
137
141
|
*/
|
|
138
142
|
clearCrosses() {
|
|
139
143
|
var e;
|
|
140
|
-
|
|
144
|
+
this.crossLayer.removeAll(), this.locations = [], this.clusteredLocations = [], (e = this.zoomWatchHandle) == null || e.remove();
|
|
141
145
|
}
|
|
142
146
|
/**
|
|
143
147
|
* 更新散点符号
|
|
@@ -174,16 +178,42 @@ class C {
|
|
|
174
178
|
const e = [];
|
|
175
179
|
this.locations.forEach((t) => {
|
|
176
180
|
if (!t.filtered) {
|
|
177
|
-
const
|
|
181
|
+
const i = new u({
|
|
178
182
|
geometry: {
|
|
179
183
|
type: "point",
|
|
180
184
|
longitude: t.x,
|
|
181
185
|
latitude: t.y
|
|
182
186
|
},
|
|
183
187
|
symbol: this.getCrossSymbol(t.properties),
|
|
184
|
-
attributes: t.properties
|
|
188
|
+
attributes: t.properties,
|
|
189
|
+
popupTemplate: {
|
|
190
|
+
title: "{name}信号机",
|
|
191
|
+
content: [
|
|
192
|
+
{
|
|
193
|
+
type: "fields",
|
|
194
|
+
fieldInfos: [
|
|
195
|
+
{
|
|
196
|
+
fieldName: "signalId",
|
|
197
|
+
label: "信号机编号"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
fieldName: "nodeId",
|
|
201
|
+
label: "路口编号"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
fieldName: "districtName",
|
|
205
|
+
label: "区控名称"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
fieldName: "subDistrictName",
|
|
209
|
+
label: "子区名称"
|
|
210
|
+
}
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
185
215
|
});
|
|
186
|
-
e.push(
|
|
216
|
+
e.push(i);
|
|
187
217
|
}
|
|
188
218
|
}), this.crossLayer.addMany(e);
|
|
189
219
|
}
|
|
@@ -196,17 +226,17 @@ class C {
|
|
|
196
226
|
filter(e) {
|
|
197
227
|
this.locations.forEach((t) => {
|
|
198
228
|
if (e.type === "district")
|
|
199
|
-
t.filtered = t.properties.districtId
|
|
229
|
+
t.filtered = t.properties.districtId !== e.id;
|
|
200
230
|
else if (e.type === "subDistrict")
|
|
201
|
-
t.filtered = t.properties.subDistrictId
|
|
202
|
-
else if (e.type === "signal" && (t.filtered = t.id
|
|
231
|
+
t.filtered = t.properties.subDistrictId !== e.id;
|
|
232
|
+
else if (e.type === "signal" && (t.filtered = t.id !== e.id, t.filtered))
|
|
203
233
|
return t.properties;
|
|
204
234
|
});
|
|
205
235
|
}
|
|
206
236
|
resetFilter() {
|
|
207
237
|
this.locations.forEach((e) => {
|
|
208
238
|
e.filtered = !1;
|
|
209
|
-
});
|
|
239
|
+
}), this.currentShowMode === "scatter" ? this.showScatter() : this.currentShowMode === "cluster" && this.showCluster();
|
|
210
240
|
}
|
|
211
241
|
/**
|
|
212
242
|
* 根据当前比例尺更新路口符号
|
|
@@ -330,7 +360,7 @@ class C {
|
|
|
330
360
|
* @returns
|
|
331
361
|
*/
|
|
332
362
|
getNeighbors(e, t) {
|
|
333
|
-
return this.clusteredLocations.filter((
|
|
363
|
+
return this.clusteredLocations.filter((i) => i.id === e.id || i.visited ? !1 : this.getDistance(e, i) <= t);
|
|
334
364
|
}
|
|
335
365
|
/**
|
|
336
366
|
* 两点间的像素距离
|
|
@@ -352,24 +382,24 @@ class C {
|
|
|
352
382
|
const e = {}, t = [];
|
|
353
383
|
for (const s of this.clusteredLocations)
|
|
354
384
|
s.clusterId === void 0 || s.clusterId === -1 ? t.push(s) : (e[s.clusterId] || (e[s.clusterId] = []), e[s.clusterId].push(s));
|
|
355
|
-
const
|
|
356
|
-
const o = e[Number(s)], a = o.length, l = o.reduce((n,
|
|
385
|
+
const i = Object.keys(e).map((s, r) => {
|
|
386
|
+
const o = e[Number(s)], a = o.length, l = o.reduce((n, m) => n + m.x, 0), c = o.reduce((n, m) => n + m.y, 0), y = l / a, d = c / a;
|
|
357
387
|
return {
|
|
358
388
|
id: Number(s),
|
|
359
389
|
items: o,
|
|
360
390
|
count: a,
|
|
361
391
|
center: {
|
|
362
|
-
x:
|
|
363
|
-
y:
|
|
392
|
+
x: y,
|
|
393
|
+
y: d
|
|
364
394
|
}
|
|
365
395
|
};
|
|
366
396
|
});
|
|
367
|
-
return t.length > 0 &&
|
|
397
|
+
return t.length > 0 && i.push({
|
|
368
398
|
id: -1,
|
|
369
399
|
items: t,
|
|
370
400
|
count: t.length,
|
|
371
401
|
center: null
|
|
372
|
-
}),
|
|
402
|
+
}), i;
|
|
373
403
|
}
|
|
374
404
|
/**
|
|
375
405
|
* 按照像素距离聚类
|
|
@@ -380,13 +410,13 @@ class C {
|
|
|
380
410
|
*/
|
|
381
411
|
doPixelCluster(e) {
|
|
382
412
|
let t = 0;
|
|
383
|
-
for (let
|
|
384
|
-
const s = this.clusteredLocations[
|
|
413
|
+
for (let i = 0; i < this.clusteredLocations.length; i++) {
|
|
414
|
+
const s = this.clusteredLocations[i];
|
|
385
415
|
if (s.visited)
|
|
386
416
|
continue;
|
|
387
417
|
s.visited = !0;
|
|
388
|
-
const
|
|
389
|
-
|
|
418
|
+
const r = this.getNeighbors(s, e);
|
|
419
|
+
r.length < this.minClusterPoints ? s.clusterId = -1 : (r.forEach((o) => {
|
|
390
420
|
o.visited = !0, o.clusterId = t;
|
|
391
421
|
}), s.clusterId = t, t++);
|
|
392
422
|
}
|
|
@@ -394,13 +424,13 @@ class C {
|
|
|
394
424
|
}
|
|
395
425
|
showClusterResult(e) {
|
|
396
426
|
this.crossLayer.removeAll();
|
|
397
|
-
let t = Number.MIN_VALUE,
|
|
427
|
+
let t = Number.MIN_VALUE, i = Number.MAX_VALUE;
|
|
398
428
|
e.forEach((s) => {
|
|
399
|
-
s.count > 1 && (
|
|
429
|
+
s.count > 1 && (i = Math.min(i, s.count), t = Math.max(t, s.count));
|
|
400
430
|
}), e.forEach((s) => {
|
|
401
431
|
if (s.id !== -1) {
|
|
402
|
-
let
|
|
403
|
-
|
|
432
|
+
let r = i === t ? (this.maxClusterSymbolSize + this.minClusterSymbolSize) / 2 : this.minClusterSymbolSize + (s.count - i) / (t - i) * (this.maxClusterSymbolSize - this.minClusterSymbolSize);
|
|
433
|
+
r *= 0.75;
|
|
404
434
|
const l = (s.count.toString().length * 8 + 6) / 2, c = new u({
|
|
405
435
|
geometry: new h({ x: s.center.x, y: s.center.y }),
|
|
406
436
|
attributes: {
|
|
@@ -430,7 +460,7 @@ class C {
|
|
|
430
460
|
// 聚合数量
|
|
431
461
|
{
|
|
432
462
|
type: "CIMVectorMarker",
|
|
433
|
-
size:
|
|
463
|
+
size: r,
|
|
434
464
|
colorLocked: !0,
|
|
435
465
|
anchorPointUnits: "Relative",
|
|
436
466
|
frame: { xmin: -16, ymin: -16, xmax: 16, ymax: 16 },
|
|
@@ -504,7 +534,7 @@ class C {
|
|
|
504
534
|
y: 0
|
|
505
535
|
},
|
|
506
536
|
anchorPointUnits: "Relative",
|
|
507
|
-
size:
|
|
537
|
+
size: r,
|
|
508
538
|
rotateClockwise: !0,
|
|
509
539
|
textureFilter: "Picture",
|
|
510
540
|
url: "/GisViewerAssets/Images/cross/gis_xhj_blue.png"
|
|
@@ -516,16 +546,42 @@ class C {
|
|
|
516
546
|
});
|
|
517
547
|
this.crossLayer.add(c);
|
|
518
548
|
} else
|
|
519
|
-
s.items.forEach((
|
|
549
|
+
s.items.forEach((r) => {
|
|
520
550
|
const o = new u({
|
|
521
|
-
geometry: new h({ x:
|
|
551
|
+
geometry: new h({ x: r.x, y: r.y }),
|
|
522
552
|
attributes: {
|
|
523
|
-
...
|
|
524
|
-
...
|
|
553
|
+
...r,
|
|
554
|
+
...r.properties,
|
|
525
555
|
type: "clusterPoint",
|
|
526
|
-
id:
|
|
556
|
+
id: r.id
|
|
527
557
|
},
|
|
528
|
-
symbol: this.crossGraphicSymbol
|
|
558
|
+
symbol: this.crossGraphicSymbol,
|
|
559
|
+
popupTemplate: {
|
|
560
|
+
title: "{name}信号机",
|
|
561
|
+
content: [
|
|
562
|
+
{
|
|
563
|
+
type: "fields",
|
|
564
|
+
fieldInfos: [
|
|
565
|
+
{
|
|
566
|
+
fieldName: "signalId",
|
|
567
|
+
label: "信号机编号"
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
fieldName: "nodeId",
|
|
571
|
+
label: "路口编号"
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
fieldName: "districtName",
|
|
575
|
+
label: "区控名称"
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
fieldName: "subDistrictName",
|
|
579
|
+
label: "子区名称"
|
|
580
|
+
}
|
|
581
|
+
]
|
|
582
|
+
}
|
|
583
|
+
]
|
|
584
|
+
}
|
|
529
585
|
});
|
|
530
586
|
this.crossLayer.add(o);
|
|
531
587
|
});
|
|
@@ -533,5 +589,5 @@ class C {
|
|
|
533
589
|
}
|
|
534
590
|
}
|
|
535
591
|
export {
|
|
536
|
-
|
|
592
|
+
x as default
|
|
537
593
|
};
|
package/es/src/gis-map/utils/signal-control-area/{show-area.mjs → signal-area-controller.mjs}
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import c from "../../stores/index.mjs";
|
|
2
|
+
import o from "./cross-renderer.mjs";
|
|
3
3
|
import r from "./district-controller.mjs";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import a from "./district-renderer.mjs";
|
|
5
|
+
import l from "./signal-renderer.mjs";
|
|
6
6
|
import d from "./sub-district-renderer.mjs";
|
|
7
7
|
class f {
|
|
8
8
|
// private roadLines!: IRoadLine[];
|
|
9
9
|
constructor(t) {
|
|
10
10
|
this.view = t;
|
|
11
|
-
const s =
|
|
12
|
-
this.mapConfig = JSON.parse(JSON.stringify(s.mapConfig)), this.districtRenderer = new
|
|
11
|
+
const s = c.useAppDataStore;
|
|
12
|
+
this.mapConfig = JSON.parse(JSON.stringify(s.mapConfig)), this.districtRenderer = new a(t), this.subDistrictRenderer = new d(t), this.signalRenderer = new l(t), this.crossRenderer = new o(t);
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* 显示所有区控、子区、信号机
|
|
@@ -26,7 +26,7 @@ class f {
|
|
|
26
26
|
);
|
|
27
27
|
s.push(n), e.push(...n.subDistricts);
|
|
28
28
|
}
|
|
29
|
-
return this.districtRenderer.style = t.style || "", await this.districtRenderer.showDistricts(s), await this.subDistrictRenderer.showSubDistricts(e),
|
|
29
|
+
return this.districtRenderer.style = t.style || "", await this.districtRenderer.showDistricts(s), await this.subDistrictRenderer.showSubDistricts(e), this.crossRenderer.addCrosses(s), { status: 0, message: "ok" };
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* 显示单个区控
|
|
@@ -65,7 +65,7 @@ class f {
|
|
|
65
65
|
* @returns
|
|
66
66
|
*/
|
|
67
67
|
async clearSignalControlArea() {
|
|
68
|
-
return this.crossRenderer.clearCrosses(), await this.districtRenderer.clearDistricts(), await this.subDistrictRenderer.clearSubDistricts(),
|
|
68
|
+
return this.crossRenderer.clearCrosses(), await this.districtRenderer.clearDistricts(), await this.subDistrictRenderer.clearSubDistricts(), this.crossRenderer.clearCrosses(), { status: 0, message: "ok" };
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* 设置区控、子区、信号机图层可见性
|
|
@@ -114,10 +114,10 @@ class f {
|
|
|
114
114
|
async highlightSignalControlArea(t) {
|
|
115
115
|
switch (this.view.closePopup(), t.type) {
|
|
116
116
|
case "district":
|
|
117
|
-
return await this.districtRenderer.highlightDistrict(t) ? (this.subDistrictRenderer.filter(t), this.
|
|
117
|
+
return await this.districtRenderer.highlightDistrict(t) ? (this.subDistrictRenderer.filter(t), this.crossRenderer.filter(t), await this.subDistrictRenderer.showRoads(t), { status: 0, message: "ok" }) : { status: 1, message: "未找到区控" };
|
|
118
118
|
case "subDistrict": {
|
|
119
119
|
const { count: s, parentId: e } = await this.subDistrictRenderer.highlightSubDistrict(t);
|
|
120
|
-
return s > 0 ? (this.districtRenderer.filter(e), this.
|
|
120
|
+
return s > 0 ? (this.districtRenderer.filter(e), this.crossRenderer.filter(t), { status: 0, message: "ok" }) : { status: 1, message: "未找到子区" };
|
|
121
121
|
}
|
|
122
122
|
case "signal": {
|
|
123
123
|
const { districtId: s, subDistrictId: e, count: i } = await this.signalRenderer.highlightSignal(t.id);
|
|
@@ -132,7 +132,7 @@ class f {
|
|
|
132
132
|
* @returns
|
|
133
133
|
*/
|
|
134
134
|
async resetHighlight() {
|
|
135
|
-
return this.districtRenderer.resetFilter(), this.subDistrictRenderer.resetFilter(), this.
|
|
135
|
+
return this.districtRenderer.resetFilter(), this.subDistrictRenderer.resetFilter(), this.crossRenderer.resetFilter(), { status: 0, message: "ok" };
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
export {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IResult, IShowSignalCrossParams } from 'packages/components/src/types';
|
|
2
|
+
/**
|
|
3
|
+
* 信控路口
|
|
4
|
+
*/
|
|
5
|
+
export default class SignalCrossController {
|
|
6
|
+
private view;
|
|
7
|
+
private crossLayer;
|
|
8
|
+
private readonly symbolScale;
|
|
9
|
+
private scaleWatchHandle;
|
|
10
|
+
private showName;
|
|
11
|
+
private showStyle;
|
|
12
|
+
constructor(view: __esri.MapView | __esri.SceneView);
|
|
13
|
+
/**
|
|
14
|
+
* 显示信控路口
|
|
15
|
+
* @param params
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
showSignalCross(params: IShowSignalCrossParams): IResult;
|
|
19
|
+
clearSignalCross(): void;
|
|
20
|
+
private getBrandLabel;
|
|
21
|
+
private getOnlineLabel;
|
|
22
|
+
private getMalfunctionLabel;
|
|
23
|
+
private getCrossSymbol;
|
|
24
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import o from "@arcgis/core/Graphic";
|
|
2
|
+
import n from "@arcgis/core/layers/GraphicsLayer";
|
|
3
|
+
class b {
|
|
4
|
+
constructor(e) {
|
|
5
|
+
this.symbolScale = 6e3, this.showName = "signalId", this.showStyle = "scatter", this.view = e, this.crossLayer = new n({
|
|
6
|
+
id: "signal-control-cross-layer",
|
|
7
|
+
title: "信控路口图层"
|
|
8
|
+
}), this.view.map.add(this.crossLayer);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 显示信控路口
|
|
12
|
+
* @param params
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
showSignalCross(e) {
|
|
16
|
+
if (this.crossLayer.removeAll(), this.showName = e.showName || "signalId", this.showStyle = e.style || "scatter", this.scaleWatchHandle || (this.scaleWatchHandle = this.view.watch("scale", (t, i) => {
|
|
17
|
+
(t <= this.symbolScale && i > this.symbolScale || t > this.symbolScale && i <= this.symbolScale) && this.crossLayer.graphics.forEach((l) => {
|
|
18
|
+
const s = l.attributes;
|
|
19
|
+
l.symbol = this.getCrossSymbol(s);
|
|
20
|
+
});
|
|
21
|
+
})), this.showStyle === "scatter") {
|
|
22
|
+
const t = e.points.map((i) => {
|
|
23
|
+
const l = this.getCrossSymbol(i), s = this.getBrandLabel(i.brand), a = this.getOnlineLabel(i.isOnline), r = this.getMalfunctionLabel(
|
|
24
|
+
i.isMalfunction
|
|
25
|
+
);
|
|
26
|
+
return new o({
|
|
27
|
+
geometry: {
|
|
28
|
+
type: "point",
|
|
29
|
+
longitude: i.x,
|
|
30
|
+
latitude: i.y
|
|
31
|
+
},
|
|
32
|
+
symbol: l,
|
|
33
|
+
attributes: {
|
|
34
|
+
type: "signal-cross",
|
|
35
|
+
id: i.crossId,
|
|
36
|
+
brandLabel: s,
|
|
37
|
+
isOnlineLabel: a,
|
|
38
|
+
isMalfunctionLabel: r,
|
|
39
|
+
...i
|
|
40
|
+
},
|
|
41
|
+
popupTemplate: {
|
|
42
|
+
title: "{name}信号机",
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: "fields",
|
|
46
|
+
fieldInfos: [
|
|
47
|
+
{
|
|
48
|
+
fieldName: "signalId",
|
|
49
|
+
label: "信号机编号"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
fieldName: "crossId",
|
|
53
|
+
label: "路口编号"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
fieldName: "brandLabel",
|
|
57
|
+
label: "品牌"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
fieldName: "isOnlineLabel",
|
|
61
|
+
label: "是否在线"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
fieldName: "isMalfunctionLabel",
|
|
65
|
+
label: "是否故障"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
this.crossLayer.addMany(t);
|
|
74
|
+
}
|
|
75
|
+
return { status: 0, message: "ok" };
|
|
76
|
+
}
|
|
77
|
+
clearSignalCross() {
|
|
78
|
+
var e;
|
|
79
|
+
this.crossLayer.removeAll(), (e = this.scaleWatchHandle) == null || e.remove(), this.scaleWatchHandle = null;
|
|
80
|
+
}
|
|
81
|
+
getBrandLabel(e) {
|
|
82
|
+
const t = (e ?? "").toLowerCase();
|
|
83
|
+
return t === "scats" ? "SCATS" : t === "gc" ? "国产" : e ?? "";
|
|
84
|
+
}
|
|
85
|
+
getOnlineLabel(e) {
|
|
86
|
+
return e ? "在线" : "离线";
|
|
87
|
+
}
|
|
88
|
+
getMalfunctionLabel(e) {
|
|
89
|
+
return e ? "故障" : "正常";
|
|
90
|
+
}
|
|
91
|
+
getCrossSymbol(e) {
|
|
92
|
+
if (this.view.scale <= this.symbolScale) {
|
|
93
|
+
let t = "/GisViewerAssets/Images/cross/ic_";
|
|
94
|
+
return t += e.brand === "scats" ? "scats_" : "gc_", t += e.isOnline ? "online_" : "offline_", t += e.isMalfunction ? "malfunction.png" : "normal.png", {
|
|
95
|
+
type: "cim",
|
|
96
|
+
data: {
|
|
97
|
+
type: "CIMSymbolReference",
|
|
98
|
+
primitiveOverrides: [
|
|
99
|
+
{
|
|
100
|
+
// 将textGraphic的TextString替换为graphic.attributes.name
|
|
101
|
+
type: "CIMPrimitiveOverride",
|
|
102
|
+
primitiveName: "textGraphic",
|
|
103
|
+
propertyName: "TextString",
|
|
104
|
+
valueExpressionInfo: {
|
|
105
|
+
type: "CIMExpressionInfo",
|
|
106
|
+
title: "Custom",
|
|
107
|
+
expression: this.showName === "signalId" ? 'Replace($feature.name, "与", "/") + " " + $feature.signalId' : 'Replace($feature.name, "与", "/") + " " + $feature.crossId',
|
|
108
|
+
returnType: "Default"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
symbol: {
|
|
113
|
+
type: "CIMPointSymbol",
|
|
114
|
+
symbolLayers: [
|
|
115
|
+
// 路口名称
|
|
116
|
+
{
|
|
117
|
+
type: "CIMVectorMarker",
|
|
118
|
+
size: 25,
|
|
119
|
+
colorLocked: !0,
|
|
120
|
+
anchorPointUnits: "Relative",
|
|
121
|
+
frame: { xmin: -16, ymin: -16, xmax: 16, ymax: 16 },
|
|
122
|
+
markerGraphics: [
|
|
123
|
+
{
|
|
124
|
+
type: "CIMMarkerGraphic",
|
|
125
|
+
primitiveName: "textGraphic",
|
|
126
|
+
geometry: { x: 0, y: 0 },
|
|
127
|
+
symbol: {
|
|
128
|
+
type: "CIMTextSymbol",
|
|
129
|
+
height: 12,
|
|
130
|
+
horizontalAlignment: "Center",
|
|
131
|
+
offsetX: 0,
|
|
132
|
+
offsetY: 20,
|
|
133
|
+
haloSize: 1,
|
|
134
|
+
haloSymbol: {
|
|
135
|
+
type: "CIMPolygonSymbol",
|
|
136
|
+
symbolLayers: [
|
|
137
|
+
{
|
|
138
|
+
type: "CIMSolidFill",
|
|
139
|
+
enable: !0,
|
|
140
|
+
color: [255, 255, 255, 255]
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
symbol: {
|
|
145
|
+
type: "CIMPolygonSymbol",
|
|
146
|
+
symbolLayers: [
|
|
147
|
+
{
|
|
148
|
+
type: "CIMSolidFill",
|
|
149
|
+
enable: !0,
|
|
150
|
+
color: [0, 0, 0, 255]
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
verticalAlignment: "Center"
|
|
155
|
+
},
|
|
156
|
+
textString: ""
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
scaleSymbolsProportionally: !0,
|
|
160
|
+
respectFrame: !0
|
|
161
|
+
},
|
|
162
|
+
// 路口图标
|
|
163
|
+
{
|
|
164
|
+
type: "CIMPictureMarker",
|
|
165
|
+
enable: !0,
|
|
166
|
+
anchorPoint: {
|
|
167
|
+
x: 0,
|
|
168
|
+
y: 0
|
|
169
|
+
},
|
|
170
|
+
anchorPointUnits: "Relative",
|
|
171
|
+
size: 20,
|
|
172
|
+
rotateClockwise: !0,
|
|
173
|
+
textureFilter: "Picture",
|
|
174
|
+
url: t
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
} else {
|
|
181
|
+
const t = {
|
|
182
|
+
type: "simple-marker",
|
|
183
|
+
style: "circle",
|
|
184
|
+
size: 6,
|
|
185
|
+
outline: { width: 0 }
|
|
186
|
+
};
|
|
187
|
+
return e.brand.toLowerCase() === "scats" ? (e.isOnline ? t.color = [23, 169, 100] : t.color = [202, 202, 202], t.outline.color = [23, 169, 100]) : e.isOnline ? t.color = [33, 240, 142] : t.color = [202, 202, 202], t;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export {
|
|
192
|
+
b as default
|
|
193
|
+
};
|
package/es/src/types/index.d.ts
CHANGED
|
@@ -309,6 +309,21 @@ export interface IShowSignalControlAreaParams {
|
|
|
309
309
|
areaList: any[];
|
|
310
310
|
style?: string;
|
|
311
311
|
}
|
|
312
|
+
export interface ISignalCross {
|
|
313
|
+
signalId: string;
|
|
314
|
+
crossId: string;
|
|
315
|
+
name: string;
|
|
316
|
+
brand: string;
|
|
317
|
+
isOnline: boolean;
|
|
318
|
+
isMalfunction: boolean;
|
|
319
|
+
x: number;
|
|
320
|
+
y: number;
|
|
321
|
+
}
|
|
322
|
+
export interface IShowSignalCrossParams {
|
|
323
|
+
style: string;
|
|
324
|
+
showName: string;
|
|
325
|
+
points: ISignalCross[];
|
|
326
|
+
}
|
|
312
327
|
export interface IDistrictRoad {
|
|
313
328
|
id: string;
|
|
314
329
|
coordinates: number[][];
|
|
@@ -12,7 +12,8 @@ import PoliceJurisdiction from './utils/police-jurisdiction';
|
|
|
12
12
|
import QueueLength from './utils/queue-length';
|
|
13
13
|
import RoadConfigTool from './utils/road-config-tool';
|
|
14
14
|
import EditSignalArea from './utils/signal-control-area/edit-area';
|
|
15
|
-
import
|
|
15
|
+
import SignalAreaController from './utils/signal-control-area/signal-area-controller';
|
|
16
|
+
import SignalCrossController from './utils/signal-control-area/signal-cross-controller';
|
|
16
17
|
import TrafficFlow from './utils/traffic-flow';
|
|
17
18
|
declare const _sfc_main: import("vue").DefineComponent<{
|
|
18
19
|
config: {
|
|
@@ -34,7 +35,8 @@ declare const _sfc_main: import("vue").DefineComponent<{
|
|
|
34
35
|
queueLength: QueueLength;
|
|
35
36
|
openDriveRenderer: OpenDriveRenderer;
|
|
36
37
|
editSignalAreaController: EditSignalArea;
|
|
37
|
-
|
|
38
|
+
signalAreaController: SignalAreaController;
|
|
39
|
+
signalCrossController: SignalCrossController;
|
|
38
40
|
greenWaveBandController: GreenWaveBandController;
|
|
39
41
|
policeJurisdictionController: PoliceJurisdiction;
|
|
40
42
|
edpassDeviceController: EdpassDeviceController;
|
|
@@ -150,7 +152,7 @@ declare const _sfc_main: import("vue").DefineComponent<{
|
|
|
150
152
|
status: number;
|
|
151
153
|
message: string;
|
|
152
154
|
}>;
|
|
153
|
-
clearBlockOpenDriveLane: () => void | {
|
|
155
|
+
clearBlockOpenDriveLane: (params: IBlockOpenDriveLaneParams) => void | {
|
|
154
156
|
status: number;
|
|
155
157
|
message: string;
|
|
156
158
|
};
|
|
@@ -186,6 +188,11 @@ declare const _sfc_main: import("vue").DefineComponent<{
|
|
|
186
188
|
status: number;
|
|
187
189
|
message: string;
|
|
188
190
|
} | undefined;
|
|
191
|
+
showSignalCross: (params: any) => import("../types").IResult;
|
|
192
|
+
clearSignalCross: () => void | {
|
|
193
|
+
status: number;
|
|
194
|
+
message: string;
|
|
195
|
+
};
|
|
189
196
|
addGreenWaveBand: (params: IEditSignalControlAreaParams) => void;
|
|
190
197
|
stopAddGreenWaveBand: () => {
|
|
191
198
|
status: number;
|