gisviewer-vue3-arcgis 1.0.227 → 1.0.229

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 (40) hide show
  1. package/es/src/gis-map/gis-map.vue.d.ts +8 -2
  2. package/es/src/gis-map/gis-map.vue.mjs +2 -2
  3. package/es/src/gis-map/index.d.ts +2 -2
  4. package/es/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/district-controller.d.ts +2 -1
  5. package/es/src/gis-map/utils/signal-control-area/district-controller.mjs +45 -0
  6. package/es/src/gis-map/utils/signal-control-area/district-renderer.d.ts +40 -0
  7. package/es/src/gis-map/utils/signal-control-area/district-renderer.mjs +123 -0
  8. package/es/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/layer-symbol.d.ts +8 -1
  9. package/es/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/layer-symbol.mjs +74 -56
  10. package/es/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/show-area.d.ts +4 -14
  11. package/es/src/gis-map/utils/signal-control-area/show-area.mjs +397 -0
  12. package/es/src/gis-map/utils/signal-control-area/signal-renderer.d.ts +22 -0
  13. package/es/src/gis-map/utils/signal-control-area/signal-renderer.mjs +124 -0
  14. package/es/src/gis-map/utils/signal-control-area/sub-district-renderer.d.ts +27 -0
  15. package/es/src/gis-map/utils/signal-control-area/sub-district-renderer.mjs +142 -0
  16. package/lib/src/gis-map/gis-map.vue.d.ts +8 -2
  17. package/lib/src/gis-map/gis-map.vue.js +1 -1
  18. package/lib/src/gis-map/index.d.ts +2 -2
  19. package/lib/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/district-controller.d.ts +2 -1
  20. package/lib/src/gis-map/utils/signal-control-area/district-controller.js +1 -0
  21. package/lib/src/gis-map/utils/signal-control-area/district-renderer.d.ts +40 -0
  22. package/lib/src/gis-map/utils/signal-control-area/district-renderer.js +1 -0
  23. package/lib/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/layer-symbol.d.ts +8 -1
  24. package/lib/src/gis-map/utils/signal-control-area/layer-symbol.js +1 -0
  25. package/lib/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/show-area.d.ts +4 -14
  26. package/lib/src/gis-map/utils/signal-control-area/show-area.js +1 -0
  27. package/lib/src/gis-map/utils/signal-control-area/signal-renderer.d.ts +22 -0
  28. package/lib/src/gis-map/utils/signal-control-area/signal-renderer.js +1 -0
  29. package/lib/src/gis-map/utils/signal-control-area/sub-district-renderer.d.ts +27 -0
  30. package/lib/src/gis-map/utils/signal-control-area/sub-district-renderer.js +1 -0
  31. package/package.json +1 -1
  32. package/es/src/gis-map/utils/signal-control-area-controller/district-controller.mjs +0 -38
  33. package/es/src/gis-map/utils/signal-control-area-controller/show-area.mjs +0 -454
  34. package/lib/src/gis-map/utils/signal-control-area-controller/district-controller.js +0 -1
  35. package/lib/src/gis-map/utils/signal-control-area-controller/layer-symbol.js +0 -1
  36. package/lib/src/gis-map/utils/signal-control-area-controller/show-area.js +0 -1
  37. /package/es/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/edit-area.d.ts +0 -0
  38. /package/es/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/edit-area.mjs +0 -0
  39. /package/lib/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/edit-area.d.ts +0 -0
  40. /package/lib/src/gis-map/utils/{signal-control-area-controller → signal-control-area}/edit-area.js +0 -0
@@ -0,0 +1,142 @@
1
+ import n from "@arcgis/core/Graphic";
2
+ import o from "@arcgis/core/layers/FeatureLayer";
3
+ import { subDistrictPointLayerOptions as c } from "./layer-symbol.mjs";
4
+ class b {
5
+ constructor(t, i) {
6
+ this.view = t, this.hasGpu = i, this.subDistrictPointLayer = new o(
7
+ c
8
+ ), this.subDistrictPointLayer.spatialReference = t.spatialReference, this.subDistrictPointLayer.popupEnabled = !0, this.view.map.add(this.subDistrictPointLayer);
9
+ }
10
+ async showSubDistricts(t) {
11
+ await this.clearSubDistricts();
12
+ let i = 0;
13
+ const s = [], r = [];
14
+ t.forEach((e) => {
15
+ r.push({
16
+ value: e.id,
17
+ label: e.name,
18
+ symbol: {
19
+ type: "simple-marker",
20
+ style: "circle",
21
+ color: [0, 0, 0, 0],
22
+ // color: [...controller.areaColor, 0.5],
23
+ size: "8px",
24
+ outline: {
25
+ color: [...e.areaColor],
26
+ width: 4
27
+ }
28
+ }
29
+ }), e.signals.forEach((a) => {
30
+ const u = new n({
31
+ geometry: {
32
+ type: "point",
33
+ longitude: a.longitude,
34
+ latitude: a.latitude
35
+ },
36
+ attributes: {
37
+ ObjectID: i++,
38
+ id: a.id,
39
+ name: a.name,
40
+ subDistrictId: e.id,
41
+ subDistrictName: e.name,
42
+ districtId: e.parentId,
43
+ districtName: e.parentName,
44
+ signalCount: e.signalCount
45
+ }
46
+ });
47
+ s.push(u);
48
+ });
49
+ }), this.subDistrictPointLayer.renderer = {
50
+ type: "unique-value",
51
+ field: "subDistrictId",
52
+ defaultSymbol: {
53
+ type: "simple-marker",
54
+ color: "gray",
55
+ size: "8px",
56
+ outline: {
57
+ color: "white",
58
+ width: 1
59
+ }
60
+ },
61
+ defaultLabel: "其他子区",
62
+ uniqueValueInfos: r,
63
+ visualVariables: [
64
+ {
65
+ type: "size",
66
+ valueExpression: "$view.scale",
67
+ stops: [
68
+ {
69
+ size: 24,
70
+ value: 2500
71
+ },
72
+ {
73
+ size: 20,
74
+ value: 5e3
75
+ },
76
+ {
77
+ size: 8,
78
+ value: 18055.954822000003
79
+ },
80
+ {
81
+ size: 4,
82
+ value: 144447.638572
83
+ },
84
+ {
85
+ size: 2,
86
+ value: 1155581108577e-6
87
+ }
88
+ ]
89
+ }
90
+ ]
91
+ }, await this.subDistrictPointLayer.applyEdits({
92
+ addFeatures: s
93
+ }), await this.view.goTo(s, {
94
+ duration: this.hasGpu ? 1e3 : 0
95
+ });
96
+ }
97
+ async clearSubDistricts() {
98
+ const t = await this.subDistrictPointLayer.queryFeatures();
99
+ t.features.length > 0 && await this.subDistrictPointLayer.applyEdits({
100
+ deleteFeatures: t.features
101
+ }), this.subDistrictPointLayer.definitionExpression = "1=1";
102
+ }
103
+ setVisible(t) {
104
+ this.subDistrictPointLayer.visible = t;
105
+ }
106
+ /**
107
+ * 定位子区
108
+ * @param id 子区ID
109
+ */
110
+ async locateSubDistrict(t) {
111
+ const i = this.subDistrictPointLayer.createQuery();
112
+ i.where = `subDistrictId = '${t}'`, i.returnGeometry = !0;
113
+ const s = await this.subDistrictPointLayer.queryFeatures(i);
114
+ return s.features.length > 0 ? (await this.view.goTo(s.features, {
115
+ duration: this.hasGpu ? 1e3 : 0
116
+ }), { status: 0, message: "ok" }) : { status: 1, message: "未找到区控" };
117
+ }
118
+ /**
119
+ * 高亮子区, 其他子区隐藏
120
+ * @param id 子区ID
121
+ * @return 返回高亮子区的数量以及区控id
122
+ */
123
+ async highlightSubDistrict(t) {
124
+ let i = "";
125
+ const s = this.subDistrictPointLayer.definitionExpression;
126
+ this.subDistrictPointLayer.definitionExpression = `subDistrictId = '${t}'`;
127
+ const r = await this.subDistrictPointLayer.queryFeatures(), e = r.features.length;
128
+ return e > 0 ? (i = r.features[0].attributes.districtId, await this.view.goTo(r.features, {
129
+ duration: this.hasGpu ? 1e3 : 0
130
+ })) : this.subDistrictPointLayer.definitionExpression = s, { count: e, parentId: i };
131
+ }
132
+ filter(t, i) {
133
+ const s = `${t === "district" ? "districtId" : "subDistrictId"} = '${i}'`;
134
+ this.subDistrictPointLayer.definitionExpression = s;
135
+ }
136
+ resetFilter() {
137
+ this.subDistrictPointLayer.definitionExpression = "1=1";
138
+ }
139
+ }
140
+ export {
141
+ b as default
142
+ };
@@ -8,8 +8,8 @@ import OpenDriveRenderer from './utils/open-drive-renderer';
8
8
  import Overlay from './utils/overlay';
