gisviewer-vue3-arcgis 1.0.85

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 (138) hide show
  1. package/README.md +103 -0
  2. package/es/index.d.ts +8 -0
  3. package/es/index.mjs +16 -0
  4. package/es/src/components.d.ts +9 -0
  5. package/es/src/gis-map/gis-map.vue.d.ts +91 -0
  6. package/es/src/gis-map/gis-map.vue.mjs +124 -0
  7. package/es/src/gis-map/gis-map.vue2.mjs +4 -0
  8. package/es/src/gis-map/index.d.ts +81 -0
  9. package/es/src/gis-map/index.mjs +7 -0
  10. package/es/src/gis-map/stores/appData.d.ts +3 -0
  11. package/es/src/gis-map/stores/appData.mjs +9 -0
  12. package/es/src/gis-map/stores/index.d.ts +7 -0
  13. package/es/src/gis-map/stores/index.mjs +10 -0
  14. package/es/src/gis-map/style/index.css +13 -0
  15. package/es/src/gis-map/utils/FlyToPoints.d.ts +37 -0
  16. package/es/src/gis-map/utils/FlyToPoints.mjs +67 -0
  17. package/es/src/gis-map/utils/GreenWaveline.mjs +193 -0
  18. package/es/src/gis-map/utils/Layers.d.ts +31 -0
  19. package/es/src/gis-map/utils/Layers.mjs +99 -0
  20. package/es/src/gis-map/utils/common-utils.d.ts +65 -0
  21. package/es/src/gis-map/utils/common-utils.mjs +159 -0
  22. package/es/src/gis-map/utils/holo-flow/index.d.ts +15 -0
  23. package/es/src/gis-map/utils/holo-flow/index.mjs +50 -0
  24. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +40 -0
  25. package/es/src/gis-map/utils/holo-flow/signal-holo-flow.mjs +209 -0
  26. package/es/src/gis-map/utils/holo-flow/trace-external-renderer.d.ts +69 -0
  27. package/es/src/gis-map/utils/holo-flow/trace-external-renderer.mjs +316 -0
  28. package/es/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +18 -0
  29. package/es/src/gis-map/utils/holo-flow/trace-holo-flow.mjs +75 -0
  30. package/es/src/gis-map/utils/holo-flow/trace-layer-renderer.d.ts +35 -0
  31. package/es/src/gis-map/utils/holo-flow/trace-layer-renderer.mjs +286 -0
  32. package/es/src/gis-map/utils/index.d.ts +21 -0
  33. package/es/src/gis-map/utils/index.mjs +23 -0
  34. package/es/src/gis-map/utils/map-initializer.d.ts +50 -0
  35. package/es/src/gis-map/utils/map-initializer.mjs +248 -0
  36. package/es/src/gis-map/utils/open-drive-renderer/index.d.ts +9 -0
  37. package/es/src/gis-map/utils/open-drive-renderer/index.mjs +271 -0
  38. package/es/src/gis-map/utils/overlay.d.ts +83 -0
  39. package/es/src/gis-map/utils/overlay.mjs +149 -0
  40. package/es/src/gis-map/utils/queue-length.d.ts +14 -0
  41. package/es/src/gis-map/utils/queue-length.mjs +83 -0
  42. package/es/src/gis-map/utils/renderer/greenWaveline.d.ts +2 -0
  43. package/es/src/gis-map/utils/renderer/greenWaveline.mjs +169 -0
  44. package/es/src/gis-map/utils/road-config-tool/cross.d.ts +51 -0
  45. package/es/src/gis-map/utils/road-config-tool/cross.mjs +127 -0
  46. package/es/src/gis-map/utils/road-config-tool/entrance.d.ts +24 -0
  47. package/es/src/gis-map/utils/road-config-tool/entrance.mjs +79 -0
  48. package/es/src/gis-map/utils/road-config-tool/exit.d.ts +18 -0
  49. package/es/src/gis-map/utils/road-config-tool/exit.mjs +86 -0
  50. package/es/src/gis-map/utils/road-config-tool/index.d.ts +44 -0
  51. package/es/src/gis-map/utils/road-config-tool/index.mjs +112 -0
  52. package/es/src/gis-map/utils/road-config-tool/indicator-area.d.ts +22 -0
  53. package/es/src/gis-map/utils/road-config-tool/indicator-area.mjs +44 -0
  54. package/es/src/gis-map/utils/road-config-tool/lane.d.ts +21 -0
  55. package/es/src/gis-map/utils/road-config-tool/lane.mjs +35 -0
  56. package/es/src/gis-map/utils/road-config-tool/search-nearby-lanes.d.ts +62 -0
  57. package/es/src/gis-map/utils/road-config-tool/search-nearby-lanes.mjs +265 -0
  58. package/es/src/gis-map/utils/sketchView.d.ts +209 -0
  59. package/es/src/gis-map/utils/sketchView.mjs +516 -0
  60. package/es/src/gis-map/utils/sketchViewTool.d.ts +259 -0
  61. package/es/src/gis-map/utils/sketchViewTool.mjs +503 -0
  62. package/es/src/gis-map/utils/syncMapView.d.ts +43 -0
  63. package/es/src/gis-map/utils/syncMapView.mjs +64 -0
  64. package/es/src/gis-map/utils/traffic-flow.d.ts +66 -0
  65. package/es/src/gis-map/utils/traffic-flow.mjs +308 -0
  66. package/es/src/index.d.ts +1 -0
  67. package/es/src/index.mjs +4 -0
  68. package/es/src/types/index.d.ts +142 -0
  69. package/es/src/types/index.mjs +5 -0
  70. package/lib/index.d.ts +8 -0
  71. package/lib/index.js +1 -0
  72. package/lib/src/components.d.ts +9 -0
  73. package/lib/src/gis-map/gis-map.vue.d.ts +91 -0
  74. package/lib/src/gis-map/gis-map.vue.js +1 -0
  75. package/lib/src/gis-map/gis-map.vue2.js +1 -0
  76. package/lib/src/gis-map/index.d.ts +81 -0
  77. package/lib/src/gis-map/index.js +1 -0
  78. package/lib/src/gis-map/stores/appData.d.ts +3 -0
  79. package/lib/src/gis-map/stores/appData.js +1 -0
  80. package/lib/src/gis-map/stores/index.d.ts +7 -0
  81. package/lib/src/gis-map/stores/index.js +1 -0
  82. package/lib/src/gis-map/style/index.css +13 -0
  83. package/lib/src/gis-map/utils/FlyToPoints.d.ts +37 -0
  84. package/lib/src/gis-map/utils/FlyToPoints.js +1 -0
  85. package/lib/src/gis-map/utils/GreenWaveline.js +1 -0
  86. package/lib/src/gis-map/utils/Layers.d.ts +31 -0
  87. package/lib/src/gis-map/utils/Layers.js +1 -0
  88. package/lib/src/gis-map/utils/common-utils.d.ts +65 -0
  89. package/lib/src/gis-map/utils/common-utils.js +1 -0
  90. package/lib/src/gis-map/utils/holo-flow/index.d.ts +15 -0
  91. package/lib/src/gis-map/utils/holo-flow/index.js +1 -0
  92. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.d.ts +40 -0
  93. package/lib/src/gis-map/utils/holo-flow/signal-holo-flow.js +1 -0
  94. package/lib/src/gis-map/utils/holo-flow/trace-external-renderer.d.ts +69 -0
  95. package/lib/src/gis-map/utils/holo-flow/trace-external-renderer.js +1 -0
  96. package/lib/src/gis-map/utils/holo-flow/trace-holo-flow.d.ts +18 -0
  97. package/lib/src/gis-map/utils/holo-flow/trace-holo-flow.js +1 -0
  98. package/lib/src/gis-map/utils/holo-flow/trace-layer-renderer.d.ts +35 -0
  99. package/lib/src/gis-map/utils/holo-flow/trace-layer-renderer.js +1 -0
  100. package/lib/src/gis-map/utils/index.d.ts +21 -0
  101. package/lib/src/gis-map/utils/index.js +1 -0
  102. package/lib/src/gis-map/utils/map-initializer.d.ts +50 -0
  103. package/lib/src/gis-map/utils/map-initializer.js +1 -0
  104. package/lib/src/gis-map/utils/open-drive-renderer/index.d.ts +9 -0
  105. package/lib/src/gis-map/utils/open-drive-renderer/index.js +1 -0
  106. package/lib/src/gis-map/utils/overlay.d.ts +83 -0
  107. package/lib/src/gis-map/utils/overlay.js +1 -0
  108. package/lib/src/gis-map/utils/queue-length.d.ts +14 -0
  109. package/lib/src/gis-map/utils/queue-length.js +1 -0
  110. package/lib/src/gis-map/utils/renderer/greenWaveline.d.ts +2 -0
  111. package/lib/src/gis-map/utils/renderer/greenWaveline.js +43 -0
  112. package/lib/src/gis-map/utils/road-config-tool/cross.d.ts +51 -0
  113. package/lib/src/gis-map/utils/road-config-tool/cross.js +1 -0
  114. package/lib/src/gis-map/utils/road-config-tool/entrance.d.ts +24 -0
  115. package/lib/src/gis-map/utils/road-config-tool/entrance.js +1 -0
  116. package/lib/src/gis-map/utils/road-config-tool/exit.d.ts +18 -0
  117. package/lib/src/gis-map/utils/road-config-tool/exit.js +1 -0
  118. package/lib/src/gis-map/utils/road-config-tool/index.d.ts +44 -0
  119. package/lib/src/gis-map/utils/road-config-tool/index.js +1 -0
  120. package/lib/src/gis-map/utils/road-config-tool/indicator-area.d.ts +22 -0
  121. package/lib/src/gis-map/utils/road-config-tool/indicator-area.js +1 -0
  122. package/lib/src/gis-map/utils/road-config-tool/lane.d.ts +21 -0
  123. package/lib/src/gis-map/utils/road-config-tool/lane.js +1 -0
  124. package/lib/src/gis-map/utils/road-config-tool/search-nearby-lanes.d.ts +62 -0
  125. package/lib/src/gis-map/utils/road-config-tool/search-nearby-lanes.js +1 -0
  126. package/lib/src/gis-map/utils/sketchView.d.ts +209 -0
  127. package/lib/src/gis-map/utils/sketchView.js +1 -0
  128. package/lib/src/gis-map/utils/sketchViewTool.d.ts +259 -0
  129. package/lib/src/gis-map/utils/sketchViewTool.js +1 -0
  130. package/lib/src/gis-map/utils/syncMapView.d.ts +43 -0
  131. package/lib/src/gis-map/utils/syncMapView.js +1 -0
  132. package/lib/src/gis-map/utils/traffic-flow.d.ts +66 -0
  133. package/lib/src/gis-map/utils/traffic-flow.js +1 -0
  134. package/lib/src/index.d.ts +1 -0
  135. package/lib/src/index.js +1 -0
  136. package/lib/src/types/index.d.ts +142 -0
  137. package/lib/src/types/index.js +1 -0
  138. package/package.json +41 -0