9
9
  import QueueLength from './utils/queue-length';
10
10
  import RoadConfigTool from './utils/road-config-tool';
11
- import EditSignalArea from './utils/signal-control-area-controller/edit-area';
12
- import ShowSignalArea from './utils/signal-control-area-controller/show-area';
11
+ import EditSignalArea from './utils/signal-control-area/edit-area';
12
+ import ShowSignalArea from './utils/signal-control-area/show-area';
13
13
  import TrafficFlow from './utils/traffic-flow';
14
14
  declare const _sfc_main: import("vue").DefineComponent<{
15
15
  config: {
@@ -235,6 +235,12 @@ declare const _sfc_main: import("vue").DefineComponent<{
235
235
  animation: string;
236
236
  }>;
237
237
  rImage: import("vue").ComputedRef<string>;
238
+ /**
239
+ * 开始坐标转换,经纬度坐标转屏幕坐标。
240
+ * @param points
241
+ * @param callback 回调函数,参数为转换后的屏幕坐标。地图移动、缩放、缩放时,会多次调用该回调函数。
242
+ * @returns handle 坐标转换句柄,用于停止坐标转换。
243
+ * */
238
244
  rNumberStyle: import("vue").ComputedRef<any>;
239
245
  rLampStyle: import("vue").ComputedRef<{
240
246
  display: string;
@@ -1 +1 @@
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 V=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,V.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 x=n.computed(()=>o),I=()=>{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:"未加载信号控制区"},Ve=()=>s?s.resetHighlight():{status:-1,message:"未加载信号控制区"},xe=e=>(u||(u=new Je.default(o)),u.showSubSignalControlArea(e)),Ie=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:x,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:Ve,showSubSignalControlArea:xe,editSubSignalControlArea:Ie,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:I}," 开始记录 "),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,flash:c.flash,"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","flash","road-id","cross-id","map-point","stop-line","position","rotation","scale","lamp-status"]))),128))]))}});exports.default=$e;
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/edit-area.js"),Xe=require("./utils/signal-control-area/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 V=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,V.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 x=n.computed(()=>o),I=()=>{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:"未加载信号控制区"},Ve=()=>s?s.resetHighlight():{status:-1,message:"未加载信号控制区"},xe=e=>(u||(u=new Je.default(o)),u.showSubSignalControlArea(e)),Ie=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:x,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:Ve,showSubSignalControlArea:xe,editSubSignalControlArea:Ie,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:I}," 开始记录 "),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,flash:c.flash,"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","flash","road-id","cross-id","map-point","stop-line","position","rotation","scale","lamp-status"]))),128))]))}});exports.default=$e;
@@ -17,8 +17,8 @@ export declare const GisMap: import("@easyest/utils/dist/lib/withinstall").SFCWi
17
17
  overlay: import("./utils/overlay").default;
18
18
  queueLength: import("./utils/queue-length").default;
19
19
  openDriveRenderer: import("./utils/open-drive-renderer").default;
20
- editSignalAreaController: import("./utils/signal-control-area-controller/edit-area").default;
21
- showSignalAreaController: import("./utils/signal-control-area-controller/show-area").default;
20
+ editSignalAreaController: import("./utils/signal-control-area/edit-area").default;
21
+ showSignalAreaController: import("./utils/signal-control-area/show-area").default;
22
22
  greenWaveBandController: import("./utils/green-wave-band-controller").default;
23
23
  showLogDiv: import("vue").Ref<boolean>;
24
24
  appDataStore: import("pinia").Store<"appData", {
@@ -15,7 +15,7 @@ export default class DistrictController {
15
15
  parentName: string;
16
16
  signals: ICross[];
17
17
  subDistricts: DistrictController[];
18
- areaColor: number[];
18
+ areaColor: [number, number, number];
19
19
  signalCount: number;
20
20
  subDistrictCount: number;
21
21
  constructor(params: any, style: string);
@@ -24,5 +24,6 @@ export default class DistrictController {
24
24
  * @returns
25
25
  */
26
26
  getAllSignalCoordinates(): number[][];
27
+ private getDarkNonGrayColor;
27
28
  }
28
29
  export {};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d=require("../common-utils.js");class e{constructor(s,n){this.parentName="",this.signals=[],this.subDistricts=[],this.areaColor=this.getDarkNonGrayColor(),this.signalCount=0,this.subDistrictCount=0,this.id=s.name,this.name=s.areaDesc,this.parentId=s.parentId,n==="alarm"&&(this.areaColor=[255,0,0]);for(const t of s.children)if(t.children){const i=new e(t,n);i.id=t.id,i.name=`SS ${t.name}`,i.parentId=this.id,i.parentName=this.name,this.subDistricts.push(i),this.subDistrictCount++,this.signalCount+=i.signalCount}else if(d.default.isCoordinateValid(t)){const i={id:t.id,name:t.name,parentId:t.parentId,latitude:Number(t.latitude),longitude:Number(t.longitude),signalId:t.signalId,nodeId:t.nodeId,isKey:t.isKey===1};this.signals.push(i),this.signalCount++}}getAllSignalCoordinates(){const s=[];for(const n of this.signals)s.push([n.longitude,n.latitude]);for(const n of this.subDistricts)s.push(...n.getAllSignalCoordinates());return s}getDarkNonGrayColor(){const s=Math.floor(Math.random()*360),n=80+Math.random()*20,t=15+Math.random()*15,i=n/100*Math.min(t/100,1-t/100),o=r=>{const a=(r+s/30)%12,l=t/100-i*Math.max(Math.min(a-3,9-a,1),-1);return Math.round(255*l)};return[o(0),o(8),o(4)]}}exports.default=e;
@@ -0,0 +1,40 @@
1
+ import { IResult } from '../../../types';
2
+ import DistrictController from './district-controller';
3
+ export default class DistrictRenderer {
4
+ private view;
5
+ /** 区控虚线图层 */
6
+ private districtControllerDashLayer;
7
+ /** 区控实线图层,区控符号由半透明实线+不透明虚线组成 */
8
+ private districtControllerSolidLayer;
9
+ style: string;
10
+ private hasGpu;
11
+ constructor(view: __esri.MapView | __esri.SceneView, hasGpu: boolean);
12
+ /**
13
+ * 显示区控
14
+ * @param controllers 区控控制器数组
15
+ */
16
+ showDistricts(controllers: DistrictController[]): Promise<void>;
17
+ /**
18
+ * 清除区控图层
19
+ */
20
+ clearDistricts(): Promise<void>;
21
+ /**
22
+ * 设置区控图层可见性
23
+ * @param visible
24
+ */
25
+ setVisible(visible: boolean): void;
26
+ /**
27
+ * 定位区控
28
+ * @param id
29
+ * @returns
30
+ */
31
+ locateDistrict(id: string): Promise<IResult>;
32
+ /**
33
+ * 高亮区控, 其他区控隐藏
34
+ * @param id 区控ID
35
+ * @return 返回高亮区控的数量
36
+ */
37
+ highlightDistrict(id: string): Promise<number>;
38
+ filter(id: string): void;
39
+ resetFilter(): void;
40
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("@arcgis/core/Graphic"),l=require("@arcgis/core/layers/FeatureLayer"),C=require("@turf/helpers"),c=require("@turf/turf"),d=require("./layer-symbol.js");function g(o){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const e in o)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(o,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:()=>o[e]})}}return t.default=o,Object.freeze(t)}const n=g(C);class L{constructor(t,e){this.style="",this.hasGpu=!0,this.view=t,this.hasGpu=e,this.districtControllerDashLayer=new l(d.districtDashLineLayerOptions),this.districtControllerDashLayer.spatialReference=t.spatialReference,this.districtControllerSolidLayer=new l(d.districtSolidLineLayerOptions),this.districtControllerSolidLayer.spatialReference=t.spatialReference,this.districtControllerSolidLayer.popupEnabled=!0,this.view.map.addMany([this.districtControllerDashLayer,this.districtControllerSolidLayer])}async showDistricts(t){await this.clearDistricts();const e=[];for(let i=0;i<t.length;i++){const r=t[i],s=r.getAllSignalCoordinates();let a=null;if(s.length>=2)if(s.length===2)a=n.lineString(s);else{const y=n.featureCollection(s.map(p=>n.point(p)));a=c.convex(y),a||(a=n.lineString(s))}else if(s.length===1)a=n.point(s[0]);else continue;const u=c.buffer(a.geometry,200,{units:"meters"}),h=new f({geometry:{type:"polyline",paths:u.geometry.coordinates},attributes:{ObjectID:i,id:r.id,name:r.name,subDistrictCount:r.subDistrictCount,signalCount:r.signalCount,parentId:r.parentId,parentName:r.parentName,selected:this.style,type:"district"}});e.push(h)}await this.districtControllerDashLayer.applyEdits({addFeatures:e}),await this.districtControllerSolidLayer.applyEdits({addFeatures:e}),await this.view.goTo(e,{duration:this.hasGpu?1e3:0})}async clearDistricts(){let t=await this.districtControllerDashLayer.queryFeatures();await this.districtControllerDashLayer.applyEdits({deleteFeatures:t.features}),this.districtControllerDashLayer.definitionExpression="1=1",t=await this.districtControllerSolidLayer.queryFeatures(),await this.districtControllerSolidLayer.applyEdits({deleteFeatures:t.features}),this.districtControllerSolidLayer.definitionExpression="1=1"}setVisible(t){this.districtControllerDashLayer.visible=t,this.districtControllerSolidLayer.visible=t}async locateDistrict(t){const e=this.districtControllerDashLayer.createQuery();e.where=`id = '${t}'`,e.returnGeometry=!0,e.outFields=["*"];const i=await this.districtControllerDashLayer.queryFeatures(e);return i.features.length>0?(await this.view.goTo(i.features,{duration:this.hasGpu?1e3:0}),{status:0,message:"ok"}):{status:1,message:"未找到区控"}}async highlightDistrict(t){const e=this.districtControllerDashLayer.definitionExpression;this.districtControllerDashLayer.definitionExpression=`id = '${t}'`;const i=await this.districtControllerDashLayer.queryFeatures(),r=i.features.length;return r>0?(this.districtControllerSolidLayer.definitionExpression=`id = '${t}'`,await this.view.goTo(i.features,{duration:this.hasGpu?1e3:0})):this.districtControllerDashLayer.definitionExpression=e,r}filter(t){const e=`id = '${t}'`;this.districtControllerDashLayer.definitionExpression=e,this.districtControllerSolidLayer.definitionExpression=e}resetFilter(){this.districtControllerDashLayer.definitionExpression="1=1",this.districtControllerSolidLayer.definitionExpression="1=1"}}exports.default=L;
@@ -1,7 +1,14 @@
1
+ /** 区控的虚线边框图层 */
1
2
  declare const districtDashLineLayerOptions: any;