@@ -0,0 +1,7 @@
1
+ import { useAppDataStore } from './appData';
2
+ export interface IAppStore {
3
+ useAppDataStore: ReturnType<typeof useAppDataStore>;
4
+ }
5
+ declare const appStore: IAppStore;
6
+ export declare const registerStore: () => void;
7
+ export default appStore;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("pinia"),a=require("./appData.js"),e={},o=()=>{const t=r.createPinia();e.useAppDataStore=a.useAppDataStore(t)};exports.default=e;exports.registerStore=o;
@@ -0,0 +1,13 @@
1
+ @import url('@arcgis/core/assets/esri/themes/dark/main.css');
2
+ .gis-viewer {
3
+ position: relative;
4
+ width: 100%;
5
+ height: 100%;
6
+ }
7
+ .gis-viewer-main {
8
+ width: 100%;
9
+ height: 100%;
10
+ }
11
+ .esri-view .esri-view-surface:focus::after {
12
+ outline: none !important;
13
+ }
@@ -0,0 +1,37 @@
1
+ import MapView from '@arcgis/core/views/MapView';
2
+ import Extent from '@arcgis/core/geometry/Extent.js';
3
+ interface FlyToPointsOptions {
4
+ viewer: MapView;
5
+ points: {
6
+ longitude: number;
7
+ latitude: number;
8
+ }[];
9
+ duration?: number;
10
+ paddingRatio?: number;
11
+ onComplete?: () => void;
12
+ }
13
+ /**
14
+ * 动态点位 计算可视范围
15
+ *
16
+ * @export
17
+ * @class FlyToPoints
18
+ */
19
+ export default class FlyToPoints {
20
+ private viewer;
21
+ private points;
22
+ constructor(options: FlyToPointsOptions);
23
+ /**
24
+ * 移动到可视角度
25
+ *
26
+ * @returns
27
+ * @memberof FlyToPoints
28
+ */
29
+ flyToPoints(): void;
30
+ calculateZoomLevel(extent: Extent, viewWidth: number, viewHeight: number): number;
31
+ calculateExtent(points: string | any[]): Extent;
32
+ calculateCenterPoint(points: string | any[]): {
33
+ longitude: number;
34
+ latitude: number;
35
+ };
36
+ }
37
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("@arcgis/core/geometry/Extent.js");class h{constructor(t){this.viewer=t.viewer,this.points=t.points}flyToPoints(){if(this.points.length==0)return;const t=this.calculateExtent(this.points),n=t.center,i=Math.abs(t.xmax-t.xmin),o=Math.abs(t.ymax-t.ymin),a=.6,e=i*a,l=o*a,s=new c({xmin:t.xmin-e,ymin:t.ymin-l,xmax:t.xmax+e,ymax:t.ymax+l,spatialReference:t.spatialReference}),r=this.calculateZoomLevel(s,this.viewer.width,this.viewer.height);this.viewer.goTo({target:s,zoom:r,center:n})}calculateZoomLevel(t,n,i){const o=Math.abs(t.xmax-t.xmin),a=Math.abs(t.ymax-t.ymin),e=Math.log2(360*(n/o)/256),l=Math.log2(180*(i/a)/256);return Math.floor(Math.min(e,l))}calculateExtent(t){let n=Number.MAX_VALUE,i=Number.MAX_VALUE,o=Number.MIN_VALUE,a=Number.MIN_VALUE;for(let e=0;e<t.length;e++){const l=t[e];n=Math.min(n,l.longitude),i=Math.min(i,l.latitude),o=Math.max(o,l.longitude),a=Math.max(a,l.latitude)}return new c({xmin:n,ymin:i,xmax:o,ymax:a,spatialReference:{wkid:4326}})}calculateCenterPoint(t){let n=0,i=0;for(let e=0;e<t.length;e++)n+=t[e].longitude,i+=t[e].latitude;const o=n/t.length,a=i/t.length;return{longitude:o,latitude:a}}}exports.default=h;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const c=require("@arcgis/core/Graphic"),y=require("@arcgis/core/geometry"),u=require("@arcgis/core/geometry/Polyline"),p=require("@arcgis/core/geometry/support/webMercatorUtils.js"),b=require("@arcgis/core/layers/GraphicsLayer"),g=require("./renderer/greenWaveline.js");function f(o){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const t in o)if(t!=="default"){const e=Object.getOwnPropertyDescriptor(o,t);Object.defineProperty(i,t,e.get?e:{enumerable:!0,get:()=>o[t]})}}return i.default=o,Object.freeze(i)}const l=f(p);function v(...o){const i={},t=e=>{for(const r in e)e.hasOwnProperty(r)&&(Object.prototype.toString.call(e[r])==="[object Object]"?i[r]=v(i[r],e[r]):i[r]=e[r])};for(let e=0;e<o.length;e++)t(o[e]);return i}class m{constructor(i){this.defaultAnimationOptions={isAnimation:!1,positive:!0,positiveColor:[0,255,0],negative:!0,negativeColor:[0,255,0]},this.viewer=i.viewer,this.overlayLayer=new b({...i.graphicsLayerOptions}),this.customGreenWaveLineView=new g.default({graphics:[]}),this.viewer.map.layers.add(this.customGreenWaveLineView),this.viewer.map.layers.add(this.overlayLayer)}addGreenWaveLine(i,t={isAnimation:!1,positive:!0,positiveColor:[0,255,0],negative:!0,negativeColor:[0,255,0]}){const e=[],r=[];t=v(this.defaultAnimationOptions,t),i.map(a=>{const s=a.visible==null?!0:a.visible;if(t.isAnimation){const n=[...a.paths];r.push(...this.getAnimationPath(n,t))}e.push(this.createLine(a.paths,a.symbol,a.attributes,s))}),this.overlayLayer.addMany(e),t.isAnimation&&this.customGreenWaveLineView.addMany(r)}getAnimationPath(i,t={isAnimation:!1,positive:!0,positiveColor:[0,255,0],negative:!0,negativeColor:[0,255,0]}){const e=[];return t.positive&&e.push({attributes:{color:t.positiveColor},geometry:l.geographicToWebMercator({paths:[i],type:"polyline"})}),t.negative&&e.push({attributes:{color:t.negativeColor},geometry:l.geographicToWebMercator({paths:[i.reverse()],type:"polyline"})}),e}createLine(i,t,e={},r){const a={type:"simple-line",color:[0,0,255,.5],width:2,...t},s=new u({paths:i}),n=l.geographicToWebMercator(s);return new c({geometry:n,symbol:a,attributes:{type:"greenWaveLine",...e},visible:r})}addPointText(i){const t=[];i.map(e=>{const r=e.visible==null?!0:e.visible;t.push(this.createPointText(e.point,e.symbol,e.attributes,r))}),this.overlayLayer.addMany(t)}createPointText(i,t,e={},r){const a={type:"text",color:"white",haloColor:"black",haloSize:"1px",xoffset:3,yoffset:3,font:{size:12,family:"Josefin Slab",weight:"bold"},...t},s=new y.Point({x:i[0],y:i[1]}),n=l.geographicToWebMercator(s);return new c({geometry:n,symbol:a,attributes:{type:"greenWaveLine-Text",...e},visible:r})}hideWaveLine(i){i?this.overlayLayer.graphics.filter(e=>{const r=e.getAttribute("id");return i.includes(r)}).forEach(e=>{e.visible=!1}):this.overlayLayer.graphics.map(t=>{t.visible=!1})}showWaveLine(i){i?this.overlayLayer.graphics.filter(e=>{const r=e.getAttribute("id");return i.includes(r)}).forEach(e=>{e.visible=!0}):this.overlayLayer.graphics.map(t=>{t.visible=!0})}hideLayer(){this.overlayLayer.visible=!1,this.customGreenWaveLineView.visible=!1}showLayer(){this.overlayLayer.visible=!0,this.customGreenWaveLineView.visible=!0}clearGreenWaveLine(){this.overlayLayer.removeAll(),this.customGreenWaveLineView.removeAll()}destroy(){this.overlayLayer.removeAll(),this.customGreenWaveLineView.removeAll(),this.viewer.map.layers.remove(this.customGreenWaveLineView),this.viewer.map.layers.remove(this.overlayLayer)}}exports.default=m;
@@ -0,0 +1,31 @@
1
+ import Layer from '@arcgis/core/layers/Layer';
2
+ import MapView from '@arcgis/core/views/MapView';
3
+ import SceneView from '@arcgis/core/views/SceneView';
4
+ interface LayersOptions {
5
+ viewer: MapView | SceneView;
6
+ graphicsLayerOptions: {
7
+ id: string;
8
+ };
9
+ }
10
+ interface layerDataFace {
11
+ url: string;
12
+ id: string;
13
+ title: string;
14
+ visible?: boolean;
15
+ type: string;
16
+ options?: any;
17
+ }
18
+ export default class BaseLayers {
19
+ private viewer;
20
+ private layerList;
21
+ constructor(options: LayersOptions);
22
+ getLayerById(id: string): Layer | undefined;
23
+ getLayers(): Map<string, Layer>;
24
+ getTileInfo(): {};
25
+ addLayer(layerData: layerDataFace | layerDataFace[], index?: number): void;
26
+ createLayer(layerData: layerDataFace): Layer | null;
27
+ removeLayerById(ids: string | string[]): void;
28
+ hideLayerById(ids: string | string[]): void;
29
+ showLayerById(ids: string | string[]): void;
30
+ }
31
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("@arcgis/core/layers/GeoJSONLayer"),y=require("@arcgis/core/layers/TileLayer"),o=require("@arcgis/core/layers/WebTileLayer");class a{constructor(e){this.layerList=new Map,this.viewer=e.viewer;const i=this.viewer.map.findLayerById("dark-gray-base-layer");i&&this.layerList.set("dark-gray-base-layer",i)}getLayerById(e){return this.layerList.get(e)}getLayers(){return this.layerList}getTileInfo(){return{}}addLayer(e,i){const r=[];if(Array.isArray(e))e.map(t=>{const s=this.createLayer(t);s&&(this.layerList.set(t.id,s),r.push(this.createLayer(t)))});else{const t=this.createLayer(e);if(!t)return;this.layerList.set(e.id,t),r.push(this.createLayer(e))}r.map(t=>{this.viewer.map.add(t,i)})}createLayer(e){let i=null;switch(e.type){case"webTile":i=new o({urlTemplate:e.url,...e.options,title:e.options.id,visible:e.visible});break;case"hdLayers":i=new l({url:e.url,...e.options,title:e.options.id,visible:e.visible});break;case"tile":i=new y({url:e.url,...e.options,title:e.options.id,visible:e.visible});break}return i}removeLayerById(e){if(typeof e=="string"){const i=this.layerList.get(e);i&&(this.viewer.map.remove(i),this.layerList.delete(e))}Array.isArray(e)&&e.forEach(i=>{const r=this.layerList.get(i);r&&(this.viewer.map.remove(r),this.layerList.delete(i))})}hideLayerById(e){if(typeof e=="string"){const i=this.layerList.get(e);i&&(i.visible=!1)}Array.isArray(e)&&e.forEach(i=>{const r=this.layerList.get(i);r&&(r.visible=!1)})}showLayerById(e){if(typeof e=="string"){const i=this.layerList.get(e);i&&(i.visible=!0)}Array.isArray(e)&&e.forEach(i=>{const r=this.layerList.get(i);r&&(r.visible=!0)})}}exports.default=a;
@@ -0,0 +1,65 @@
1
+ import { Point, Polygon, Polyline } from '@arcgis/core/geometry';
2
+ export default class CommonUtils {
3
+ /**
4
+ * 得到某个点在一定方向、距离之外的另一个点
5
+ * @param point
6
+ * @param angel
7
+ * @param distance
8
+ * @returns
9
+ */
10
+ static destinationWithPoint(point: Point, angel: number, distance: number): Point;
11
+ /**
12
+ * 线段与正北方向夹角
13
+ * @param line
14
+ * @returns
15
+ */
16
+ static angleOfLine(line: Polyline): number;
17
+ /**
18
+ * 在头尾两个方向上延长折线
19
+ * @param line
20
+ * @param distance
21
+ */
22
+ static extendLineInTowDir(line: Polyline, distance: number): Polyline;
23
+ /**
24
+ * 两条线的交点
25
+ * @param line1
26
+ * @param line2
27
+ * @returns
28
+ */
29
+ static getIntersectPointOfTwoLines(line1: Polyline, line2: Polyline): Promise<Point | undefined>;
30
+ /**
31
+ * 获取停止线与车道面的交点
32
+ * @param stopLine
33
+ * @param lanePolygon
34
+ * @param offsetDistances
35
+ * @returns
36
+ */
37
+ static getIntersectPointsOfStopLineAndLane(stopLine: Polyline, lanePolygon: Polygon, offsetDistances?: number[]): Promise<number[][]>;
38
+ /**
39
+ * 两个点之间的距离
40
+ * @param points
41
+ * @returns
42
+ */
43
+ private static pointDistance;
44
+ /**
45
+ * 线按一定距离平移之后,与面相交的两个端点
46
+ * @param line
47
+ * @param polygon
48
+ * @param offsetDistance 线平移的距离
49
+ * @returns 线面交线的头尾端点
50
+ */
51
+ static getIntersectPointOfLineAndPolygon(line: Polyline, polygon: Polygon, offsetDistance?: number): Promise<number[][]>;
52
+ /**
53
+ * 对polyline做平移
54
+ * @param line
55
+ * @param offsetDistance
56
+ * @returns 平移后的polyline
57
+ */
58
+ static getOffsetLine(line: Polyline, offsetDistance: number): Promise<Polyline>;
59
+ /**
60
+ * 解压
61
+ * @param key
62
+ * @returns
63
+ */
64
+ static unzip(key: string): string | undefined;
65
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("@arcgis/core/geometry"),w=require("@arcgis/core/geometry/geometryEngineAsync"),O=require("@arcgis/core/geometry/support/webMercatorUtils"),y=require("@turf/bearing"),l=require("@turf/destination"),L=require("@turf/helpers"),b=require("pako");function p(c){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(c){for(const t in c)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(c,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>c[t]})}}return e.default=c,Object.freeze(e)}const g=p(w),P=p(O),f=p(L);class s{static destinationWithPoint(e,t,n){const r=f.point([e.x,e.y]),o=l(r,n,t,{units:"meters"});return new a.Point({x:o.geometry.coordinates[0],y:o.geometry.coordinates[1]})}static angleOfLine(e){const t=e.paths[0],n=f.point(t[0]),r=f.point(t[t.length-1]);return y(n,r)}static extendLineInTowDir(e,t){const n=e.paths[0],r=f.point(n[0]),o=f.point(n[1]),i=y(o,r),u=l(r,t,i,{units:"meters"}),h=i>0?i-180:i+180,d=l(o,t,h,{units:"meters"});return new a.Polyline({paths:[[u.geometry.coordinates,d.geometry.coordinates]]})}static async getIntersectPointOfTwoLines(e,t){const n=await g.intersectLinesToPoints(e,t);if(n.length)return n[0]}static async getIntersectPointsOfStopLineAndLane(e,t,n){let r=await s.getIntersectPointOfLineAndPolygon(e,t);if(await s.pointDistance(r)<3&&n){for(const o of n)if(r=await s.getIntersectPointOfLineAndPolygon(e,t,o),await s.pointDistance(r)>2.5){const i=new a.Polyline({paths:[r]});return(await s.getOffsetLine(i,-o)).paths[0]}}else return r;return[]}static async pointDistance(e){if(e.length<2)return 0;const t=new a.Polyline({paths:[e]});return await g.geodesicLength(t,"meters")}static async getIntersectPointOfLineAndPolygon(e,t,n=0){n!==0&&(e=await s.getOffsetLine(e,n));const r=await g.intersect(e,t);if(r instanceof a.Polyline){const o=r.paths[0],i=o[0],u=o[o.length-1];return[i,u]}return[]}static async getOffsetLine(e,t){const n=P.geographicToWebMercator(e),r=await g.offset(n,t,"meters");return P.webMercatorToGeographic(r,!1)}static unzip(e){try{const t=[],n=e.split("");for(let o=0;o<n.length;o++){const i=n[o];t.push(i.charCodeAt(0))}const r=new Uint8Array(t);return b.inflate(r,{to:"string"})}catch{console.log(`非压缩内容: ${e}`)}}}exports.default=s;
@@ -0,0 +1,15 @@
1
+ import View from '@arcgis/core/views/View';
2
+ export default class Index {
3
+ private readonly view;
4
+ private traceHoloFlow;
5
+ private signalHoloFlow;
6
+ constructor(view: View);
7
+ /**
8
+ * 处理全息流轨迹数据
9
+ * */
10
+ handleVehicleTraceData(data: any): void;
11
+ clearHoloTrace(): void;
12
+ updatePanelContent(contentType: string): void;
13
+ handleSignalData(data: any): Promise<void>;
14
+ clearHoloSignal(): void;
15
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("../../../types/index.js"),o=require("./signal-holo-flow.js"),i=require("./trace-holo-flow.js");class n{constructor(e){this.view=e}handleVehicleTraceData(e){this.traceHoloFlow||(this.traceHoloFlow=new i.default(this.view)),this.traceHoloFlow.handleVehicleTraceData(e)}clearHoloTrace(){var e;(e=this.traceHoloFlow)==null||e.clearTrace()}updatePanelContent(e){var t;let a=l.EVehiclePlateState.None;switch(e){case"none":a=l.EVehiclePlateState.None;break;case"plateNumber":a=l.EVehiclePlateState.PlateNumber;break;case"vehicleId":a=l.EVehiclePlateState.Id;break;case"mix":a=l.EVehiclePlateState.Mix;break}(t=this.traceHoloFlow)==null||t.updatePanelContent(a)}async handleSignalData(e){this.signalHoloFlow||(this.signalHoloFlow=new o.default(this.view)),await this.signalHoloFlow.initializeLayer(),await this.signalHoloFlow.handleSignalData(e)}clearHoloSignal(){var e;(e=this.signalHoloFlow)==null||e.clearSignal()}}exports.default=n;
@@ -0,0 +1,40 @@
1
+ import View from '@arcgis/core/views/View';
2
+ export default class SignalHoloFlow {
3
+ private view;
4
+ private mapConfig;
5
+ /** 显示停止线的图层 */
6
+ private phaseLineLayer;
7
+ /** 每个路口的当前相位 */
8
+ private currentPhaseMap;
9
+ /** 每个路口倒计时canvas */
10
+ private countdownCanvasMap;
11
+ private countdownWatchHandel;
12
+ private lastDataTime;
13
+ constructor(view: View);
14
+ /**
15
+ * 初始化相位线图层
16
+ * */
17
+ initializeLayer(): Promise<void>;
18
+ handleSignalData(data: any): Promise<void>;
19
+ /**
20
+ * 清除实时信号相关图层
21
+ * */
22
+ clearSignal(): void;
23
+ private isDeletingCanvas;
24
+ /**
25
+ * 获取显示倒计时的canvas
26
+ * */
27
+ private updateCountdown;
28
+ private drawCountdownText;
29
+ private updatePhaseLine;
30
+ /**
31
+ * 车道是否在通道中
32
+ * @param laneCode 车道编码
33
+ * @param channels 通道列表
34
+ * @returns
35
+ */
36
+ private isLaneInChannels;
37
+ private readonly canvasWidth;
38
+ private readonly canvasHeight;
39
+ private createCountdownCanvas;
40
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const d=require("@arcgis/core/core/reactiveUtils"),u=require("@arcgis/core/geometry"),p=require("@arcgis/core/layers/FeatureLayer"),g=require("../../stores/index.js");function y(r){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const t in r)if(t!=="default"){const a=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:()=>r[t]})}}return e.default=r,Object.freeze(e)}const w=y(d);class m{constructor(e){this.currentPhaseMap=new Map,this.countdownCanvasMap=new Map,this.lastDataTime=0,this.isDeletingCanvas=!1,this.canvasWidth=80,this.canvasHeight=50,this.view=(e.type==="2d",e);const t=g.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(t.mapConfig))}async initializeLayer(){if(this.mapConfig.phaseLineLayer)if(this.phaseLineLayer)this.phaseLineLayer.visible||(this.phaseLineLayer.visible=!0);else{const e=`${this.mapConfig.assetsRoot}/${this.mapConfig.phaseLineLayer}`,o=(await(await fetch(e)).json()).features.map((i,n)=>({geometry:{type:"polyline",paths:[i.geometry.coordinates]},attributes:{ObjectID:n+1,id:i.properties.id,color:"hide"}}));this.phaseLineLayer=new p({source:o,geometryType:"polyline",objectIdField:"ObjectID",outFields:["*"],fields:[{name:"ObjectID",alias:"ObjectID",type:"oid"},{name:"color",alias:"color",type:"string"}],renderer:{type:"unique-value",field:"color",defaultSymbol:{type:"simple-line",color:"lightblue",width:"2px",style:"none"},uniqueValueInfos:[{value:"green",symbol:{type:"line-3d",symbolLayers:[{type:"path",profile:"quad",material:{color:[19,255,69,.8]},width:1,height:.5}]}},{value:"red",symbol:{type:"line-3d",symbolLayers:[{type:"path",profile:"quad",material:{color:[254,5,9,.8]},width:1,height:.5}]}},{value:"yellow",symbol:{type:"line-3d",symbolLayers:[{type:"path",profile:"quad",material:{color:[255,215,0,.8]},width:1,height:.5}]}}]}}),this.view.map.add(this.phaseLineLayer)}}async handleSignalData(e){const t=new Date().getTime();if(t-this.lastDataTime<100)return;this.lastDataTime=t;const{crossId:o,lat:i,lon:n,rtStage:s,channelsConfig:l}=e;await this.updateCountdown(o,i,n,s),this.phaseLineLayer&&((!this.currentPhaseMap.has(o)||this.currentPhaseMap.get(o)!==s.stagePhase)&&await this.updatePhaseLine(o,s.channelsConfig,l),this.currentPhaseMap.set(o,s.stagePhase))}clearSignal(){this.phaseLineLayer.visible=!1,this.countdownWatchHandel&&(this.countdownWatchHandel.remove(),this.countdownWatchHandel=void 0),this.countdownCanvasMap.forEach(e=>{this.view.container.removeChild(e.backgroundCanvas),this.view.container.removeChild(e.countdownCanvas)}),this.countdownCanvasMap.clear()}async updateCountdown(e,t,a,o){if(this.isDeletingCanvas)return;const i=this.countdownCanvasMap.get(e);if(i)this.drawCountdownText(i.countdownCanvas,o);else{const n=new u.Point({longitude:a,latitude:t,z:10}),s=this.view.toScreen(n);if(s.x>this.view.width||s.y>this.view.height)return;this.createCountdownCanvas(l=>{const c=l[0],h=l[1];c.style.left=s.x+"px",c.style.top=s.y+"px",h.style.left=s.x+"px",h.style.top=s.y+"px",this.countdownCanvasMap.set(e,{backgroundCanvas:c,countdownCanvas:h,mapPoint:n}),this.drawCountdownText(h,o)})}this.countdownWatchHandel||(this.countdownWatchHandel=w.watch(()=>this.view.extent,()=>{this.countdownCanvasMap.forEach(n=>{const s=this.view.toScreen(n.mapPoint);s.x>this.view.width||s.y>this.view.height?(this.isDeletingCanvas=!0,this.view.container.removeChild(n.backgroundCanvas),this.view.container.removeChild(n.countdownCanvas),this.countdownCanvasMap.delete(e),this.isDeletingCanvas=!1):(n.backgroundCanvas.style.left=s.x+"px",n.backgroundCanvas.style.top=s.y+"px",n.countdownCanvas.style.left=s.x+"px",n.countdownCanvas.style.top=s.y+"px")})}))}drawCountdownText(e,t){const a=e.getContext("2d");a.clearRect(0,0,e.width,e.height),a.font="32px LESLIE",a.textBaseline="middle",a.textAlign="center",a.fillStyle=t.stageRemainingTime<=t.stageAllRedTime?"red":t.stageRemainingTime<=t.stageAllRedTime+t.stageYellowTime?"yellow":"lime",a.fillText(t.stageRemainingTime,e.width/2,e.height/2)}async updatePhaseLine(e,t,a){const o=this.phaseLineLayer.source.filter(i=>i.getAttribute("id").includes(e));o.forEach(i=>{const n=i.getAttribute("id");this.isLaneInChannels(n,t)?i.setAttribute("color","green"):this.isLaneInChannels(n,a)?i.setAttribute("color","red"):i.setAttribute("color","green")}),await this.phaseLineLayer.applyEdits({updateFeatures:o})}isLaneInChannels(e,t){const a=e.split("+"),o=a[1],i=a[2];for(let n=0;n<t.length;n++)for(let s=0;s<t[n].laneSnList.length;s++){const l=t[n].laneSnList[s].toFixed(0);if(o===l[0]&&i===l[1])return!0}return!1}createCountdownCanvas(e){const t=new Image;t.src=`${this.mapConfig.assetsRoot}/Images/timeboard/CountdownBG.png`,t.onload=()=>{const a=document.createElement("canvas");a.width=this.canvasWidth,a.height=this.canvasHeight,a.style.position="absolute",a.style.transform="translate(-50%, -50%)",a.getContext("2d").drawImage(t,0,0,this.canvasWidth,this.canvasHeight),this.view.container.appendChild(a);const i=document.createElement("canvas");i.width=this.canvasWidth-10,i.height=this.canvasHeight-10,i.style.position="absolute",i.style.transform="translate(-50%, -50%)",this.view.container.appendChild(i),e([a,i])}}}exports.default=m;
@@ -0,0 +1,69 @@
1
+ import { EVehiclePlateState, ITraceRendererInterface, IVehicleTrack } from '../../../types';
2
+ export default class TraceExternalRenderer implements ITraceRendererInterface {
3
+ private renderer;
4
+ private scene;
5
+ private camera;
6
+ private ambient;
7
+ private sun;
8
+ /** 默认车身材质 */
9
+ private defaultMaterial;
10
+ /** 车身颜色材质 */
11
+ private materialMap;
12
+ private readonly view;
13
+ private readonly assetsRoot;
14
+ private carModel;
15
+ private carModelReady;
16
+ private vanModel;
17
+ private vanModelReady;
18
+ private truckModel;
19
+ private truckModelReady;
20
+ private busModel;
21
+ private busModelReady;
22
+ private bicycleModel;
23
+ private bicycleModelReady;
24
+ private currentSpriteContent;
25
+ private historyPositionMap;
26
+ private vehicleObjectMap;
27
+ constructor(view: __esri.SceneView);
28
+ setup(context: any): Promise<void>;
29
+ render(context: any): Promise<void>;
30
+ /**
31
+ * 新增车辆
32
+ * */
33
+ addVehicles(objects: IVehicleTrack[]): void;
34
+ /**
35
+ * 更新车辆
36
+ * */
37
+ updateVehicles(objects: IVehicleTrack[]): void;
38
+ /**
39
+ * 删除车辆
40
+ * */
41
+ deleteVehicles(idList: string[]): void;
42
+ /**
43
+ * 清除全部车辆
44
+ * */
45
+ clearVehicles(): void;
46
+ /**
47
+ * 设置号牌显示状态
48
+ * @param contentType
49
+ * @returns
50
+ */
51
+ updatePanelContent(contentType: EVehiclePlateState): void;
52
+ /**
53
+ * 释放模型资源
54
+ * */
55
+ private disposeModel;
56
+ /**
57
+ * 计算车辆位置
58
+ * */
59
+ private computeVehiclePosition;
60
+ /**
61
+ * 根据车辆类型、车身颜色获取模型
62
+ * */
63
+ private getVehicleModel;
64
+ /**
65
+ * 创建号牌canvas
66
+ * */
67
+ private createCanvas;
68
+ private createPlateSprite;
69
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("@arcgis/core/geometry/SpatialReference"),R=require("@arcgis/core/views/3d/externalRenderers"),S=require("three"),P=require("three/examples/jsm/loaders/GLTFLoader.js"),p=require("../../../types/index.js"),T=require("../../stores/index.js");function b(u){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(u){for(const e in u)if(e!=="default"){const t=Object.getOwnPropertyDescriptor(u,e);Object.defineProperty(i,e,t.get?t:{enumerable:!0,get:()=>u[e]})}}return i.default=u,Object.freeze(i)}const y=b(R),o=b(S);class C{constructor(i){this.defaultMaterial=new o.MeshBasicMaterial({color:6908265}),this.materialMap=new Map([[1,new o.MeshBasicMaterial({color:16777215})],[2,new o.MeshBasicMaterial({color:7833753})],[3,new o.MeshBasicMaterial({color:16766720})],[4,new o.MeshBasicMaterial({color:16758465})],[5,new o.MeshBasicMaterial({color:14423100})],[6,new o.MeshBasicMaterial({color:3329330})],[7,new o.MeshBasicMaterial({color:2003183})],[8,new o.MeshBasicMaterial({color:16032864})],[9,new o.MeshBasicMaterial({color:2105376})],[10,new o.MeshBasicMaterial({color:9662683})],[99,new o.MeshBasicMaterial({color:6908265})]]),this.carModelReady=!1,this.vanModelReady=!1,this.truckModelReady=!1,this.busModelReady=!1,this.bicycleModelReady=!1,this.currentSpriteContent=p.EVehiclePlateState.None,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map;const e=T.default.useAppDataStore;this.assetsRoot=JSON.parse(JSON.stringify(e.mapConfig)).assetsRoot,this.view=i;const t=new P.GLTFLoader;t.load(`${this.assetsRoot}/3DModels/car.glb`,s=>{this.carModel=s.scene,this.carModel.rotation.x=o.MathUtils.degToRad(90),this.carModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/van.glb`,s=>{this.vanModel=s.scene,this.vanModel.rotation.x=o.MathUtils.degToRad(90),this.vanModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/truck.glb`,s=>{this.truckModel=s.scene,this.truckModel.scale.set(1.2,1,1.5),this.truckModel.rotation.x=o.MathUtils.degToRad(90),this.truckModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/bus.glb`,s=>{this.busModel=s.scene,this.busModel.rotation.x=o.MathUtils.degToRad(90),this.busModelReady=!0}),t.load(`${this.assetsRoot}/3DModels/bicycle.glb`,s=>{this.bicycleModel=s.scene,this.bicycleModel.rotation.x=o.MathUtils.degToRad(90),this.bicycleModel.rotation.y=o.MathUtils.degToRad(180),this.bicycleModelReady=!0})}async setup(i){this.renderer=new o.WebGLRenderer({context:i.gl,premultipliedAlpha:!1,antialias:!0}),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setViewport(0,0,this.view.width,this.view.height),this.renderer.autoClearDepth=!1,this.renderer.autoClearStencil=!1,this.renderer.autoClearColor=!1;const e=this.renderer.setRenderTarget.bind(this.renderer);this.renderer.setRenderTarget=t=>{e(t),t==null&&i.bindRenderTarget()},this.scene=new o.Scene,this.camera=new o.PerspectiveCamera,this.ambient=new o.AmbientLight(16777215,.5),this.scene.add(this.ambient),this.sun=new o.DirectionalLight(16777215,.5),this.scene.add(this.sun),i.resetWebGLState()}async render(i){var s;const e=i.camera;this.camera.position.set(e.eye[0],e.eye[1],e.eye[2]),this.camera.up.set(e.up[0],e.up[1],e.up[2]),this.camera.lookAt(new o.Vector3(e.center[0],e.center[1],e.center[2])),this.camera.projectionMatrix.fromArray(e.projectionMatrix);for(const r of this.vehicleObjectMap.keys()){const l=(s=this.vehicleObjectMap.get(r))==null?void 0:s.model;if(!l)continue;const a=this.computeVehiclePosition(r);if(a){const c=[0,0,0];y.toRenderCoordinates(this.view,a,0,w.WGS84,c,0,1),l.position.set(c[0],c[1],c[2]),l.rotation.y=o.MathUtils.degToRad(-a[3])}}const t=i.sunLight;this.sun.position.set(t.direction[0],t.direction[1],t.direction[2]),this.sun.intensity=t.diffuse.intensity,this.sun.color=new o.Color(t.diffuse.color[0],t.diffuse.color[1],t.diffuse.color[2]),this.ambient.intensity=t.ambient.intensity,this.ambient.color=new o.Color(t.ambient.color[0],t.ambient.color[1],t.ambient.color[2]),this.renderer.resetState(),i.bindRenderTarget(),this.renderer.render(this.scene,this.camera),y.requestRender(this.view),i.resetWebGLState()}addVehicles(i){!this.carModelReady||!this.vanModelReady||!this.truckModelReady||!this.busModelReady||!this.bicycleModelReady||i.forEach(e=>{const{crossId:t,ptcId:s,localTimestamp:r}=e,l=Number(e.x),a=Number(e.y),c=Number(e.heading),h=`${t}-${s}`;this.historyPositionMap.set(h,[{pos:[l,a,0],heading:c,time:r}]);const n=this.getVehicleModel(e);n.name=h,n.visible=!1,this.createPlateSprite(e,d=>{n.add(d),d.position.set(0,5,-4)}),this.scene.add(n),this.vehicleObjectMap.set(h,{model:n,data:e})})}updateVehicles(i){!this.carModelReady||!this.vanModelReady||!this.truckModelReady||!this.busModelReady||!this.bicycleModelReady||i.forEach(e=>{const{crossId:t,ptcId:s,localTimestamp:r}=e,l=Number(e.x),a=Number(e.y);let c=Number(e.heading);const h=`${t}-${s}`,n=this.vehicleObjectMap.get(h);if(n){if((n.data.vehicleColor!==e.vehicleColor||n.data.vehicleType!==e.vehicleType)&&(this.scene.remove(n.model),this.disposeModel(n.model),n.model=this.getVehicleModel(e),this.scene.add(n.model)),n.data.showName!==e.showName||n.data.plateColor!==e.plateColor){const f=n.model.getObjectByName("VehiclePlate");f&&(n.model.remove(f),this.disposeModel(f)),this.createPlateSprite(e,g=>{n.model.add(g),g.position.set(0,5,-4)})}n.data=e;const d=this.historyPositionMap.get(h),M=d[d.length-1];Math.abs(c-M.heading)>=180&&(c>M.heading?M.heading+=360:c+=360),d.push({pos:[l,a,0],heading:c,time:r})}else{this.historyPositionMap.set(h,[{pos:[l,a,0],heading:c,time:r}]);const d=this.getVehicleModel(e);d.name=h,d.visible=!1,this.createPlateSprite(e,M=>{d.add(M),M.position.set(0,5,-4)}),this.scene.add(d),this.vehicleObjectMap.set(h,{model:d,data:e})}})}deleteVehicles(i){i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(this.disposeModel(t.model),this.scene.remove(t.model),this.vehicleObjectMap.delete(e),this.historyPositionMap.delete(e))})}clearVehicles(){for(const i of this.vehicleObjectMap.keys()){const e=this.vehicleObjectMap.get(i);e&&(this.disposeModel(e.model),this.scene.remove(e.model))}this.vehicleObjectMap.clear(),this.historyPositionMap.clear()}updatePanelContent(i){if(i!==this.currentSpriteContent){this.currentSpriteContent=i;for(const e of this.vehicleObjectMap.keys()){const t=this.vehicleObjectMap.get(e);if(t){const s=t.model.getObjectByName("VehiclePlate");s&&(t.model.remove(s),this.disposeModel(s)),i!==p.EVehiclePlateState.None&&this.createPlateSprite(t.data,r=>{t.model.add(r),r.position.set(0,5,-4)})}}}}disposeModel(i){i.traverse(e=>{e instanceof o.Mesh&&(e.geometry.dispose(),e.material.dispose())})}computeVehiclePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!t||!e)return[0,0,0,0];if(e.length===0)return[0,0,0,0];if(e.length<=2)return[...e[0].pos,e[0].heading];const s=Date.now();t.model.visible=!0,t.segmentStartTime||(t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time);const r=s-t.segmentStartTime,l=Math.min(r/t.segmentTotalTime,1);if(l===1)if(e.shift(),e.length===1){t.segmentStartTime=void 0;return}else return t.segmentStartTime=s,t.segmentTotalTime=e[1].time-e[0].time,Math.abs(e[1].heading-e[0].heading)>=180&&(e[1].heading>e[0].heading?e[0].heading+=360:e[1].heading+=360),[...e[0].pos,e[0].heading];else{const a=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*l,c=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*l,h=e[0].heading+(e[1].heading-e[0].heading)*l;return[a,c,0,h]}}getVehicleModel(i){let e;if(i.ptcType===2)e=this.bicycleModel.clone();else{switch(i.vehicleType){case 10:e=this.carModel.clone();break;case 20:e=this.vanModel.clone();break;case 25:e=this.truckModel.clone();break;case 50:e=this.busModel.clone();break;default:e=this.carModel.clone();break}const t=this.materialMap.get(i.vehicleColor)||this.defaultMaterial;let s=!1;e.traverse(r=>{!s&&r instanceof o.Mesh&&(r.material=t,s=!0)})}return e}createCanvas(i,e,t){const s=document.createElement("canvas"),r=i.width,l=i.height;s.width=r,s.height=l;const a=s.getContext("2d");if(!a){console.log("canvas创建失败");return}return a.fillStyle="rgba(0,0,0,0.0)",a.fillRect(0,0,r,l),a.drawImage(i,0,0,r,l),a.beginPath(),a.translate(r/2,l/2),a.fillStyle=t,a.font="bold 32px 宋体",a.textBaseline="middle",a.textAlign="center",a.fillText(e,0,0),s}createPlateSprite(i,e){var c,h;const t=!i.plateNo||i.plateNo==="0"||i.plateNo==="000000";if(this.currentSpriteContent===p.EVehiclePlateState.None||this.currentSpriteContent===p.EVehiclePlateState.PlateNumber&&t)return;const s=new Image;let r="",l="",a="";if(this.currentSpriteContent===p.EVehiclePlateState.PlateNumber||this.currentSpriteContent===p.EVehiclePlateState.Mix)if(t)r="grey",l=i.ptcId,a="#ffffff";else switch(l=((c=i.showName)==null?void 0:c.substring(0,2))+"•"+((h=i.showName)==null?void 0:h.substring(2)),i.plateColor){case 1:r="blue",a="#ffffff";break;case 2:r="yellow",a="#000000";break;case 3:r="white",a="#000000";break;case 4:r="black";break;case 5:r="neo_yellow",a="#000000";break;case 6:r="neo_green",a="#000000";break;default:r="grey",l=i.plateNo,a="#ffffff";break}else this.currentSpriteContent===p.EVehiclePlateState.Id&&(r="grey",l=i.ptcId,a="#ffffff");s.src=`${this.assetsRoot}/Images/PlateBG/${r}.png`,s.onload=()=>{const n=this.createCanvas(s,l,a);if(!n)return;const d=new o.CanvasTexture(n),M=new o.SpriteMaterial({map:d}),m=new o.Sprite(M),f=.05,g=n.width*f,v=n.height*f;m.scale.set(g,v,1),m.name="VehiclePlate",e(m)}}}exports.default=C;
@@ -0,0 +1,18 @@
1
+ import { EVehiclePlateState } from '../../../types';
2
+ export default class TraceHoloFlow {
3
+ private mapConfig;
4
+ private view;
5
+ private lastDataTime;
6
+ private readonly traceRenderer;
7
+ constructor(view: __esri.View);
8
+ /**
9
+ * 处理全息流轨迹数据
10
+ * */
11
+ handleVehicleTraceData(data: any): void;
12
+ /**
13
+ * 清除轨迹流
14
+ * */
15
+ clearTrace(): void;
16
+ updatePanelContent(contentType: EVehiclePlateState): void;
17
+ private buildVehicleTrackData;
18
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const m=require("@arcgis/core/views/3d/externalRenderers"),f=require("../../stores/index.js"),T=require("./trace-external-renderer.js"),g=require("./trace-layer-renderer.js");function b(i){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(i){for(const r in i)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(i,r);Object.defineProperty(e,r,o.get?o:{enumerable:!0,get:()=>i[r]})}}return e.default=i,Object.freeze(e)}const y=b(m);class D{constructor(e){this.lastDataTime=0,this.view=e;const r=f.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(r.mapConfig)),e.type==="3d"?(this.traceRenderer=new T.default(e),y.add(e,this.traceRenderer)):this.traceRenderer=new g.default(e)}handleVehicleTraceData(e){const r=new Date().getTime();if(r-this.lastDataTime<100)return;this.lastDataTime=r;const{newVehList:a,updateVehList:l,deleteVehList:c,crossId:s}=e,u=[],p=[];if(a&&a.length>0){for(const t of a){const n=this.buildVehicleTrackData(t,s);n&&u.push(n)}this.traceRenderer.addVehicles(u)}if(l&&l.length>0){for(const t of l){const n=this.buildVehicleTrackData(t,s);n&&p.push(n)}this.traceRenderer.updateVehicles(p)}if(c&&c.length>0){const t=c.map(n=>s+"-"+n.ptcId);this.traceRenderer.deleteVehicles(t)}}clearTrace(){this.traceRenderer.clearVehicles()}updatePanelContent(e){this.traceRenderer.updatePanelContent(e)}buildVehicleTrackData(e,r){const o=e.longitude,a=e.latitude,l=e.ptcId,c=Number(e.ptcType),s=e.heading,u=Number(e.vehicleType),p=Number(e.vehicleColor),t=e.plateNo||e.plateno,n=Number(e.plateColor),d=e.timestamp,h=e.localTimestamp;if(!(c<0||c>8))return{ptcId:l,crossId:r,x:o,y:a,ptcType:c,vehicleType:u,heading:c===2?-s:s,vehicleColor:p,showName:t&&t!==""&&t!=="0"&&t!=="000000"?t:"",plateNo:t,plateColor:n,timestamp:d,localTimestamp:h}}}exports.default=D;
@@ -0,0 +1,35 @@
1
+ import { EVehiclePlateState, ITraceRendererInterface, IVehicleTrack } from '../../../types';
2
+ export default class TraceLayerRenderer implements ITraceRendererInterface {
3
+ private view;
4
+ private readonly vehicleLayer;
5
+ private mapConfig;
6
+ constructor(view: __esri.MapView);
7
+ private showVehiclePlate;
8
+ private historyPositionMap;
9
+ private vehicleObjectMap;
10
+ addVehicles(objects: IVehicleTrack[]): void;
11
+ updateVehicles(objects: IVehicleTrack[]): void;
12
+ deleteVehicles(idList: string[]): void;
13
+ clearVehicles(): void;
14
+ updatePanelContent(contentType: EVehiclePlateState): void;
15
+ private render;
16
+ private updatePosition;
17
+ /**
18
+ * 基于轨迹数据创建cim符号,显示车辆图标和车牌号码
19
+ * @param vehTrack
20
+ * @returns
21
+ */
22
+ private createCIMSymbol;
23
+ /**
24
+ * 根据车身颜色属性返回对应的车辆图标
25
+ * @param carColor
26
+ * @returns
27
+ */
28
+ private getCarPic;
29
+ /**
30
+ * 根据号牌颜色属性获取填充色和背景色
31
+ * @param plateColor
32
+ * @returns
33
+ */
34
+ private getPlateFontColor;
35
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const g=require("@arcgis/core/Graphic"),y=require("@arcgis/core/layers/GraphicsLayer"),d=require("../../stores/index.js");class b{constructor(i){this.showVehiclePlate=!1,this.historyPositionMap=new Map,this.vehicleObjectMap=new Map,this.view=i;const e=d.default.useAppDataStore;this.mapConfig=JSON.parse(JSON.stringify(e.mapConfig)),this.vehicleLayer=new y({id:"vehicleLayer"}),this.view.map.add(this.vehicleLayer),requestAnimationFrame(()=>this.render())}addVehicles(i){const e=i.map(t=>{const{crossId:o,ptcId:c,localTimestamp:a}=t,r=Number(t.x),n=Number(t.y),s=Number(t.heading),h=`${o}-${c}`;this.historyPositionMap.set(h,[{pos:[r,n,0],heading:s,time:a}]);const l=new g({geometry:{type:"point",x:r,y:n},attributes:{...t},symbol:this.createCIMSymbol(t)});return l.visible=!1,this.vehicleObjectMap.set(h,{graphic:l,data:t}),l});this.vehicleLayer.addMany(e)}updateVehicles(i){const e=[];i.forEach(t=>{const{crossId:o,ptcId:c,localTimestamp:a}=t,r=Number(t.x),n=Number(t.y);let s=Number(t.heading);const h=`${o}-${c}`,l=this.vehicleObjectMap.get(h);if(l){l.data=t;const p=this.historyPositionMap.get(h),m=p[p.length-1];Math.abs(s-m.heading)>=180&&(s>m.heading?m.heading+=360:s+=360),p.push({pos:[r,n,0],heading:s,time:a})}else e.push(t)}),this.addVehicles(e)}deleteVehicles(i){i.forEach(e=>{const t=this.vehicleObjectMap.get(e);t&&(this.vehicleLayer.remove(t.graphic),this.vehicleObjectMap.delete(e),this.historyPositionMap.delete(e))})}clearVehicles(){this.vehicleLayer.removeAll(),this.vehicleObjectMap.clear(),this.historyPositionMap.clear()}updatePanelContent(i){console.log(i)}render(){this.vehicleObjectMap.forEach((i,e)=>{this.updatePosition(e)}),requestAnimationFrame(()=>this.render())}updatePosition(i){const e=this.historyPositionMap.get(i),t=this.vehicleObjectMap.get(i);if(!e||!t||e.length<2)return;const o=Date.now();t.graphic.visible=!0,t.segmentStartTime||(t.segmentStartTime=o,t.segmentTotalTime=e[1].time-e[0].time);const c=o-t.segmentStartTime,a=Math.min(1,c/t.segmentTotalTime);if(a===1)if(e.shift(),e.length===1){t.segmentStartTime=void 0,t.segmentTotalTime=void 0;return}else t.segmentStartTime=o,t.segmentTotalTime=e[1].time-e[0].time,Math.abs(e[1].heading-e[0].heading)>=180&&(e[1].heading>e[0].heading?e[0].heading+=360:e[1].heading+=360),t.graphic.geometry={type:"point",x:e[0].pos[0],y:e[0].pos[1]};else{const r=e[0].pos[0]+(e[1].pos[0]-e[0].pos[0])*a,n=e[0].pos[1]+(e[1].pos[1]-e[0].pos[1])*a,s=e[0].heading+(e[1].heading-e[0].heading)*a;t.graphic.geometry={type:"point",x:r,y:n},t.data.heading=s,t.graphic.symbol=this.createCIMSymbol(t.data)}}createCIMSymbol(i){const e=this.getPlateFontColor(i.plateColor);return{type:"cim",data:{type:"CIMSymbolReference",primitiveOverrides:[{type:"CIMPrimitiveOverride",primitiveName:"textGraphic",propertyName:"TextString",valueExpressionInfo:{type:"CIMExpressionInfo",title:"Custom",expression:"$feature.showName",returnType:"Default"}}],symbol:{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:this.showVehiclePlate,size:32,colorLocked:!0,anchorPointUnits:"Relative",frame:{xmin:-8,ymin:-8,xmax:8,ymax:8},markerGraphics:[{type:"CIMMarkerGraphic",primitiveName:"textGraphic",geometry:{x:0,y:0},symbol:{type:"CIMTextSymbol",height:4,horizontalAlignment:"Center",offsetX:0,offsetY:8,haloSize:1,haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:e.backgroundColor}]},symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:e.fillColor}]},verticalAlignment:"Center"},textString:""}],scaleSymbolsProportionally:!0,respectFrame:!0},{type:"CIMPictureMarker",enable:!0,anchorPoint:{x:0,y:0},anchorPointUnits:"Relative",size:30,rotation:i.heading,rotateClockwise:!0,textureFilter:"Picture",url:`${this.mapConfig.assetsRoot}Images/car/${this.getCarPic(i.vehicleColor)}`}]}}}}getCarPic(i){if(this.view.zoom<=15)return"point.png";let e="grey";switch(typeof i=="string"&&(i=i.toLowerCase()),i){case"a":case 1:e="white";break;case"b":case 2:e="grey";break;case"c":case 3:e="yellow";break;case"d":case 4:e="pink";break;case"e":case 5:e="red";break;case"f":case 10:e="purple";break;case"g":case 6:e="green";break;case"h":case 7:e="blue";break;case"i":case 8:e="brown";break;case"j":case 9:e="black";break}return e+".png"}getPlateFontColor(i){let e=[255,255,255,255],t=[169,169,169,255];switch(i){case 0:e=[0,0,0,255],t=[255,255,255,255];break;case 1:e=[0,0,0,255],t=[244,164,96,255];break;case 2:e=[255,255,255,255],t=[65,105,225,255];break;case 3:e=[255,255,255,255],t=[0,0,0,255];break;case 15:e=[244,164,96,255],t=[0,250,154,255];break;case 16:e=[0,0,0,255],t=[0,250,154,255];break}return{fillColor:e,backgroundColor:t}}}exports.default=b;
@@ -0,0 +1,21 @@
1
+ import FlyToPoints from './FlyToPoints';
2
+ import MapInitializer from './map-initializer';
3
+ import Overlay from './overlay';
4
+ import RoadConfigTool from './road-config-tool';
5
+ import SketchView from './sketchView';
6
+ import sketchViewTool from './sketchViewTool';
7
+ import GreenWaveLine from './GreenWaveline';
8
+ import BaseLayers from './Layers';
9
+ import SyncMapView from './syncMapView';
10
+ declare const MapUtils: {
11
+ MapInitializer: typeof MapInitializer;
12
+ RoadConfigTool: typeof RoadConfigTool;
13
+ FlyToPoints: typeof FlyToPoints;
14
+ Overlay: typeof Overlay;
15
+ SketchView: typeof SketchView;
16
+ sketchViewTool: typeof sketchViewTool;
17
+ SyncMapView: typeof SyncMapView;
18
+ GreenWaveLine: typeof GreenWaveLine;
19
+ BaseLayers: typeof BaseLayers;
20
+ };
21
+ export default MapUtils;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./FlyToPoints.js"),t=require("./map-initializer.js"),i=require("./overlay.js"),r=require("./road-config-tool/index.js"),a=require("./sketchView.js"),o=require("./sketchViewTool.js"),l=require("./GreenWaveline.js"),u=require("./Layers.js"),n=require("./syncMapView.js"),s={MapInitializer:t.default,RoadConfigTool:r.default,FlyToPoints:e.default,Overlay:i.default,SketchView:a.default,sketchViewTool:o.default,SyncMapView:n.default,GreenWaveLine:l.default,BaseLayers:u.default};exports.default=s;
@@ -0,0 +1,50 @@
1
+ import MapView from '@arcgis/core/views/MapView';
2
+ import SceneView from '@arcgis/core/views/SceneView';
3
+ import { ILookAtParams, IResult, ISetMapCameraParams, ISetMapCenterParams } from '../../types';
4
+ export default class MapInitializer {
5
+ private view;
6
+ private mapConfig;
7
+ /**
8
+ * 初始化地图
9
+ * @param params 容器
10
+ * @returns view
11
+ */
12
+ initialize(params: {
13
+ container: HTMLElement;
14
+ markerClickCallback?: (type: string, id: string, detail: any, event?: any) => void;
15
+ mapClickCallback?: (mapPoint: number[], screenPoint: number[], event?: any) => void;
16
+ }): Promise<MapView | SceneView>;
17
+ /**
18
+ * 设置地图中心点
19
+ * @param params
20
+ * @returns
21
+ */
22
+ setMapCenter(params: ISetMapCenterParams): Promise<IResult>;
23
+ /**
24
+ * 在一定的高度,以一定的角度去观察某个坐标
25
+ * */
26
+ lookAt(params: ILookAtParams): Promise<void>;
27
+ setMapCamera(params: ISetMapCameraParams): Promise<IResult>;
28
+ private watchHandleMap;
29
+ private handleIndex;
30
+ /**
31
+ * 经纬度转像素坐标,在地图移动时回调
32
+ * */
33
+ requestCoordinateTransform(points: number[][], callback: (points: number[][]) => void): {
34
+ handle: number;
35
+ points: number[][];
36
+ };
37
+ private transformPoints;
38
+ /**
39
+ * 停止坐标转换回调
40
+ * */
41
+ cancelCoordinateTransform(handleIndex: number): void;
42
+ private zoomWatchHandle;
43
+ /**
44
+ * 设置地图zoom范围
45
+ * */
46
+ setMapZoomRange(zoomRange: {
47
+ min?: number;
48
+ max?: number;
49
+ }): void;
50
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const v=require("@arcgis/core/Basemap"),P=require("@arcgis/core/Map"),p=require("@arcgis/core/config"),T=require("@arcgis/core/core/reactiveUtils"),z=require("@arcgis/core/geometry"),k=require("@arcgis/core/geometry/support/webMercatorUtils"),q=require("@arcgis/core/layers/GeoJSONLayer"),O=require("@arcgis/core/layers/TileLayer"),S=require("@arcgis/core/layers/WebTileLayer"),x=require("@arcgis/core/views/MapView"),W=require("@arcgis/core/views/SceneView"),L=require("@turf/destination"),I=require("@turf/helpers"),R=require("../stores/index.js");function g(r){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const s in r)if(s!=="default"){const t=Object.getOwnPropertyDescriptor(r,s);Object.defineProperty(e,s,t.get?t:{enumerable:!0,get:()=>r[s]})}}return e.default=r,Object.freeze(e)}const M=g(T),f=g(k),_=g(I);function m(r,e){return r.startsWith("http://")||r.startsWith("https://")?r:e+r}class H{constructor(){this.mapConfig={},this.watchHandleMap=new Map,this.handleIndex=0,this.zoomWatchHandle=null}async initialize(e){const s=R.default.useAppDataStore,t=JSON.parse(JSON.stringify(s.mapConfig));this.mapConfig=t;const{container:a,markerClickCallback:h,mapClickCallback:w}=e;p.assetsPath=`${t.assetsRoot}/ArcgisAssets`,p.fontsUrl=`${t.assetsRoot}/fonts`,p.apiKey="AAPKf5a3e1044d7a4faeb3b1ec7060f5c68equIrP2KbRyL-t_b40Kk4GTWUQ1BFCyttvyQPQnWpFmBd7kp9gkrVihjfmcKBwxjW";const c=new P;if((t==null?void 0:t.mapOptions.mode.toLowerCase())==="2d"?this.view=new x({map:c,container:a,...t.mapOptions}):this.view=new W({map:c,container:a,...t==null?void 0:t.mapOptions}),this.view.on("click",async i=>{var b,y;if(w){let o=i.mapPoint;o.spatialReference.isWebMercator&&(o=f.webMercatorToGeographic(o)),w([o.x,o.y],[i.screenPoint.x,i.screenPoint.y],i)}if(this.view.type==="3d"){const o=this.view.camera;if(this.view.spatialReference.isWebMercator){const u=f.webMercatorToGeographic(o.position),d={heading:o.heading,tilt:o.tilt,position:u.toJSON()};console.log(d),(b=navigator.clipboard)==null||b.writeText(JSON.stringify(d))}else console.log(o.toJSON())}else{let o=this.view.center;this.view.spatialReference.isWebMercator&&(o=f.webMercatorToGeographic(o)),console.log({center:o.toJSON(),zoom:this.view.zoom})}const l=(y=(await this.view.hitTest(i)).results)==null?void 0:y.filter(o=>o.type==="graphic");l.length>0&&l.forEach(o=>{var d;const u=o.graphic;(d=u.attributes)!=null&&d.type&&h&&h(u.attributes.type,u.attributes.id,u.attributes,i)})}),t!=null&&t.baseLayers?t.baseLayers.forEach(i=>{switch(i.type.toLowerCase()){case"webTile".toLowerCase():{const n=m(i.url,t.assetsRoot),l=new S({urlTemplate:n,...i.options});c.add(l);break}case"tile":{const n=m(i.url,t.assetsRoot),l=new O({url:n,...i.options});c.add(l);break}case"arcgis":{const n=new v(i.options);c.basemap=n;break}}}):c.basemap=new v({style:{id:"arcgis/dark-gray",language:"zh-CN"}}),t!=null&&t.hdLayers){const i=t.hdLayers.map(n=>new q({url:m(n.url,t.assetsRoot),...n.options,title:n.options.id}));c.addMany(i)}return this.view.ui.remove("attribution"),this.view.ui.add("compass","top-left"),await this.view.when(),this.view}async setMapCenter(e){return this.view?(e.center?await this.view.goTo({target:e.center,zoom:e.zoom},{duration:(e.duration||0)*1e3}):e.camera&&await this.view.goTo(e.camera,{duration:(e.duration||0)*1e3}),{status:0,message:"成功"}):{status:-1,message:"未初始化"}}async lookAt(e){if(this.view.type==="2d")return;const s=e.tilt||0,t=e.heading||0;if(s===0)await this.view.goTo({position:{x:e.center[0],y:e.center[1],z:e.height},heading:t,tilt:0},{duration:(e.duration||2)*1e3});else{const a=Math.tan(s*Math.PI/180)*e.height,h=L(_.point(e.center),a,180,{units:"meters"});await this.view.goTo({position:{x:h.geometry.coordinates[0],y:h.geometry.coordinates[1],z:e.height},heading:t,tilt:s},{duration:(e.duration||2)*1e3})}}async setMapCamera(e){if(!this.view)return{status:-1,message:"未初始化"};const{crossId:s,duration:t=0}=e,{camera:a}=this.mapConfig;return a?a[s]?(await this.view.goTo({target:a.center,zoom:e.zoom||15},{duration:t*1e3}),{status:0,message:"成功"}):{status:-1,message:"未配置camera"}:{status:-1,message:"未配置camera"}}requestCoordinateTransform(e,s){let t=0;const h=1e3/30,w=M.watch(()=>this.view.center,()=>{const c=this.transformPoints(e),i=Date.now();i-t>h&&(s(c),t=i)});return this.handleIndex++,this.watchHandleMap.set(this.handleIndex,w),{handle:this.handleIndex,points:this.transformPoints(e)}}transformPoints(e){return e.map(s=>{const t=new z.Point({x:s[0],y:s[1]}),a=this.view.toScreen(t);return[a.x,a.y]})}cancelCoordinateTransform(e){const s=this.watchHandleMap.get(e);s&&(s.remove(),this.watchHandleMap.delete(e))}setMapZoomRange(e){const{min:s,max:t}=e;!s&&!t||(this.zoomWatchHandle&&this.zoomWatchHandle.remove(),this.zoomWatchHandle=M.watch(()=>this.view.zoom,a=>{s&&a<=s&&(this.view.zoom=s),t&&a>=t&&(this.view.zoom=t)}))}}exports.default=H;
@@ -0,0 +1,9 @@
1
+ import View from '@arcgis/core/views/View';
2
+ export default class OpenDriveRenderer {
3
+ private readonly view;
4
+ private laneLayer;
5
+ constructor(view: View);
6
+ showOpenDrive(server: string, projectName: string): Promise<void>;
7
+ private showRoad;
8
+ hideOpenDrive(): Promise<void>;
9
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const h=require("@arcgis/core/Graphic"),w=require("@arcgis/core/layers/FeatureLayer"),m=require("axios"),f=require("pako");class b{constructor(e){this.view=e,this.laneLayer=new w({id:"OpenDriveLane",fields:[{name:"ObjectID",alias:"ObjectID",type:"oid"},{name:"id",alias:"编号",type:"string"},{name:"roadId",alias:"道路号",type:"string"},{name:"roadName",alias:"道路名称",type:"string"},{name:"sectionId",alias:"路段号",type:"string"},{name:"laneId",alias:"车道号",type:"string"},{name:"type",alias:"类型",type:"string"}],objectIdField:"ObjectID",geometryType:"polygon",spatialReference:{wkid:4326},source:[],outFields:["*"],renderer:{type:"unique-value",field:"type",defaultSymbol:{type:"simple-fill",color:[100,100,100],style:"solid",outline:{color:"white",width:1}},uniqueValueInfos:[{value:"shoulder",label:"路肩",symbol:{type:"simple-fill",color:"#008000",style:"solid",outline:{color:"white",width:1}}},{value:"border",label:"路沿",symbol:{type:"simple-fill",color:"#DCDCDC",style:"solid",outline:{color:"white",width:1}}},{value:"driving",label:"机动车道",symbol:{type:"simple-fill",color:"#2F4F4F",style:"solid",outline:{color:"white",width:1}}},{value:"none",label:"无",symbol:{type:"simple-fill",color:[111,120,135],style:"none",outline:{color:"white",width:1}}},{value:"restricted",label:"禁行区",symbol:{type:"simple-fill",color:"yellow",style:"solid",outline:{color:"yellow",width:2}}},{value:"parking",label:"停车区",symbol:{type:"simple-fill",color:[115,115,115],style:"solid",outline:{color:"white",width:1}}},{value:"median",label:"中央隔离带",symbol:{type:"simple-fill",color:"#008000",style:"solid",outline:{color:"white",width:1}}},{value:"biking",label:"非机动车道",symbol:{type:"simple-fill",color:"#D3D3D3",style:"solid",outline:{color:"white",width:1}}},{value:"sidewalk",label:"人行道",symbol:{type:"simple-fill",color:"#C0C0C0",style:"solid",outline:{color:"white",width:1}}},{value:"junction",label:"路口区域",symbol:{type:"simple-fill",color:"#2F4F4F",style:"solid",outline:{color:"white",width:1}}},{value:"selected",label:"选中车道",symbol:{type:"simple-fill",color:[141,168,211],style:"solid",outline:{color:"white",width:1}}}]}}),this.view.map.add(this.laneLayer)}async showOpenDrive(e,i){const t=`http://${e}/api/openDrive/analyzeXodr`,o=await m.get(t,{headers:{projectName:i},params:{analyze:!1,compressed:!0}});if(o.status!==200)throw new Error(`OpenDriveRenderer: ${o.statusText}`);let l=o.data.result.json;l.startsWith("http")||(l=`http://${e}${l}`);const r=await(await fetch(l)).arrayBuffer(),n=f.inflate(r,{to:"string"}),a=JSON.parse(n);this.showRoad(a)}async showRoad(e){const i=await this.laneLayer.queryFeatures();i.features.length>0&&this.laneLayer.applyEdits({deleteFeatures:i.features});for(const t of e){const o=t.id,l=[];for(const s of t.laneSections){const r=s.id;for(const n of s.lanePaths){const{id:a,type:c,innerPath:d,outerPath:p}=n,y=d.concat(p.reverse());y.push(d[0]);const u=new h({geometry:{type:"polygon",rings:[y]},attributes:{id:a,roadId:o,roadName:t.name,sectionId:r,laneId:a,type:c}});l.push(u)}}await this.laneLayer.applyEdits({addFeatures:l})}}async hideOpenDrive(){const e=await this.laneLayer.queryFeatures();e.features.length>0&&this.laneLayer.applyEdits({deleteFeatures:e.features})}}exports.default=b;
@@ -0,0 +1,83 @@
1
+ import Graphic from '@arcgis/core/Graphic';
2
+ import GraphicsLayer from '@arcgis/core/layers/GraphicsLayer';
3
+ import MapView from '@arcgis/core/views/MapView';
4
+ import SceneView from '@arcgis/core/views/SceneView';
5
+ import { IOverlay, IOverlayParam, IPointSymbol, IResult } from '../../types';
6
+ interface IOverlayOptions {
7
+ id: string;
8
+ }
9
+ export default class Overlay {
10
+ private view;
11
+ overlayLayer: GraphicsLayer;
12
+ constructor(view: MapView | SceneView, options?: IOverlayOptions);
13
+ private defaultPointSymbol;
14
+ /**
15
+ * 添加覆盖物
16
+ * @param params
17
+ */
18
+ addOverlays(params: IOverlayParam): IResult;
19
+ /**
20
+ * 按type移除覆盖物
21
+ * @param types
22
+ */
23
+ removeOverlaysByType(types: string[]): IResult;
24
+ /**
25
+ * 按id移除覆盖物
26
+ * @param ids
27
+ */
28
+ removeOverlaysById(ids: string[]): IResult;
29
+ /**
30
+ * 按id显示或隐藏覆盖物
31
+ * @param ids
32
+ * @param isShow
33
+ */
34
+ isShowOverlaysByIds(ids: string[], isShow: boolean): void;
35
+ /**
36
+ * 显示全部覆盖物
37
+ *
38
+ * @memberof Overlay
39
+ */
40
+ showAllOverlays(): void;
41
+ /**
42
+ * 删除全部覆盖物
43
+ * @returns
44
+ */
45
+ removeAllOverlays(): IResult;
46
+ /**
47
+ * 销毁
48
+ *
49
+ * @memberof Overlay
50
+ */
51
+ destroy(): void;
52
+ removeGraphics(graphics: Graphic | Graphic[]): void;
53
+ /**
54
+ * 查找当前点击是否有覆盖物在当前图层
55
+ *
56
+ * @param {((MouseEvent | __esri.MapViewScreenPoint) &
57
+ * (__esri.SceneViewScreenPoint | MouseEvent))} event
58
+ * @returns
59
+ * @memberof Overlay
60
+ */
61
+ findGraphic(event: (MouseEvent | __esri.MapViewScreenPoint) & (__esri.SceneViewScreenPoint | MouseEvent)): Promise<__esri.ViewHit[]>;
62
+ /**
63
+ * 隐藏图层
64
+ *
65
+ * @memberof Overlay
66
+ */
67
+ hideLayer(): void;
68
+ /**
69
+ * 显示图层
70
+ *
71
+ * @memberof Overlay
72
+ */
73
+ showLayer(): void;
74
+ /**
75
+ * 添加点覆盖物
76
+ * @param overlay
77
+ * @param symbol
78
+ * @param properties
79
+ */
80
+ addPoint(overlay: IOverlay, symbol: IPointSymbol, properties: any, visible?: boolean): IResult;
81
+ private addOverlay;
82
+ }
83
+ export {};