3
+ /** 区控的实线边框图层 */
2
4
  declare const districtSolidLineLayerOptions: any;
5
+ /** 子区图层 */
3
6
  declare const subDistrictLayerOptions: any;
7
+ declare const subDistrictPointLayerOptions: any;
8
+ /** 信号机圆点图层 */
4
9
  declare const signalMarkerLayerOptions: any;
10
+ /** 信号机图标图层 */
5
11
  declare const signalPictureLayerOptions: any;
12
+ /** 信号机聚合图层 */
6
13
  declare const signalClusterLayerOptions: any;
7
- export { districtDashLineLayerOptions, districtSolidLineLayerOptions, signalClusterLayerOptions, signalMarkerLayerOptions, signalPictureLayerOptions, subDistrictLayerOptions };
14
+ export { districtDashLineLayerOptions, districtSolidLineLayerOptions, signalClusterLayerOptions, signalMarkerLayerOptions, signalPictureLayerOptions, subDistrictLayerOptions, subDistrictPointLayerOptions };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e={id:"districtController",source:[],objectIdField:"ObjectID",geometryType:"polyline",outFields:["*"],fields:[{name:"ObjectID",type:"oid"},{name:"id",type:"string"},{name:"name",type:"string"},{name:"subDistrictCount",type:"integer"},{name:"signalCount",type:"integer"},{name:"selected",type:"string"}],renderer:{type:"unique-value",field:"selected",defaultSymbol:{type:"simple-line",style:"long-dash",color:[111,100,255],width:2},uniqueValueInfos:[{value:"false",symbol:{type:"simple-line",style:"long-dash",color:[180,180,180],width:1}}]}},t={id:"districtController",source:[],objectIdField:"ObjectID",outFields:["*"],geometryType:"polyline",fields:[{name:"ObjectID",type:"oid"},{name:"id",type:"string"},{name:"name",type:"string"},{name:"subDistrictCount",type:"integer"},{name:"signalCount",type:"integer"},{name:"type",type:"string"},{name:"selected",type:"string"}],popupTemplate:{title:"{name}",content:[{type:"fields",fieldInfos:[{fieldName:"id",label:"区控编号"},{fieldName:"subDistrictCount",label:"子区数量"},{fieldName:"signalCount",label:"信号机数量"}]}]},renderer:{type:"unique-value",field:"selected",defaultSymbol:{type:"simple-line",style:"solid",color:[111,100,255,.4],width:2},uniqueValueInfos:[{value:"false",symbol:{type:"simple-line",style:"solid",color:[180,180,180,.4],width:1}}]}},i={id:"subDistrictController",source:[],objectIdField:"ObjectID",outFields:["*"],geometryType:"point",fields:[{name:"ObjectID",type:"oid"},{name:"id",type:"string"},{name:"name",type:"string"},{name:"districtId",type:"string"},{name:"districtName",type:"string"},{name:"subDistrictId",type:"string"},{name:"subDistrictName",type:"string"},{name:"signalCount",type:"integer"},{name:"selected",type:"string"},{name:"type",type:"string"}],popupTemplate:{title:"{subDistrictName} 子区",content:[{type:"fields",fieldInfos:[{fieldName:"subDistrictId",label:"子区编号"},{fieldName:"districtName",label:"所属区控"},{fieldName:"signalCount",label:"信号机数量"}]}]}},r={id:"signalLayer",source:[],objectIdField:"ObjectID",outFields:["*"],geometryType:"point",maxScale:5e3,fields:[{name:"ObjectID",type:"oid"},{name:"id",type:"string"},{name:"name",type:"string"},{name:"signalId",type:"string"},{name:"nodeId",type:"string"},{name:"isKey",type:"string"},{name:"districtId",type:"string"},{name:"districtName",type:"string"},{name:"subDistrictId",type:"string"},{name:"subDistrictName",type:"string"},{name:"type",type:"string"},{name:"selected",type:"string"}],popupTemplate:{title:"{name}信号机",content:[{type:"fields",fieldInfos:[{fieldName:"districtName",label:"区控名称"},{fieldName:"subDistrictName",label:"子区名称"},{fieldName:"signalId",label:"信号机编号"},{fieldName:"nodeId",label:"路口编号"}]}]},renderer:{type:"unique-value",field:"isKey",field2:"selected",defaultSymbol:{type:"simple-marker",style:"circle",color:"gray",size:4,outline:{color:"white",width:0}},uniqueValueInfos:[{value:"true,true",symbol:{type:"simple-marker",style:"circle",color:[254,172,22,.8],size:8,outline:{color:"white",width:0}}},{value:"false,true",symbol:{type:"simple-marker",style:"circle",color:[5,116,255,.8],size:8,outline:{color:"white",width:0}}},{value:"true,false",symbol:{type:"simple-marker",style:"circle",color:[180,180,180,.8],size:8,outline:{color:"white",width:0}}},{value:"false,false",symbol:{type:"simple-marker",style:"circle",color:[180,180,180,.8],size:8,outline:{color:"white",width:0}}}],visualVariables:[{type:"size",valueExpression:"$view.scale",stops:[{size:8,value:9000.954822000003},{size:6,value:18055.954822000003},{size:3,value:144447.638572},{size:2,value:1155581108577e-6}]}]}},l={id:"signalLayer",source:[],objectIdField:"ObjectID",outFields:["*"],geometryType:"point",minScale:5e3,fields:[{name:"ObjectID",type:"oid"},{name:"id",type:"string"},{name:"name",type:"string"},{name:"signalId",type:"string"},{name:"nodeId",type:"string"},{name:"isKey",type:"string"},{name:"districtId",type:"string"},{name:"districtName",type:"string"},{name:"subDistrictId",type:"string"},{name:"subDistrictName",type:"string"},{name:"type",type:"string"},{name:"selected",type:"string"}],popupTemplate:{title:"{name}信号机",content:[{type:"fields",fieldInfos:[{fieldName:"districtName",label:"区控名称"},{fieldName:"subDistrictName",label:"子区名称"},{fieldName:"signalId",label:"信号机编号"},{fieldName:"nodeId",label:"路口编号"}]}]},renderer:{type:"unique-value",field:"isKey",field2:"selected",defaultSymbol:{type:"simple-marker",style:"circle",color:"gray",size:4,outline:{color:"white",width:1}},uniqueValueInfos:[{value:"true,true",symbol:{type:"cim",data:{type:"CIMSymbolReference",primitiveOverrides:[{type:"CIMPrimitiveOverride",primitiveName:"textGraphic",propertyName:"TextString",valueExpressionInfo:{type:"CIMExpressionInfo",title:"Custom",expression:'Replace($feature.name, "与", "/") + " " + $feature.signalId',returnType:"Default"}}],symbol:{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",size:32,colorLocked:!0,anchorPointUnits:"Relative",frame:{xmin:-16,ymin:-16,xmax:16,ymax:16},markerGraphics:[{type:"CIMMarkerGraphic",primitiveName:"textGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",height:12,horizontalAlignment:"Center",offsetX:0,offsetY:30,haloSize:1,haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:[255,255,255,255]}]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:[0,0,0,255]}]},verticalAlignment:"Center"},textString:""}],scaleSymbolsProportionally:!0,respectFrame:!0},{type:"CIMPictureMarker",enable:!0,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",size:20,rotateClockwise:!0,textureFilter:"Picture",url:"/GisViewerAssets/Images/cross/gis_gjxklk_orange.png"}]}}}},{value:"false,true",symbol:{type:"cim",data:{type:"CIMSymbolReference",primitiveOverrides:[{type:"CIMPrimitiveOverride",primitiveName:"textGraphic",propertyName:"TextString",valueExpressionInfo:{type:"CIMExpressionInfo",title:"Custom",expression:'Replace($feature.name, "与", "/") + " " + $feature.signalId',returnType:"Default"}}],symbol:{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",size:32,colorLocked:!0,anchorPointUnits:"Relative",frame:{xmin:-16,ymin:-16,xmax:16,ymax:16},markerGraphics:[{type:"CIMMarkerGraphic",primitiveName:"textGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",height:12,horizontalAlignment:"Center",offsetX:0,offsetY:15,haloSize:1,haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:[255,255,255,255]}]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:[0,0,0,255]}]},verticalAlignment:"Center"},textString:""}],scaleSymbolsProportionally:!0,respectFrame:!0},{type:"CIMPictureMarker",enable:!0,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",size:20,rotateClockwise:!0,textureFilter:"Picture",url:"/GisViewerAssets/Images/cross/gis_xhj_blue.png"}]}}}},{value:"true,false",symbol:{type:"picture-marker",url:"/GisViewerAssets/Images/cross/gis_gjxk_gray.png",width:20,height:20}},{value:"false,false",symbol:{type:"picture-marker",url:"/GisViewerAssets/Images/cross/gis_xhj_gray.png",width:20,height:20}}],visualVariables:[{type:"size",valueExpression:"$view.scale",stops:[{size:28,value:2250},{size:24,value:4500}]}]}},s={id:"signalLayer",source:[],objectIdField:"ObjectID",outFields:["*"],geometryType:"point",maxScale:5e3,fields:[{name:"ObjectID",type:"oid"},{name:"id",type:"string"},{name:"name",type:"string"},{name:"signalId",type:"string"},{name:"nodeId",type:"string"},{name:"isKey",type:"string"},{name:"districtId",type:"string"},{name:"districtName",type:"string"},{name:"subDistrictId",type:"string"},{name:"subDistrictName",type:"string"},{name:"type",type:"string"},{name:"type",type:"string"},{name:"selected",type:"string"}],featureReduction:{type:"cluster",clusterRadius:"120px",clusterMaxSize:"50px",clusterMinSize:"30px",symbol:{type:"cim",data:{type:"CIMSymbolReference",primitiveOverrides:[{type:"CIMPrimitiveOverride",primitiveName:"textGraphic",propertyName:"TextString",valueExpressionInfo:{type:"CIMExpressionInfo",title:"Custom",expression:"$feature.cluster_count",returnType:"Default"}}],symbol:{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",size:32,colorLocked:!0,anchorPointUnits:"Relative",frame:{xmin:-16,ymin:-16,xmax:16,ymax:16},markerGraphics:[{type:"CIMMarkerGraphic",primitiveName:"textGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",height:16,horizontalAlignment:"Center",offsetX:0,offsetY:30,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:[255,255,255,255]}]},verticalAlignment:"Center"},textString:""},{type:"CIMMarkerGraphic",geometry:{rings:[[[-15,40],[15,40],[15,20],[-15,20],[-15,40]]]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:[2,72,200,255]},{type:"CIMSolidStroke",enable:!0,width:5,color:[2,72,200,128]}]}}],scaleSymbolsProportionally:!0,respectFrame:!0},{type:"CIMPictureMarker",enable:!0,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",size:40,rotateClockwise:!0,textureFilter:"Picture",url:"/GisViewerAssets/Images/cross/gis_xhj_blue.png"}]}}}},popupTemplate:{title:"{name}信号机",content:[{type:"fields",fieldInfos:[{fieldName:"districtName",label:"区控名称"},{fieldName:"subDistrictName",label:"子区名称"},{fieldName:"signalId",label:"信号机编号"},{fieldName:"nodeId",label:"路口编号"}]}]},renderer:{type:"simple",symbol:{type:"simple-marker",style:"circle",color:[5,116,255],size:8,outline:{color:"white",width:1}}}};exports.districtDashLineLayerOptions=e;exports.districtSolidLineLayerOptions=t;exports.signalClusterLayerOptions=s;exports.signalMarkerLayerOptions=r;exports.signalPictureLayerOptions=l;exports.subDistrictPointLayerOptions=i;
@@ -5,18 +5,10 @@ export default class SignalControlAreaController1 {
5
5
  /** 支队图层 */
6
6
  private detachmentLayer;
7
7
  private detachmentLayerLoaded;
8
- /** 区控虚线图层 */
9
- private districtControllerDashLayer;
10
- /** 区控实线图层,区控符号由半透明实线+不透明虚线组成 */
11
- private districtControllerSolidLayer;
8
+ private districtRenderer;
9
+ private subDistrictRenderer;
10
+ private signalRenderer;
12
11
  /** 子区图层 */
13
- private subDistrictControllerLayer;
14
- /** 信号机圆点图层 */
15
- private signalMarkerLayer;
16
- /** 信号机图标图层 */
17
- private signalPictureLayer;
18
- /** 信号机聚合图层 */
19
- private signalClusterLayer;
20
12
  private clickHandler;
21
13
  private districtControllerOid;
22
14
  private subDistrictControllerOid;
@@ -77,15 +69,13 @@ export default class SignalControlAreaController1 {
77
69
  * @returns
78
70
  */
79
71
  private generateGraphic;
80
- private viewHitTest;
81
72
  /**
82
73
  * 重置所有graphic的置灰状态
83
74
  */
84
- private resetSelectedSymbol;
85
75
  /**
86
76
  * 加载支队图层
87
77
  * 现场环境用url创建FeatureLayer有各种问题,
88
- * 改为图层到处未json,用json创建Graphic,再将Graphic添加到FeatureLayer
78
+ * 改为图层导出为json,用json创建Graphic,再将Graphic添加到FeatureLayer
89
79
  */
90
80
  private loadDetachmentLayer;
91
81
  }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const y=require("@arcgis/core/geometry"),m=require("@arcgis/core/geometry/support/webMercatorUtils"),g=require("@arcgis/core/Graphic"),w=require("@arcgis/core/layers/GraphicsLayer"),D=require("@turf/buffer"),R=require("@turf/convex"),S=require("@turf/helpers"),G=require("concaveman"),O=require("../../stores/index.js"),C=require("./district-controller.js"),I=require("./district-renderer.js"),v=require("./signal-renderer.js"),L=require("./sub-district-renderer.js");function q(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const t in o)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(o,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>o[t]})}}return e.default=o,Object.freeze(e)}const l=q(S);class k{constructor(e){this.detachmentLayerLoaded=!1,this.districtControllerOid=0,this.subDistrictControllerOid=0,this.signalOid=0,this.popupEnabled=!0,this.districtGraphics=[],this.subDistrictGraphics=[],this.signalGraphics=[],this.view=e,this.hasGpu=localStorage.getItem("gpu")!=="Unknown";const t=O.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(t.mapConfig)),this.detachmentLayer=new w,this.view.map.add(this.detachmentLayer),this.districtRenderer=new I.default(e,this.hasGpu),this.subDistrictRenderer=new L.default(e,this.hasGpu),this.signalRenderer=new v.default(e,this.hasGpu)}async showSignalControlArea(e){this.detachmentLayerLoaded||await this.loadDetachmentLayer(),await this.clearSignalControlArea(),this.districtRenderer.setVisible(!1),this.subDistrictRenderer.setVisible(!1),this.signalRenderer.setClusterVisible(!1),this.signalRenderer.setPointVisible(!1);const t=[],s=[];for(const r of e.areaList){const n=new C.default(r,e.style||"");t.push(n),s.push(...n.subDistricts)}return this.districtRenderer.style=e.style||"",await this.districtRenderer.showDistricts(t),await this.subDistrictRenderer.showSubDistricts(s),await this.signalRenderer.showSignals(t),{status:0,message:"ok"}}async clearSignalControlArea(){return this.districtGraphics=[],this.subDistrictGraphics=[],this.signalGraphics=[],this.districtControllerOid=0,this.subDistrictControllerOid=0,this.signalOid=0,await this.districtRenderer.clearDistricts(),await this.subDistrictRenderer.clearSubDistricts(),await this.signalRenderer.clearSignals(),{status:0,message:"ok"}}setLayerVisibility(e){switch(e.visible===!1&&this.view.closePopup(),e.id){case"district":this.districtRenderer.setVisible(e.visible);break;case"subDistrict":this.subDistrictRenderer.setVisible(e.visible);break;case"signal":this.signalRenderer.setPointVisible(e.visible);break;case"signalCluster":this.signalRenderer.setClusterVisible(e.visible);break;case"shanghai_district":this.detachmentLayer.visible=e.visible;break}return{status:0,message:"ok"}}async locateSignalControlArea(e){switch(e.type){case"district":return await this.districtRenderer.locateDistrict(e.id);case"subDistrict":return await this.subDistrictRenderer.locateSubDistrict(e.id);case"signal":return await this.signalRenderer.locateSignal(e.id);default:return{status:1,message:"未知类型"}}}async highlightSignalControlArea(e){switch(this.view.closePopup(),e.type){case"district":return await this.districtRenderer.highlightDistrict(e.id)?(this.subDistrictRenderer.filter("district",e.id),this.signalRenderer.filter("district",e.id),{status:0,message:"ok"}):{status:1,message:"未找到区控"};case"subDistrict":{const{count:t,parentId:s}=await this.subDistrictRenderer.highlightSubDistrict(e.id);return t>0?(this.districtRenderer.filter(s),this.signalRenderer.filter("subDistrict",e.id),{status:0,message:"ok"}):{status:1,message:"未找到子区"}}case"signal":{const{districtId:t,subDistrictId:s,count:r}=await this.signalRenderer.highlightSignal(e.id);return r>0?(this.districtRenderer.filter(t),this.subDistrictRenderer.filter("subDistrict",s),await this.view.goTo({target:this.signalGraphics,scale:e.scale||1e3},{duration:this.hasGpu?1e3:0}),{status:0,message:"ok"}):{status:1,message:"未找到信号机"}}default:return{status:1,message:"未知类型"}}}async resetHighlight(){return this.districtRenderer.resetFilter(),this.subDistrictRenderer.resetFilter(),this.signalRenderer.resetFilter(),{status:0,message:"ok"}}generateGraphic(e,t,s){const r=e.getAllSignalCoordinates();let n=null;if(r.length>=2)if(r.length===2)n=l.lineString(r);else{if(t){const i=l.featureCollection(r.map(c=>l.point(c)));n=R(i)}else{const i=G(r,.5);i.length>=4&&(n=l.polygon([i]))}n||(n=l.lineString(r))}else if(r.length===1)n=l.point(r[0]);else return;const a=D(n.geometry,t?200:30,{units:"meters"}),u=new g({geometry:{type:"polyline",paths:a.geometry.coordinates},attributes:{ObjectID:t?this.districtControllerOid++:this.subDistrictControllerOid++,id:e.id,name:e.name,subDistrictCount:e.subDistrictCount,signalCount:e.signalCount,parentId:e.parentId,parentName:e.parentName,selected:s,type:t?"district":"subDistrict"}});t?this.districtGraphics.push(u):this.subDistrictGraphics.push(u);for(const i of e.subDistricts)this.generateGraphic(i,!1,s);e.signals.forEach(i=>{const c=new g({geometry:{type:"point",x:i.longitude,y:i.latitude},attributes:{ObjectID:this.signalOid++,id:i.id,name:i.name,signalId:i.signalId,nodeId:i.nodeId,isKey:i.isKey,districtId:t?e.id:e.parentId,districtName:t?e.name:e.parentName,subDistrictId:t?"":e.id,subDistrictName:t?"":e.name,type:"signal",selected:!0}});this.signalGraphics.push(c)})}async loadDetachmentLayer(){const e=this.mapConfig.baseLayers;if(!e)return;const t=e.find(s=>s.options.id==="shanghai_district");if(t)try{const r=await(await fetch("/GisViewerAssets/ShangHai/Layers/district.json")).json(),n=[],{renderer:a,labelingInfo:u}=t.options;r.features.forEach(i=>{const c=i.attributes.ZD_NAME;if(c!=="高架支队"){let d=new y.Polygon({rings:i.geometry.rings});d=m.webMercatorToGeographic(d);const h=new g({geometry:d,attributes:i.attributes});if(a){if(a.type==="simple")h.symbol=a.symbol;else if(a.type==="unique-value"){const b=h.getAttribute("OBJECTID"),f=a.uniqueValueInfos.find(p=>p.value==b);h.symbol=f?f.symbol:a.defaultSymbol}}else h.symbol={type:"simple-fill",color:[227,237,255,.4],outline:{color:[255,195,153],width:2}};if(n.push(h),u&&c!=="边防港航支队"&&c!=="机场支队"){const b=new g({geometry:d.centroid,symbol:{...u.symbol,text:c}});n.push(b)}}}),this.detachmentLayer.addMany(n),this.detachmentLayerLoaded=!0}catch(s){console.error("加载支队图层失败:",s);return}}}exports.default=k;
@@ -0,0 +1,22 @@
1
+ import { IResult } from '../../../types';
2
+ import DistrictController from './district-controller';
3
+ export default class CrossRenderer {
4
+ private view;
5
+ private hasGpu;
6
+ private signalMarkerLayer;
7
+ private signalPictureLayer;
8
+ private signalClusterLayer;
9
+ constructor(view: __esri.MapView | __esri.SceneView, hasGpu: boolean);
10
+ showSignals(controllers: DistrictController[]): Promise<void>;
11
+ clearSignals(): Promise<void>;
12
+ setPointVisible(visible: boolean): Promise<void>;
13
+ setClusterVisible(visible: boolean): void;
14
+ locateSignal(id: string): Promise<IResult>;
15
+ highlightSignal(id: string): Promise<{
16
+ districtId: string;
17
+ subDistrictId: string;
18
+ count: number;
19
+ }>;
20
+ filter(type: string, id: string): void;
21
+ resetFilter(): void;
22
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d=require("@arcgis/core/Graphic"),u=require("@arcgis/core/layers/FeatureLayer"),l=require("./layer-symbol.js");class y{constructor(e,a){this.view=e,this.hasGpu=a,this.signalMarkerLayer=new u(l.signalMarkerLayerOptions),this.signalMarkerLayer.spatialReference=e.spatialReference,this.signalMarkerLayer.popupEnabled=!0,this.signalPictureLayer=new u(l.signalPictureLayerOptions),this.signalPictureLayer.spatialReference=e.spatialReference,this.signalPictureLayer.popupEnabled=!0,this.signalClusterLayer=new u(l.signalClusterLayerOptions),this.signalClusterLayer.spatialReference=e.spatialReference,this.signalClusterLayer.popupEnabled=!0,this.view.map.addMany([this.signalMarkerLayer,this.signalPictureLayer,this.signalClusterLayer])}async showSignals(e){await this.clearSignals();let a=0;const s=[];e.forEach(r=>{r.signals.forEach(i=>{const t=new d({geometry:{type:"point",longitude:i.longitude,latitude:i.latitude},attributes:{ObjectID:a++,id:i.id,name:i.name,signalId:i.signalId,nodeId:i.nodeId||i.id,districtId:r.id,districtName:r.name,subDistrictId:"",subDistrictName:"",isKey:i.isKey,type:"signal",selected:!0}});s.push(t)}),r.subDistricts.forEach(i=>{i.signals.forEach(t=>{const n=new d({geometry:{type:"point",longitude:t.longitude,latitude:t.latitude},attributes:{ObjectID:a++,id:t.id,name:t.name,signalId:t.signalId,nodeId:t.nodeId||t.id,districtId:r.id,districtName:r.name,subDistrictId:i.id,subDistrictName:i.name,isKey:t.isKey,type:"signal",selected:!0}});s.push(n)})})}),await this.signalMarkerLayer.applyEdits({addFeatures:s}),await this.signalPictureLayer.applyEdits({addFeatures:s}),await this.signalClusterLayer.applyEdits({addFeatures:s})}async clearSignals(){let e=await this.signalMarkerLayer.queryFeatures();await this.signalMarkerLayer.applyEdits({deleteFeatures:e.features}),this.signalMarkerLayer.definitionExpression="1=1",e=await this.signalPictureLayer.queryFeatures(),await this.signalPictureLayer.applyEdits({deleteFeatures:e.features}),this.signalPictureLayer.definitionExpression="1=1",e=await this.signalClusterLayer.queryFeatures(),await this.signalClusterLayer.applyEdits({deleteFeatures:e.features}),this.signalClusterLayer.definitionExpression="1=1"}async setPointVisible(e){this.signalMarkerLayer.visible=e,this.signalPictureLayer.visible=e}setClusterVisible(e){this.signalClusterLayer.visible=e}async locateSignal(e){return{status:0,message:"ok"}}async highlightSignal(e){let a="",s="";const r=this.signalMarkerLayer.definitionExpression;this.signalMarkerLayer.definitionExpression=`signalId = '${e}'`;const i=await this.signalMarkerLayer.queryFeatures(),t=i.features.length;if(t>0){const n=i.features[0].attributes.districtId||"",c=i.features[0].attributes.subDistrictId||"";return await this.view.goTo(i.features,{duration:this.hasGpu?1e3:0}),{districtId:n,subDistrictId:c,count:t}}else this.signalMarkerLayer.definitionExpression=r;return{districtId:a,subDistrictId:s,count:t}}filter(e,a){const s=`${e==="district"?"districtId":"subDistrictId"} = '${a}'`;this.signalClusterLayer.definitionExpression=s,this.signalMarkerLayer.definitionExpression=s,this.signalPictureLayer.definitionExpression=s}resetFilter(){const e="1=1";this.signalClusterLayer.definitionExpression=e,this.signalMarkerLayer.definitionExpression=e,this.signalPictureLayer.definitionExpression=e}}exports.default=y;
@@ -0,0 +1,27 @@
1
+ import { IResult } from '../../../types';
2
+ import DistrictController from './district-controller';
3
+ export default class SubDistrictRenderer {
4
+ private view;
5
+ private hasGpu;
6
+ private subDistrictPointLayer;
7
+ constructor(view: __esri.MapView | __esri.SceneView, hasGpu: boolean);
8
+ showSubDistricts(controllers: DistrictController[]): Promise<void>;
9
+ clearSubDistricts(): Promise<void>;
10
+ setVisible(visible: boolean): void;
11
+ /**
12
+ * 定位子区
13
+ * @param id 子区ID
14
+ */
15
+ locateSubDistrict(id: string): Promise<IResult>;
16
+ /**
17
+ * 高亮子区, 其他子区隐藏
18
+ * @param id 子区ID
19
+ * @return 返回高亮子区的数量以及区控id
20
+ */
21
+ highlightSubDistrict(id: string): Promise<{
22
+ count: number;
23
+ parentId: string;
24
+ }>;
25
+ filter(type: string, id: string): void;
26
+ resetFilter(): void;
27
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("@arcgis/core/Graphic"),o=require("@arcgis/core/layers/FeatureLayer"),c=require("./layer-symbol.js");class d{constructor(t,i){this.view=t,this.hasGpu=i,this.subDistrictPointLayer=new o(c.subDistrictPointLayerOptions),this.subDistrictPointLayer.spatialReference=t.spatialReference,this.subDistrictPointLayer.popupEnabled=!0,this.view.map.add(this.subDistrictPointLayer)}async showSubDistricts(t){await this.clearSubDistricts();let i=0;const s=[],r=[];t.forEach(e=>{r.push({value:e.id,label:e.name,symbol:{type:"simple-marker",style:"circle",color:[0,0,0,0],size:"8px",outline:{color:[...e.areaColor],width:4}}}),e.signals.forEach(a=>{const u=new n({geometry:{type:"point",longitude:a.longitude,latitude:a.latitude},attributes:{ObjectID:i++,id:a.id,name:a.name,subDistrictId:e.id,subDistrictName:e.name,districtId:e.parentId,districtName:e.parentName,signalCount:e.signalCount}});s.push(u)})}),this.subDistrictPointLayer.renderer={type:"unique-value",field:"subDistrictId",defaultSymbol:{type:"simple-marker",color:"gray",size:"8px",outline:{color:"white",width:1}},defaultLabel:"其他子区",uniqueValueInfos:r,visualVariables:[{type:"size",valueExpression:"$view.scale",stops:[{size:24,value:2500},{size:20,value:5e3},{size:8,value:18055.954822000003},{size:4,value:144447.638572},{size:2,value:1155581108577e-6}]}]},await this.subDistrictPointLayer.applyEdits({addFeatures:s}),await this.view.goTo(s,{duration:this.hasGpu?1e3:0})}async clearSubDistricts(){const t=await this.subDistrictPointLayer.queryFeatures();t.features.length>0&&await this.subDistrictPointLayer.applyEdits({deleteFeatures:t.features}),this.subDistrictPointLayer.definitionExpression="1=1"}setVisible(t){this.subDistrictPointLayer.visible=t}async locateSubDistrict(t){const i=this.subDistrictPointLayer.createQuery();i.where=`subDistrictId = '${t}'`,i.returnGeometry=!0;const s=await this.subDistrictPointLayer.queryFeatures(i);return s.features.length>0?(await this.view.goTo(s.features,{duration:this.hasGpu?1e3:0}),{status:0,message:"ok"}):{status:1,message:"未找到区控"}}async highlightSubDistrict(t){let i="";const s=this.subDistrictPointLayer.definitionExpression;this.subDistrictPointLayer.definitionExpression=`subDistrictId = '${t}'`;const r=await this.subDistrictPointLayer.queryFeatures(),e=r.features.length;return e>0?(i=r.features[0].attributes.districtId,await this.view.goTo(r.features,{duration:this.hasGpu?1e3:0})):this.subDistrictPointLayer.definitionExpression=s,{count:e,parentId:i}}filter(t,i){const s=`${t==="district"?"districtId":"subDistrictId"} = '${i}'`;this.subDistrictPointLayer.definitionExpression=s}resetFilter(){this.subDistrictPointLayer.definitionExpression="1=1"}}exports.default=d;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gisviewer-vue3-arcgis",
3
- "version": "1.0.227",
3
+ "version": "1.0.229",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.mjs",
6
6
  "files": [
@@ -1,38 +0,0 @@
1
- import o from "../common-utils.mjs";
2
- class e {
3
- constructor(i, n) {
4
- this.parentName = "", this.signals = [], this.subDistricts = [], this.signalCount = 0, this.subDistrictCount = 0, this.id = i.name, this.name = i.areaDesc, this.parentId = i.parentId, this.areaColor = n === "alarm" ? [255, 0, 0] : [61, 139, 249];
5
- for (const t of i.children)
6
- if (t.children) {
7
- const s = new e(t, n);
8
- s.id = t.id, s.name = `SS ${t.name}`, s.parentId = this.id, s.parentName = this.name, this.subDistricts.push(s), this.subDistrictCount++, this.signalCount += s.signalCount;
9
- } else if (o.isCoordinateValid(t)) {
10
- const s = {
11
- id: t.id,
12
- name: t.name,
13
- parentId: t.parentId,
14
- latitude: Number(t.latitude),
15
- longitude: Number(t.longitude),
16
- signalId: t.signalId,
17
- nodeId: t.nodeId,
18
- isKey: t.isKey === 1
19
- };
20
- this.signals.push(s), this.signalCount++;
21
- }
22
- }
23
- /**
24
- * 获取区控/子区下的所有信号机
25
- * @returns
26
- */
27
- getAllSignalCoordinates() {
28
- const i = [];
29
- for (const n of this.signals)
30
- i.push([n.longitude, n.latitude]);
31
- for (const n of this.subDistricts)
32
- i.push(...n.getAllSignalCoordinates());
33
- return i;
34
- }
35
- }
36
- export {
37
- e as default
38
- };