@kq_npm/client3d_webgl_vue 4.5.56 → 4.5.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adddata/index.js +189 -21
- package/airspacegridoccupancyquery/index.js +108 -7
- package/airspaceprofileanalysis/index.js +99 -7
- package/aspectanalysis/index.js +25 -7
- package/baseterraingallery/index.js +16 -4
- package/boxclip/index.js +58 -16
- package/buildpointmodel/index.js +3441 -544
- package/buildpointmodel/style/buildpointmodel.css +1 -1
- package/buildpolygonmodel/index.js +205 -81
- package/buildpolylinemodel/index.js +346 -70
- package/clientPrint/index.js +10524 -3041
- package/comparemap/index.js +132 -60
- package/compass/index.js +16 -6
- package/excavatefillanalysis/index.js +51 -7
- package/fixedzoomin/index.js +24 -7
- package/fixedzoomout/index.js +25 -7
- package/flight/index.js +113 -26
- package/floodanalysis/index.js +79 -14
- package/geologicalbodyanalysis/index.js +41 -5
- package/gpuspatialquery/index.js +59 -11
- package/gridoccupancyquery/index.js +78 -12
- package/hawkeye/index.js +20 -2
- package/headertemp/index.js +7 -2
- package/heatmap3d/index.js +282 -158
- package/index.js +10524 -3041
- package/isolineanalysis/index.js +113 -38
- package/light/index.js +80 -22
- package/limitheightanalysis/index.js +30 -10
- package/lowaltitudefeature/index.js +292 -119
- package/measure/index.js +60 -19
- package/modelFlat/index.js +48 -8
- package/modeledit/index.js +38 -4
- package/modelexcavate/index.js +48 -7
- package/modelfilter/index.js +51 -8
- package/modelmaterialedit/index.js +127 -25
- package/modelprofileanalysis/index.js +50 -14
- package/modelselect/index.js +33 -3
- package/modelstyleedit/index.js +39 -3
- package/modeltransform/index.js +79 -14
- package/package.json +1 -1
- package/particleeffect/index.js +83 -17
- package/planeclip/index.js +66 -17
- package/pointcloudrender/index.js +134 -15
- package/radarscananalysis/index.js +35 -3
- package/resetview/index.js +14 -6
- package/roller/index.js +55 -18
- package/scaneffect/index.js +98 -29
- package/sceneadvancedtoimage/index.js +32 -6
- package/sceneapp/index.js +10524 -3041
- package/sceneset/index.js +141 -71
- package/scenetohdimage/index.js +23 -3
- package/sceneview/index.js +10524 -3041
- package/screenshot/index.js +44 -11
- package/shadowanalysis/index.js +79 -19
- package/sightlineanalysis/index.js +66 -15
- package/skylineanalysis/index.js +20 -4
- package/slopeanalysis/index.js +75 -16
- package/slopeaspectanalysis/index.js +128 -26
- package/statusbar/index.js +80 -67
- package/style.css +1 -1
- package/terrainoperation/index.js +39 -7
- package/terrainprofileanalysis/index.js +43 -5
- package/toolbarapp/index.js +10524 -3041
- package/toolboxapp/index.js +10524 -3041
- package/typhoontrac/index.js +134 -16
- package/underground/index.js +8 -2
- package/videofusion/index.js +86 -30
- package/videoproject/index.js +77 -23
- package/viewshedanalysis/index.js +58 -13
- package/weathereffect/index.js +73 -18
- package/webgl.es.js +263 -264
- package/windyslicing/index.js +233 -45
- package/wireframesketch/index.js +25 -8
|
@@ -57,14 +57,23 @@ exports["default"] = void 0;
|
|
|
57
57
|
class LowAltitudeFeatureViewModel {
|
|
58
58
|
// viewer 就绪回调
|
|
59
59
|
|
|
60
|
+
/** @description 构造函数,初始化低空要素视图模型
|
|
61
|
+
* @param {Object} viewer Cesium Viewer 实例
|
|
62
|
+
* @param {Object} options 配置项,可包含 onReady 回调
|
|
63
|
+
*/
|
|
60
64
|
constructor(viewer, options = {}) {
|
|
61
65
|
this._viewer = null;
|
|
66
|
+
// Cesium Viewer 实例
|
|
62
67
|
this._options = {};
|
|
68
|
+
// 配置参数对象
|
|
63
69
|
this._dataSource = null;
|
|
70
|
+
// 自定义数据源
|
|
64
71
|
this._currentDrawHandler = null;
|
|
72
|
+
// 当前绘制事件处理器
|
|
65
73
|
this._activeDrawMode = null;
|
|
66
74
|
// 'point' | 'polyline' | 'polygon'
|
|
67
75
|
this._drawingEntities = [];
|
|
76
|
+
// 当前绘制产生的实体集合
|
|
68
77
|
this._gridEntities = new Map();
|
|
69
78
|
// featureId -> grid entity ids
|
|
70
79
|
this._onReady = null;
|
|
@@ -126,6 +135,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
126
135
|
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
|
127
136
|
return handler;
|
|
128
137
|
}
|
|
138
|
+
|
|
139
|
+
// 清除当前绘制事件处理器
|
|
129
140
|
_clearDraw() {
|
|
130
141
|
if (this._currentDrawHandler) {
|
|
131
142
|
this._currentDrawHandler.destroy();
|
|
@@ -200,8 +211,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
200
211
|
drawPolygon(settings = {}, onDrawComplete) {
|
|
201
212
|
this._clearDraw();
|
|
202
213
|
this._activeDrawMode = "polygon";
|
|
203
|
-
const self = this;
|
|
204
|
-
const positions = [];
|
|
214
|
+
const self = this; // 保存 this 引用,便于回调内访问
|
|
215
|
+
const positions = []; // 已绘制的顶点集合
|
|
205
216
|
const handler = new Cesium.ScreenSpaceEventHandler(this._viewer.scene.canvas);
|
|
206
217
|
|
|
207
218
|
// 动态预览面
|
|
@@ -220,11 +231,15 @@ class LowAltitudeFeatureViewModel {
|
|
|
220
231
|
}
|
|
221
232
|
});
|
|
222
233
|
this._drawingEntities.push(previewEntity);
|
|
234
|
+
|
|
235
|
+
// 左键点击添加顶点
|
|
223
236
|
handler.setInputAction(event => {
|
|
224
237
|
const position = this._pickPosition(event.position);
|
|
225
238
|
if (!position) return;
|
|
226
239
|
positions.push(position);
|
|
227
240
|
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
|
241
|
+
|
|
242
|
+
// 右键完成绘制
|
|
228
243
|
handler.setInputAction(() => {
|
|
229
244
|
if (positions.length < 3) return;
|
|
230
245
|
handler.destroy();
|
|
@@ -250,6 +265,9 @@ class LowAltitudeFeatureViewModel {
|
|
|
250
265
|
|
|
251
266
|
/**
|
|
252
267
|
* @description 创建点实体(含缓冲区可视化)
|
|
268
|
+
* @param {Cesium.Cartesian3} cartesian 笛卡尔坐标
|
|
269
|
+
* @param {Object} settings 图元设置,包含 bufferDistance、bufferType 等
|
|
270
|
+
* @returns {Cesium.Entity} 创建的点实体
|
|
253
271
|
* @private
|
|
254
272
|
*/
|
|
255
273
|
_createPointEntity(cartesian, settings = {}) {
|
|
@@ -310,6 +328,12 @@ class LowAltitudeFeatureViewModel {
|
|
|
310
328
|
}
|
|
311
329
|
return this._viewer.entities.add(entityOptions);
|
|
312
330
|
}
|
|
331
|
+
|
|
332
|
+
/** @description 计算圆形多边形顶点(用于 polylineVolume 形状)
|
|
333
|
+
* @param {Number} radius 半径
|
|
334
|
+
* @returns {Array<Cesium.Cartesian2>} 圆形顶点数组
|
|
335
|
+
* @private
|
|
336
|
+
*/
|
|
313
337
|
_computeCircle(radius) {
|
|
314
338
|
const positions = [];
|
|
315
339
|
for (let i = 0; i < 360; i++) {
|
|
@@ -320,6 +344,9 @@ class LowAltitudeFeatureViewModel {
|
|
|
320
344
|
}
|
|
321
345
|
/**
|
|
322
346
|
* @description 创建线实体(含缓冲走廊)
|
|
347
|
+
* @param {Array<Cesium.Cartesian3>} positions 顶点坐标数组
|
|
348
|
+
* @param {Object} settings 图元设置,包含 bufferDistance、lineColor 等
|
|
349
|
+
* @returns {Cesium.Entity} 创建的线实体
|
|
323
350
|
* @private
|
|
324
351
|
*/
|
|
325
352
|
_createPolylineEntity(positions, settings = {}) {
|
|
@@ -365,6 +392,9 @@ class LowAltitudeFeatureViewModel {
|
|
|
365
392
|
|
|
366
393
|
/**
|
|
367
394
|
* @description 创建面实体
|
|
395
|
+
* @param {Array<Cesium.Cartesian3>} positions 顶点坐标数组
|
|
396
|
+
* @param {Object} settings 图元设置,包含 fillColor、bufferDistance 等
|
|
397
|
+
* @returns {Cesium.Entity} 创建的面实体
|
|
368
398
|
* @private
|
|
369
399
|
*/
|
|
370
400
|
_createPolygonEntity(positions, settings = {}) {
|
|
@@ -450,6 +480,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
450
480
|
* @description 从GeoJSON创建实体
|
|
451
481
|
* @param {Object} geoJson GeoJSON对象
|
|
452
482
|
* @param {Object} settings 图元设置
|
|
483
|
+
* @param {Boolean} trackInDrawing 是否将创建的实体加入绘制集合(导入时为 true,保存/加载时为 false)
|
|
453
484
|
* @returns {Array<Cesium.Entity>} 创建的实体数组
|
|
454
485
|
*/
|
|
455
486
|
loadFromGeoJSON(geoJson, settings = {}, trackInDrawing = false) {
|
|
@@ -492,6 +523,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
492
523
|
|
|
493
524
|
/**
|
|
494
525
|
* @description GeoJSON坐标转Cartesian3
|
|
526
|
+
* @param {Array<Number>} coord 坐标数组 [lon, lat, height]
|
|
527
|
+
* @returns {Cesium.Cartesian3} 笛卡尔坐标
|
|
495
528
|
* @private
|
|
496
529
|
*/
|
|
497
530
|
_geojsonCoordToCartesian(coord) {
|
|
@@ -503,6 +536,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
503
536
|
|
|
504
537
|
/**
|
|
505
538
|
* @description 实体转GeoJSON
|
|
539
|
+
* @param {Cesium.Entity} entity 实体对象
|
|
540
|
+
* @returns {Object|null} GeoJSON Feature 对象
|
|
506
541
|
*/
|
|
507
542
|
entityToGeoJSON(entity) {
|
|
508
543
|
if (!entity) return null;
|
|
@@ -519,6 +554,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
519
554
|
|
|
520
555
|
/**
|
|
521
556
|
* @description 点实体转GeoJSON Point
|
|
557
|
+
* @param {Cesium.Entity} entity 点实体
|
|
558
|
+
* @returns {Object|null} GeoJSON Feature
|
|
522
559
|
* @private
|
|
523
560
|
*/
|
|
524
561
|
_pointToGeoJSON(entity) {
|
|
@@ -537,6 +574,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
537
574
|
|
|
538
575
|
/**
|
|
539
576
|
* @description 线实体转GeoJSON LineString
|
|
577
|
+
* @param {Cesium.Entity} entity 线实体
|
|
578
|
+
* @returns {Object|null} GeoJSON Feature
|
|
540
579
|
* @private
|
|
541
580
|
*/
|
|
542
581
|
_polylineToGeoJSON(entity) {
|
|
@@ -558,6 +597,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
558
597
|
|
|
559
598
|
/**
|
|
560
599
|
* @description 面实体转GeoJSON Polygon
|
|
600
|
+
* @param {Cesium.Entity} entity 面实体
|
|
601
|
+
* @returns {Object|null} GeoJSON Feature
|
|
561
602
|
* @private
|
|
562
603
|
*/
|
|
563
604
|
_polygonToGeoJSON(entity) {
|
|
@@ -577,6 +618,11 @@ class LowAltitudeFeatureViewModel {
|
|
|
577
618
|
}
|
|
578
619
|
};
|
|
579
620
|
}
|
|
621
|
+
/** @description 笛卡尔坐标转点 GeoJSON
|
|
622
|
+
* @param {Cesium.Cartesian3} position 笛卡尔坐标
|
|
623
|
+
* @returns {Object} GeoJSON Feature
|
|
624
|
+
* @private
|
|
625
|
+
*/
|
|
580
626
|
_positionToPointGeoJSON(position) {
|
|
581
627
|
const c = Cesium.Cartographic.fromCartesian(position);
|
|
582
628
|
return {
|
|
@@ -589,6 +635,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
589
635
|
}
|
|
590
636
|
/**
|
|
591
637
|
* @description 坐标数组转线GeoJSON
|
|
638
|
+
* @param {Array<Cesium.Cartesian3>} positions 笛卡尔坐标数组
|
|
639
|
+
* @returns {Object} GeoJSON Feature
|
|
592
640
|
* @private
|
|
593
641
|
*/
|
|
594
642
|
_positionsToLineGeoJSON(positions) {
|
|
@@ -608,6 +656,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
608
656
|
|
|
609
657
|
/**
|
|
610
658
|
* @description 坐标数组转面GeoJSON
|
|
659
|
+
* @param {Array<Cesium.Cartesian3>} positions 笛卡尔坐标数组
|
|
660
|
+
* @returns {Object} GeoJSON Feature
|
|
611
661
|
* @private
|
|
612
662
|
*/
|
|
613
663
|
_positionsToPolygonGeoJSON(positions) {
|
|
@@ -630,7 +680,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
630
680
|
|
|
631
681
|
/**
|
|
632
682
|
* @description 切换网格化显示
|
|
633
|
-
* @param {
|
|
683
|
+
* @param {Object} featureInfo 要素信息对象(含 id/code 等)
|
|
634
684
|
* @param {boolean} show 是否显示网格
|
|
635
685
|
* @param {Object} settings 图元设置
|
|
636
686
|
*/
|
|
@@ -649,6 +699,10 @@ class LowAltitudeFeatureViewModel {
|
|
|
649
699
|
});
|
|
650
700
|
this._gridEntities.set(featureId, gridEntities);
|
|
651
701
|
}
|
|
702
|
+
|
|
703
|
+
/** @description 根据要素名查询并显示网格占用情况
|
|
704
|
+
* @param {Object} featureInfo 要素信息,包含 code/name 等
|
|
705
|
+
*/
|
|
652
706
|
showGridOccupancyQuery(featureInfo) {
|
|
653
707
|
let that = this;
|
|
654
708
|
let queryUrl = "http://172.16.1.204:9600/kqgis/rest/services/qqq/gridflow";
|
|
@@ -670,17 +724,20 @@ class LowAltitudeFeatureViewModel {
|
|
|
670
724
|
}
|
|
671
725
|
return response.json(); // 解析JSON数据
|
|
672
726
|
}).then(data => {
|
|
727
|
+
// 请求成功且包含网格编码时渲染网格
|
|
673
728
|
if (data.code == 200) {
|
|
674
729
|
if (data.content.code) {
|
|
675
730
|
// console.log(data.content.types);
|
|
676
731
|
let code = data.content.code;
|
|
677
732
|
let instanc = that.getGridInstanc(code);
|
|
678
733
|
if (instanc) {
|
|
734
|
+
// 已存在图元时复用并更新几何实例
|
|
679
735
|
if (that._clickGirdPrimitive) {
|
|
680
736
|
that._clickGirdPrimitive.geometryInstances = instanc;
|
|
681
737
|
that._clickGirdPrimitive._state = Cesium.PrimitiveState.READY;
|
|
682
738
|
that._clickGirdPrimitive.updateVertex = true;
|
|
683
739
|
} else {
|
|
740
|
+
// 首次创建带半透明红色材质的网格 Primitive
|
|
684
741
|
that._clickGirdPrimitive = that._viewer.scene.primitives.add(new Cesium.Primitive({
|
|
685
742
|
geometryInstances: instanc,
|
|
686
743
|
appearance: new Cesium.MaterialAppearance({
|
|
@@ -705,7 +762,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
705
762
|
asynchronous: false
|
|
706
763
|
}));
|
|
707
764
|
}
|
|
708
|
-
let gridcode = code.substring(0, (code.length + 1) / 2);
|
|
765
|
+
let gridcode = code.substring(0, (code.length + 1) / 2); // 截取前半段作为网格编码
|
|
709
766
|
let type = data.content.types.map(item => item.description);
|
|
710
767
|
//显示网格暂用情况
|
|
711
768
|
that._htmlTag = new Cesium.Kq3dDragableHtmlTag(that._viewer, {
|
|
@@ -722,6 +779,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
722
779
|
<div class='attr'>${that._language.value.webgl["occupancyType"]} : ${type.join(",")}</div>
|
|
723
780
|
</div>`
|
|
724
781
|
});
|
|
782
|
+
// 延迟绑定关闭按钮事件
|
|
725
783
|
setTimeout(() => {
|
|
726
784
|
let close = document.querySelector("#grid_info_close");
|
|
727
785
|
close.addEventListener("click", function () {
|
|
@@ -743,6 +801,10 @@ class LowAltitudeFeatureViewModel {
|
|
|
743
801
|
console.error("There was a problem with your fetch operation:", error);
|
|
744
802
|
});
|
|
745
803
|
}
|
|
804
|
+
|
|
805
|
+
/** @description 查询并获取网格占用区域(不渲染)
|
|
806
|
+
* @param {Object} featureInfo 要素信息,包含 code/name 等
|
|
807
|
+
*/
|
|
746
808
|
getGridOccupancy(featureInfo) {
|
|
747
809
|
let that = this;
|
|
748
810
|
let queryUrl = "http://172.16.1.204:9600/kqgis/rest/services/qqq/gridflow";
|
|
@@ -761,6 +823,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
761
823
|
}
|
|
762
824
|
return response.json(); // 解析JSON数据
|
|
763
825
|
}).then(data => {
|
|
826
|
+
// 请求成功且包含网格编码时构建几何实例
|
|
764
827
|
if (data.code == 200) {
|
|
765
828
|
if (data.content.code) {
|
|
766
829
|
// console.log(data.content.types);
|
|
@@ -772,10 +835,16 @@ class LowAltitudeFeatureViewModel {
|
|
|
772
835
|
console.error("There was a problem with your fetch operation:", error);
|
|
773
836
|
});
|
|
774
837
|
}
|
|
838
|
+
/** @description 根据网格编码构建 Cesium 几何实例
|
|
839
|
+
* @param {String} code 网格编码字符串
|
|
840
|
+
* @returns {Cesium.GeometryInstance|undefined} 网格几何实例
|
|
841
|
+
*/
|
|
775
842
|
getGridInstanc(code) {
|
|
776
843
|
let index = (code.length + 1) / 2;
|
|
844
|
+
// 调用 WASM 模块解码网格编码为边界框
|
|
777
845
|
let grid = Module.decodeGeoSotGBCodeToBox(code.substring(0, index), code.substring(index));
|
|
778
846
|
if (grid) {
|
|
847
|
+
// 限制经纬度范围在合法区间内
|
|
779
848
|
if (grid.minx < -180) grid.minx = -180;
|
|
780
849
|
if (grid.maxx > 180) grid.maxx = 180;
|
|
781
850
|
if (grid.miny < -90) grid.miny = -90;
|
|
@@ -786,6 +855,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
786
855
|
const maxLat = Math.max(grid.miny, grid.maxy);
|
|
787
856
|
const minz = grid.minz;
|
|
788
857
|
const maxz = grid.maxz;
|
|
858
|
+
|
|
859
|
+
// 构建拉伸矩形几何体
|
|
789
860
|
let rectangle = new Cesium.RectangleGeometry({
|
|
790
861
|
ellipsoid: Cesium.Ellipsoid.WGS84,
|
|
791
862
|
rectangle: Cesium.Rectangle.fromDegrees(minLon, minLat, maxLon, maxLat),
|
|
@@ -801,6 +872,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
801
872
|
|
|
802
873
|
/**
|
|
803
874
|
* @description 移除网格实体
|
|
875
|
+
* @param {String} featureId 要素 ID
|
|
804
876
|
* @private
|
|
805
877
|
*/
|
|
806
878
|
_removeGridEntities(featureId) {
|
|
@@ -816,6 +888,9 @@ class LowAltitudeFeatureViewModel {
|
|
|
816
888
|
|
|
817
889
|
/**
|
|
818
890
|
* @description 在面内生成网格单元
|
|
891
|
+
* @param {Array<Cesium.Cartesian3>} boundaryPositions 边界顶点
|
|
892
|
+
* @param {Number} gridSizeMeters 网格尺寸(米)
|
|
893
|
+
* @returns {Array} 网格单元数组
|
|
819
894
|
* @private
|
|
820
895
|
*/
|
|
821
896
|
_generateGridInPolygon(boundaryPositions, gridSizeMeters) {
|
|
@@ -825,6 +900,10 @@ class LowAltitudeFeatureViewModel {
|
|
|
825
900
|
|
|
826
901
|
/**
|
|
827
902
|
* @description 沿线生成网格缓冲
|
|
903
|
+
* @param {Array<Cesium.Cartesian3>} positions 线顶点
|
|
904
|
+
* @param {Number} bufferSize 缓冲距离
|
|
905
|
+
* @param {Number} gridSizeMeters 网格尺寸(米)
|
|
906
|
+
* @returns {Array} 网格单元数组
|
|
828
907
|
* @private
|
|
829
908
|
*/
|
|
830
909
|
_generateGridAlongLine(positions, bufferSize, gridSizeMeters) {
|
|
@@ -834,6 +913,10 @@ class LowAltitudeFeatureViewModel {
|
|
|
834
913
|
|
|
835
914
|
/**
|
|
836
915
|
* @description 在点周围生成网格
|
|
916
|
+
* @param {Cesium.Cartesian3} center 中心点
|
|
917
|
+
* @param {Number} radius 半径
|
|
918
|
+
* @param {Number} gridSizeMeters 网格尺寸(米)
|
|
919
|
+
* @returns {Array} 网格单元数组
|
|
837
920
|
* @private
|
|
838
921
|
*/
|
|
839
922
|
_generateGridAroundPoint(center, radius, gridSizeMeters) {
|
|
@@ -843,6 +926,9 @@ class LowAltitudeFeatureViewModel {
|
|
|
843
926
|
|
|
844
927
|
/**
|
|
845
928
|
* @description 创建网格单元实体
|
|
929
|
+
* @param {Array<Number>} cellBounds 网格单元边界
|
|
930
|
+
* @param {Object} settings 图元设置
|
|
931
|
+
* @returns {Cesium.Entity} 网格单元实体
|
|
846
932
|
* @private
|
|
847
933
|
*/
|
|
848
934
|
_createGridCell(cellBounds, settings) {
|
|
@@ -863,6 +949,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
863
949
|
|
|
864
950
|
/**
|
|
865
951
|
* @description 拾取鼠标位置的地理坐标
|
|
952
|
+
* @param {Cesium.Cartesian2} screenPos 屏幕坐标
|
|
953
|
+
* @returns {Cesium.Cartesian3|null} 笛卡尔坐标
|
|
866
954
|
* @private
|
|
867
955
|
*/
|
|
868
956
|
_pickPosition(screenPos) {
|
|
@@ -899,6 +987,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
899
987
|
|
|
900
988
|
/**
|
|
901
989
|
* @description 缩放到实体
|
|
990
|
+
* @param {Cesium.Entity|String} entityOrId 实体或实体 ID
|
|
991
|
+
* @returns {Boolean} 是否成功
|
|
902
992
|
*/
|
|
903
993
|
zoomToEntity(entityOrId) {
|
|
904
994
|
let entity = entityOrId;
|
|
@@ -929,7 +1019,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
929
1019
|
}
|
|
930
1020
|
|
|
931
1021
|
/**
|
|
932
|
-
* @description 销毁ViewModel
|
|
1022
|
+
* @description 销毁ViewModel,释放所有资源
|
|
933
1023
|
*/
|
|
934
1024
|
destroy() {
|
|
935
1025
|
this.clearDraw();
|
|
@@ -971,7 +1061,7 @@ class LowAltitudeFeatureViewModel {
|
|
|
971
1061
|
|
|
972
1062
|
/**
|
|
973
1063
|
* @description 删除要素实体(通过 entityIds 数组)
|
|
974
|
-
* @param {Array<
|
|
1064
|
+
* @param {Array<String>} entityIds 实体 ID 数组
|
|
975
1065
|
*/
|
|
976
1066
|
removeFeatureEntities(entityIds) {
|
|
977
1067
|
if (!this._viewer || !entityIds) return;
|
|
@@ -1018,6 +1108,8 @@ class LowAltitudeFeatureViewModel {
|
|
|
1018
1108
|
|
|
1019
1109
|
/**
|
|
1020
1110
|
* @description 从 GeoJSON 提取 Cartographic 数组(私有工具方法)
|
|
1111
|
+
* @param {Object} geojson GeoJSON 对象
|
|
1112
|
+
* @returns {Array<Cesium.Cartographic>} 地理坐标数组
|
|
1021
1113
|
* @private
|
|
1022
1114
|
*/
|
|
1023
1115
|
_extractPositionsFromGeoJSON(geojson) {
|
|
@@ -1037,6 +1129,10 @@ class LowAltitudeFeatureViewModel {
|
|
|
1037
1129
|
});
|
|
1038
1130
|
return positions;
|
|
1039
1131
|
}
|
|
1132
|
+
/** @description 根据 id 获取实体
|
|
1133
|
+
* @param {String} id 实体 ID
|
|
1134
|
+
* @returns {Cesium.Entity|undefined} 实体对象
|
|
1135
|
+
*/
|
|
1040
1136
|
getEntityById(id) {
|
|
1041
1137
|
// 优先从 dataSource 中获取实体
|
|
1042
1138
|
if (this._dataSource) {
|
|
@@ -1100,58 +1196,6 @@ const __exports__ = Formvue_type_script_lang_js/* default */.A;
|
|
|
1100
1196
|
|
|
1101
1197
|
/***/ }),
|
|
1102
1198
|
|
|
1103
|
-
/***/ 11583:
|
|
1104
|
-
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
1105
|
-
|
|
1106
|
-
// ESM COMPAT FLAG
|
|
1107
|
-
__webpack_require__.r(__webpack_exports__);
|
|
1108
|
-
|
|
1109
|
-
// EXPORTS
|
|
1110
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
1111
|
-
__esModule: function() { return /* reexport */ LowAltitudeFeaturevue_type_script_setup_true_lang_js/* __esModule */.B; },
|
|
1112
|
-
"default": function() { return /* binding */ LowAltitudeFeature; }
|
|
1113
|
-
});
|
|
1114
|
-
|
|
1115
|
-
// EXTERNAL MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=script&setup=true&lang=js
|
|
1116
|
-
var LowAltitudeFeaturevue_type_script_setup_true_lang_js = __webpack_require__(23043);
|
|
1117
|
-
;// ./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=script&setup=true&lang=js
|
|
1118
|
-
|
|
1119
|
-
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js
|
|
1120
|
-
var injectStylesIntoStyleTag = __webpack_require__(85072);
|
|
1121
|
-
var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);
|
|
1122
|
-
// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=style&index=0&id=b3c8fafe&scoped=true&lang=css
|
|
1123
|
-
var LowAltitudeFeaturevue_type_style_index_0_id_b3c8fafe_scoped_true_lang_css = __webpack_require__(74703);
|
|
1124
|
-
;// ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=style&index=0&id=b3c8fafe&scoped=true&lang=css
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
var options = {};
|
|
1129
|
-
|
|
1130
|
-
options.insert = "head";
|
|
1131
|
-
options.singleton = false;
|
|
1132
|
-
|
|
1133
|
-
var update = injectStylesIntoStyleTag_default()(LowAltitudeFeaturevue_type_style_index_0_id_b3c8fafe_scoped_true_lang_css/* default */.A, options);
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
/* harmony default export */ var lowaltitudefeature_LowAltitudeFeaturevue_type_style_index_0_id_b3c8fafe_scoped_true_lang_css = (LowAltitudeFeaturevue_type_style_index_0_id_b3c8fafe_scoped_true_lang_css/* default */.A.locals || {});
|
|
1138
|
-
;// ./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=style&index=0&id=b3c8fafe&scoped=true&lang=css
|
|
1139
|
-
|
|
1140
|
-
// EXTERNAL MODULE: ./node_modules/vue-loader/dist/exportHelper.js
|
|
1141
|
-
var exportHelper = __webpack_require__(66262);
|
|
1142
|
-
;// ./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
;
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
const __exports__ = /*#__PURE__*/(0,exportHelper/* default */.A)(LowAltitudeFeaturevue_type_script_setup_true_lang_js/* default */.A, [['__scopeId',"data-v-b3c8fafe"]])
|
|
1150
|
-
|
|
1151
|
-
/* harmony default export */ var LowAltitudeFeature = (__exports__);
|
|
1152
|
-
|
|
1153
|
-
/***/ }),
|
|
1154
|
-
|
|
1155
1199
|
/***/ 14464:
|
|
1156
1200
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1157
1201
|
|
|
@@ -1439,12 +1483,12 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1439
1483
|
const props = __props;
|
|
1440
1484
|
|
|
1441
1485
|
// ==================== 组件状态 ====================
|
|
1442
|
-
let isAddOrEdit = (0, _vue.ref)(false);
|
|
1443
|
-
let isEdit = (0, _vue.ref)(false);
|
|
1444
|
-
let searchKeyword = (0, _vue.ref)("");
|
|
1445
|
-
let panelCollapsed = (0, _vue.ref)(false);
|
|
1446
|
-
let symbolSettingsExpanded = (0, _vue.ref)(false);
|
|
1447
|
-
let currentDrawMode = (0, _vue.ref)("");
|
|
1486
|
+
let isAddOrEdit = (0, _vue.ref)(false); // 是否处于新增/编辑面板状态
|
|
1487
|
+
let isEdit = (0, _vue.ref)(false); // 是否为编辑模式
|
|
1488
|
+
let searchKeyword = (0, _vue.ref)(""); // 树搜索关键字
|
|
1489
|
+
let panelCollapsed = (0, _vue.ref)(false); // 右侧面板是否折叠
|
|
1490
|
+
let symbolSettingsExpanded = (0, _vue.ref)(false); // 图元设置是否展开
|
|
1491
|
+
let currentDrawMode = (0, _vue.ref)(""); // 当前绘制模式
|
|
1448
1492
|
|
|
1449
1493
|
// 当前编辑的要素所属分类(新建时强制)
|
|
1450
1494
|
let forcedCategory = (0, _vue.ref)(null);
|
|
@@ -1591,13 +1635,17 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1591
1635
|
|
|
1592
1636
|
let currentSubclassOptions = (0, _vue.computed)(() => {
|
|
1593
1637
|
return subclassOptionsMap[formData.featureClass] || [];
|
|
1594
|
-
});
|
|
1638
|
+
}); // 当前分类下的子类选项
|
|
1639
|
+
|
|
1595
1640
|
let currentShapeTypes = (0, _vue.computed)(() => {
|
|
1596
1641
|
return shapeTypeMap[currentGeometryType()] || [];
|
|
1597
|
-
});
|
|
1642
|
+
}); // 当前几何类型对应的形状选项
|
|
1643
|
+
|
|
1598
1644
|
let currentBufferTypes = (0, _vue.computed)(() => {
|
|
1599
1645
|
return bufferTypeMap[currentGeometryType()] || [];
|
|
1600
|
-
});
|
|
1646
|
+
}); // 当前几何类型对应的缓冲类型选项
|
|
1647
|
+
|
|
1648
|
+
// 根据要素分类推断当前几何类型
|
|
1601
1649
|
function currentGeometryType() {
|
|
1602
1650
|
if (formData.featureClass === "hangar") return "point";
|
|
1603
1651
|
if (formData.featureClass === "airroute") return "polyline";
|
|
@@ -1606,25 +1654,27 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1606
1654
|
}
|
|
1607
1655
|
let showRouteTypeField = (0, _vue.computed)(() => {
|
|
1608
1656
|
return formData.featureClass === "airroute";
|
|
1609
|
-
});
|
|
1657
|
+
}); // 是否显示航线类型字段
|
|
1658
|
+
|
|
1610
1659
|
let showBufferTypeField = (0, _vue.computed)(() => {
|
|
1611
1660
|
return currentBufferTypes.value.length > 0;
|
|
1612
|
-
});
|
|
1661
|
+
}); // 是否显示缓冲类型字段
|
|
1662
|
+
|
|
1613
1663
|
let showBufferDistanceField = (0, _vue.computed)(() => {
|
|
1614
1664
|
// if (currentGeometryType() === "polygon") return false;
|
|
1615
1665
|
return symbolSettings.bufferType && symbolSettings.bufferType !== "none";
|
|
1616
|
-
});
|
|
1666
|
+
}); // 是否显示缓冲距离字段
|
|
1617
1667
|
|
|
1618
1668
|
// ==================== Cesium 相关 ====================
|
|
1619
1669
|
|
|
1620
|
-
let currentEditFeature = null;
|
|
1621
|
-
let boxRef = (0, _vue.ref)(null);
|
|
1670
|
+
let currentEditFeature = null; // 当前编辑的要素对象
|
|
1671
|
+
let boxRef = (0, _vue.ref)(null); // 组件容器 Ref
|
|
1622
1672
|
let headerTemp = (0, _vue.ref)();
|
|
1623
1673
|
let headerTempRef = (0, _vue.ref)(null);
|
|
1624
|
-
let currentEntities = [];
|
|
1625
|
-
let currentGeoJSON = null;
|
|
1626
|
-
let viewer = null;
|
|
1627
|
-
let viewModel = null;
|
|
1674
|
+
let currentEntities = []; // 当前绘制产生的实体集合
|
|
1675
|
+
let currentGeoJSON = null; // 当前绘制产生的 GeoJSON
|
|
1676
|
+
let viewer = null; // Cesium Viewer 实例
|
|
1677
|
+
let viewModel = null; // 视图模型实例
|
|
1628
1678
|
|
|
1629
1679
|
// ==================== kq-tree 相关 ====================
|
|
1630
1680
|
// 树节点唯一 key 字段名
|
|
@@ -1655,6 +1705,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1655
1705
|
// 同步受控选中状态(根据数据 checked 属性更新 checkedKeys)
|
|
1656
1706
|
function updateCheckedKeys() {
|
|
1657
1707
|
const keys = [];
|
|
1708
|
+
// 遍历所有分类下的要素,收集选中状态的节点 key
|
|
1658
1709
|
featureCategories.forEach(cat => {
|
|
1659
1710
|
if (cat.children) {
|
|
1660
1711
|
cat.children.forEach(f => {
|
|
@@ -1669,7 +1720,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1669
1720
|
featureTreeRef.value.$refs.child.setCheckedKeys(checkedKeys.value);
|
|
1670
1721
|
}
|
|
1671
1722
|
|
|
1672
|
-
|
|
1723
|
+
/** @description 节点展开回调(受控模式同步)
|
|
1724
|
+
* @param {Object} data 节点数据
|
|
1725
|
+
* @param {Object} node 节点对象
|
|
1726
|
+
*/
|
|
1673
1727
|
function handleNodeExpand(data, node) {
|
|
1674
1728
|
const key = data[treeNodeKey];
|
|
1675
1729
|
if (key && !expandedKeys.value.includes(key)) {
|
|
@@ -1677,7 +1731,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1677
1731
|
}
|
|
1678
1732
|
}
|
|
1679
1733
|
|
|
1680
|
-
|
|
1734
|
+
/** @description 节点折叠回调(受控模式同步)
|
|
1735
|
+
* @param {Object} data 节点数据
|
|
1736
|
+
* @param {Object} node 节点对象
|
|
1737
|
+
*/
|
|
1681
1738
|
function handleNodeCollapse(data, node) {
|
|
1682
1739
|
const key = data[treeNodeKey];
|
|
1683
1740
|
if (key) {
|
|
@@ -1685,7 +1742,11 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1685
1742
|
}
|
|
1686
1743
|
}
|
|
1687
1744
|
|
|
1688
|
-
|
|
1745
|
+
/** @description 树节点过滤方法(搜索)
|
|
1746
|
+
* @param {String} value 搜索关键字
|
|
1747
|
+
* @param {Object} data 节点数据
|
|
1748
|
+
* @returns {Boolean} 是否匹配
|
|
1749
|
+
*/
|
|
1689
1750
|
function filterTreeNode(value, data) {
|
|
1690
1751
|
if (!value) return true;
|
|
1691
1752
|
const keyword = value.toLowerCase();
|
|
@@ -1708,7 +1769,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1708
1769
|
}
|
|
1709
1770
|
}
|
|
1710
1771
|
|
|
1711
|
-
|
|
1772
|
+
/** @description 树节点勾选事件
|
|
1773
|
+
* @param {Object} data 节点数据
|
|
1774
|
+
* @param {Object} checkedInfo 选中信息
|
|
1775
|
+
*/
|
|
1712
1776
|
function handleTreeCheck(data, checkedInfo) {
|
|
1713
1777
|
let currenNode = featureTreeRef.value.$refs.child.getNode(data);
|
|
1714
1778
|
if (data.children) {
|
|
@@ -1724,7 +1788,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1724
1788
|
updateCheckedKeys();
|
|
1725
1789
|
}
|
|
1726
1790
|
|
|
1727
|
-
|
|
1791
|
+
/** @description 树节点点击事件
|
|
1792
|
+
* @param {Object} data 节点数据
|
|
1793
|
+
* @param {Object} node 节点对象
|
|
1794
|
+
*/
|
|
1728
1795
|
function handleTreeNodeClick(data, node) {
|
|
1729
1796
|
// 分类节点:切换展开/折叠
|
|
1730
1797
|
if (data.children) {
|
|
@@ -1737,7 +1804,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1737
1804
|
// 要素节点点击不展开(无 children)
|
|
1738
1805
|
}
|
|
1739
1806
|
|
|
1740
|
-
|
|
1807
|
+
/** @description 根据分类 key 切换该分类下所有要素的勾选状态
|
|
1808
|
+
* @param {String} categoryKey 分类 key
|
|
1809
|
+
* @param {Boolean} checked 是否选中
|
|
1810
|
+
*/
|
|
1741
1811
|
function toggleCategoryCheckByKey(categoryKey, checked) {
|
|
1742
1812
|
const category = featureCategories.find(cat => cat.key === categoryKey);
|
|
1743
1813
|
if (category && category.children) {
|
|
@@ -1749,7 +1819,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1749
1819
|
updateCheckedKeys();
|
|
1750
1820
|
}
|
|
1751
1821
|
|
|
1752
|
-
|
|
1822
|
+
/** @description 通过节点数据编辑要素(树节点回调用)
|
|
1823
|
+
* @param {Object} data 节点数据
|
|
1824
|
+
*/
|
|
1753
1825
|
function editFeatureFromNode(data) {
|
|
1754
1826
|
const category = featureCategories.find(cat => cat.key === data.category);
|
|
1755
1827
|
if (category) {
|
|
@@ -1757,12 +1829,16 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1757
1829
|
}
|
|
1758
1830
|
}
|
|
1759
1831
|
|
|
1760
|
-
|
|
1832
|
+
/** @description 通过节点数据缩放至要素
|
|
1833
|
+
* @param {Object} data 节点数据
|
|
1834
|
+
*/
|
|
1761
1835
|
function zoomToFeatureByKey(data) {
|
|
1762
1836
|
zoomToFeature(data);
|
|
1763
1837
|
}
|
|
1764
1838
|
|
|
1765
|
-
|
|
1839
|
+
/** @description 通过节点数据删除要素
|
|
1840
|
+
* @param {Object} data 节点数据
|
|
1841
|
+
*/
|
|
1766
1842
|
function deleteFeatureByKey(data) {
|
|
1767
1843
|
const category = featureCategories.find(cat => cat.key === data.category);
|
|
1768
1844
|
if (category) {
|
|
@@ -1770,14 +1846,17 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1770
1846
|
}
|
|
1771
1847
|
}
|
|
1772
1848
|
|
|
1773
|
-
|
|
1849
|
+
/** @description 通过分类 key 添加要素
|
|
1850
|
+
* @param {String} categoryKey 分类 key
|
|
1851
|
+
*/
|
|
1774
1852
|
function addFeatureByCategoryByKey(categoryKey) {
|
|
1775
1853
|
const category = featureCategories.find(cat => cat.key === categoryKey);
|
|
1776
1854
|
if (category) {
|
|
1777
1855
|
addFeatureByCategory(category);
|
|
1778
1856
|
}
|
|
1779
1857
|
}
|
|
1780
|
-
let featureTreeRef = (0, _vue.ref)(null);
|
|
1858
|
+
let featureTreeRef = (0, _vue.ref)(null); // 树组件 Ref
|
|
1859
|
+
|
|
1781
1860
|
(0, _vue.onMounted)(() => {
|
|
1782
1861
|
(0, _util.updatePosition)(boxRef.value, props);
|
|
1783
1862
|
(0, _vue.watch)(() => props.position, newVal => (0, _util.updatePosition)(boxRef.value, props));
|
|
@@ -1817,7 +1896,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1817
1896
|
};
|
|
1818
1897
|
|
|
1819
1898
|
/**
|
|
1820
|
-
* 地图准备好后,将已有 geojson 的要素渲染到地图
|
|
1899
|
+
* @description 地图准备好后,将已有 geojson 的要素渲染到地图
|
|
1900
|
+
* @param {LowAltitudeFeatureViewModel} vm 视图模型实例
|
|
1821
1901
|
*/
|
|
1822
1902
|
function renderExistingFeatures(vm) {
|
|
1823
1903
|
if (!vm) return;
|
|
@@ -1837,14 +1917,14 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1837
1917
|
}
|
|
1838
1918
|
|
|
1839
1919
|
/**
|
|
1840
|
-
* 加载模拟示例数据
|
|
1920
|
+
* @description 加载模拟示例数据
|
|
1841
1921
|
*/
|
|
1842
1922
|
function loadMockData() {
|
|
1843
1923
|
MOCK_FEATURE_S.forEach(item => addFeatureToTree(item));
|
|
1844
1924
|
}
|
|
1845
1925
|
|
|
1846
1926
|
/**
|
|
1847
|
-
* 加载外部数据
|
|
1927
|
+
* @description 加载外部数据
|
|
1848
1928
|
*/
|
|
1849
1929
|
function loadExternalData() {
|
|
1850
1930
|
if (props.loadLowAltitudeFeature) {
|
|
@@ -1859,7 +1939,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1859
1939
|
}
|
|
1860
1940
|
|
|
1861
1941
|
/**
|
|
1862
|
-
* 将要素添加到树中,并渲染到地图
|
|
1942
|
+
* @description 将要素添加到树中,并渲染到地图
|
|
1943
|
+
* @param {Object} item 要素数据
|
|
1863
1944
|
*/
|
|
1864
1945
|
function addFeatureToTree(item) {
|
|
1865
1946
|
const category = featureCategories.find(cat => cat.key === item.category);
|
|
@@ -1905,7 +1986,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1905
1986
|
|
|
1906
1987
|
// ==================== 要素CRUD操作 ====================
|
|
1907
1988
|
/**
|
|
1908
|
-
* 通过一级分类添加要素
|
|
1989
|
+
* @description 通过一级分类添加要素
|
|
1990
|
+
* @param {Object} category 分类对象
|
|
1909
1991
|
*/
|
|
1910
1992
|
function addFeatureByCategory(category) {
|
|
1911
1993
|
isAddOrEdit.value = true;
|
|
@@ -1918,7 +2000,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1918
2000
|
}
|
|
1919
2001
|
|
|
1920
2002
|
/**
|
|
1921
|
-
* 开始绘制
|
|
2003
|
+
* @description 开始绘制
|
|
2004
|
+
* @param {String} mode 绘制模式:point/polyline/polygon
|
|
1922
2005
|
*/
|
|
1923
2006
|
function startDraw(mode) {
|
|
1924
2007
|
if (!viewModel || !viewModel.isReady()) {
|
|
@@ -1970,7 +2053,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
1970
2053
|
}
|
|
1971
2054
|
|
|
1972
2055
|
/**
|
|
1973
|
-
* 编辑要素
|
|
2056
|
+
* @description 编辑要素
|
|
2057
|
+
* @param {Object} feature 要素对象
|
|
2058
|
+
* @param {Object} category 所属分类对象
|
|
1974
2059
|
*/
|
|
1975
2060
|
function editFeature(feature, category) {
|
|
1976
2061
|
// 1. 先准备所有数据,暂不显示面板
|
|
@@ -2030,7 +2115,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2030
2115
|
}
|
|
2031
2116
|
|
|
2032
2117
|
/**
|
|
2033
|
-
* 根据分类推断几何类型
|
|
2118
|
+
* @description 根据分类推断几何类型
|
|
2119
|
+
* @param {String} categoryKey 分类 key
|
|
2120
|
+
* @returns {String} 几何类型:point/polyline/polygon
|
|
2034
2121
|
*/
|
|
2035
2122
|
function inferGeometryFromCategory(categoryKey) {
|
|
2036
2123
|
if (categoryKey === "hangar") return "point";
|
|
@@ -2039,7 +2126,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2039
2126
|
}
|
|
2040
2127
|
|
|
2041
2128
|
/**
|
|
2042
|
-
* 缩放至要素
|
|
2129
|
+
* @description 缩放至要素
|
|
2130
|
+
* @param {Object} feature 要素对象
|
|
2043
2131
|
*/
|
|
2044
2132
|
function zoomToFeature(feature) {
|
|
2045
2133
|
if (!viewModel) {
|
|
@@ -2059,7 +2147,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2059
2147
|
}
|
|
2060
2148
|
|
|
2061
2149
|
/**
|
|
2062
|
-
* 删除要素
|
|
2150
|
+
* @description 删除要素
|
|
2151
|
+
* @param {Object} feature 要素对象
|
|
2152
|
+
* @param {Object} category 所属分类对象
|
|
2063
2153
|
*/
|
|
2064
2154
|
function deleteFeature(feature, category) {
|
|
2065
2155
|
const index = category.children.findIndex(f => f.id === feature.id);
|
|
@@ -2081,7 +2171,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2081
2171
|
}
|
|
2082
2172
|
|
|
2083
2173
|
/**
|
|
2084
|
-
* 切换网格化显示
|
|
2174
|
+
* @description 切换网格化显示
|
|
2175
|
+
* @param {Object} feature 要素对象
|
|
2085
2176
|
*/
|
|
2086
2177
|
function toggleGridDisplay(feature) {
|
|
2087
2178
|
feature.gridDisplay = !feature.gridDisplay;
|
|
@@ -2095,7 +2186,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2095
2186
|
}
|
|
2096
2187
|
|
|
2097
2188
|
/**
|
|
2098
|
-
* 更新实体可见性
|
|
2189
|
+
* @description 更新实体可见性
|
|
2190
|
+
* @param {Object} feature 要素对象
|
|
2191
|
+
* @param {Boolean} checked 是否可见
|
|
2099
2192
|
*/
|
|
2100
2193
|
function updateEntityVisibility(feature, checked) {
|
|
2101
2194
|
if (viewModel) {
|
|
@@ -2104,6 +2197,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2104
2197
|
}
|
|
2105
2198
|
|
|
2106
2199
|
// ==================== GeoJSON 操作 ====================
|
|
2200
|
+
/** @description 处理 GeoJSON 文件上传
|
|
2201
|
+
* @param {Object} file 上传的文件对象
|
|
2202
|
+
*/
|
|
2107
2203
|
function handleGeoJSONUpload(file) {
|
|
2108
2204
|
const reader = new FileReader();
|
|
2109
2205
|
reader.onload = e => {
|
|
@@ -2132,6 +2228,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2132
2228
|
};
|
|
2133
2229
|
reader.readAsText(file.raw);
|
|
2134
2230
|
}
|
|
2231
|
+
|
|
2232
|
+
/** @description 根据 GeoJSON 自动推断几何类型
|
|
2233
|
+
* @param {Object} geojson GeoJSON 对象
|
|
2234
|
+
*/
|
|
2135
2235
|
function autoInferGeometryType(geojson) {
|
|
2136
2236
|
let geomType = "";
|
|
2137
2237
|
if (geojson.type === "FeatureCollection" && geojson.features && geojson.features.length > 0) {
|
|
@@ -2150,6 +2250,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2150
2250
|
symbolSettings.shapeType = "faceData";
|
|
2151
2251
|
}
|
|
2152
2252
|
}
|
|
2253
|
+
|
|
2254
|
+
// 导出当前 GeoJSON 为文件
|
|
2153
2255
|
function exportGeoJSON() {
|
|
2154
2256
|
if (!currentGeoJSON) {
|
|
2155
2257
|
(0, _message.default)({
|
|
@@ -2172,6 +2274,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2172
2274
|
type: "success"
|
|
2173
2275
|
});
|
|
2174
2276
|
}
|
|
2277
|
+
|
|
2278
|
+
// 删除当前绘制中的要素
|
|
2175
2279
|
function deleteCurrentDrawing() {
|
|
2176
2280
|
removeCurrentEntities();
|
|
2177
2281
|
currentGeoJSON = null;
|
|
@@ -2181,6 +2285,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2181
2285
|
type: "success"
|
|
2182
2286
|
});
|
|
2183
2287
|
}
|
|
2288
|
+
|
|
2289
|
+
// 移除当前绘制产生的所有实体
|
|
2184
2290
|
function removeCurrentEntities() {
|
|
2185
2291
|
if (viewModel) {
|
|
2186
2292
|
viewModel.removeCurrentDrawingEntities();
|
|
@@ -2189,6 +2295,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2189
2295
|
}
|
|
2190
2296
|
|
|
2191
2297
|
// ==================== 表单操作 ====================
|
|
2298
|
+
/** @description 要素分类变化回调,重置子类并同步绘图模式
|
|
2299
|
+
* @param {String} val 分类 value
|
|
2300
|
+
*/
|
|
2192
2301
|
function onFeatureClassChange(val) {
|
|
2193
2302
|
// 仅当子类在当前分类下无效时才重置,避免编辑要素时被意外清空
|
|
2194
2303
|
const validSubclasses = (subclassOptionsMap[val] || []).map(opt => opt.value);
|
|
@@ -2209,6 +2318,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2209
2318
|
symbolSettings.bufferType = "cube";
|
|
2210
2319
|
}
|
|
2211
2320
|
}
|
|
2321
|
+
|
|
2322
|
+
// 重置表单数据及绘图状态
|
|
2212
2323
|
function resetForm() {
|
|
2213
2324
|
formData.code = "";
|
|
2214
2325
|
formData.name = "";
|
|
@@ -2222,6 +2333,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2222
2333
|
currentEditFeature = null;
|
|
2223
2334
|
Object.assign(symbolSettings, defaultSymbolSettings());
|
|
2224
2335
|
}
|
|
2336
|
+
|
|
2337
|
+
// 清空表单并清除绘制
|
|
2225
2338
|
function clearForm() {
|
|
2226
2339
|
resetForm();
|
|
2227
2340
|
clearDrawHandler();
|
|
@@ -2231,6 +2344,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2231
2344
|
type: "info"
|
|
2232
2345
|
});
|
|
2233
2346
|
}
|
|
2347
|
+
|
|
2348
|
+
// 保存要素(新建或更新)
|
|
2234
2349
|
function saveFeature() {
|
|
2235
2350
|
// 验证要素编码
|
|
2236
2351
|
if (!formData.code.trim()) {
|
|
@@ -2383,6 +2498,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2383
2498
|
isEdit.value = false;
|
|
2384
2499
|
resetForm();
|
|
2385
2500
|
}
|
|
2501
|
+
|
|
2502
|
+
// 取消编辑/新增,关闭面板并清理状态
|
|
2386
2503
|
function cancel() {
|
|
2387
2504
|
isAddOrEdit.value = false;
|
|
2388
2505
|
isEdit.value = false;
|
|
@@ -2390,9 +2507,13 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
|
|
|
2390
2507
|
clearDrawHandler();
|
|
2391
2508
|
removeCurrentEntities();
|
|
2392
2509
|
}
|
|
2510
|
+
|
|
2511
|
+
// 切换右侧面板折叠状态
|
|
2393
2512
|
function togglePanelCollapse() {
|
|
2394
2513
|
panelCollapsed.value = !panelCollapsed.value;
|
|
2395
2514
|
}
|
|
2515
|
+
|
|
2516
|
+
// 清除当前绘制事件处理器
|
|
2396
2517
|
function clearDrawHandler() {
|
|
2397
2518
|
if (viewModel) {
|
|
2398
2519
|
viewModel.clearDraw();
|
|
@@ -3018,6 +3139,58 @@ var _default = exports.A = {
|
|
|
3018
3139
|
|
|
3019
3140
|
/***/ }),
|
|
3020
3141
|
|
|
3142
|
+
/***/ 26188:
|
|
3143
|
+
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
3144
|
+
|
|
3145
|
+
// ESM COMPAT FLAG
|
|
3146
|
+
__webpack_require__.r(__webpack_exports__);
|
|
3147
|
+
|
|
3148
|
+
// EXPORTS
|
|
3149
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
3150
|
+
__esModule: function() { return /* reexport */ LowAltitudeFeaturevue_type_script_setup_true_lang_js/* __esModule */.B; },
|
|
3151
|
+
"default": function() { return /* binding */ LowAltitudeFeature; }
|
|
3152
|
+
});
|
|
3153
|
+
|
|
3154
|
+
// EXTERNAL MODULE: ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=script&setup=true&lang=js
|
|
3155
|
+
var LowAltitudeFeaturevue_type_script_setup_true_lang_js = __webpack_require__(23043);
|
|
3156
|
+
;// ./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=script&setup=true&lang=js
|
|
3157
|
+
|
|
3158
|
+
// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js
|
|
3159
|
+
var injectStylesIntoStyleTag = __webpack_require__(85072);
|
|
3160
|
+
var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);
|
|
3161
|
+
// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=style&index=0&id=4aa57328&scoped=true&lang=css
|
|
3162
|
+
var LowAltitudeFeaturevue_type_style_index_0_id_4aa57328_scoped_true_lang_css = __webpack_require__(39502);
|
|
3163
|
+
;// ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=style&index=0&id=4aa57328&scoped=true&lang=css
|
|
3164
|
+
|
|
3165
|
+
|
|
3166
|
+
|
|
3167
|
+
var options = {};
|
|
3168
|
+
|
|
3169
|
+
options.insert = "head";
|
|
3170
|
+
options.singleton = false;
|
|
3171
|
+
|
|
3172
|
+
var update = injectStylesIntoStyleTag_default()(LowAltitudeFeaturevue_type_style_index_0_id_4aa57328_scoped_true_lang_css/* default */.A, options);
|
|
3173
|
+
|
|
3174
|
+
|
|
3175
|
+
|
|
3176
|
+
/* harmony default export */ var lowaltitudefeature_LowAltitudeFeaturevue_type_style_index_0_id_4aa57328_scoped_true_lang_css = (LowAltitudeFeaturevue_type_style_index_0_id_4aa57328_scoped_true_lang_css/* default */.A.locals || {});
|
|
3177
|
+
;// ./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue?vue&type=style&index=0&id=4aa57328&scoped=true&lang=css
|
|
3178
|
+
|
|
3179
|
+
// EXTERNAL MODULE: ./node_modules/vue-loader/dist/exportHelper.js
|
|
3180
|
+
var exportHelper = __webpack_require__(66262);
|
|
3181
|
+
;// ./src/webgl/lowaltitudefeature/LowAltitudeFeature.vue
|
|
3182
|
+
|
|
3183
|
+
|
|
3184
|
+
|
|
3185
|
+
;
|
|
3186
|
+
|
|
3187
|
+
|
|
3188
|
+
const __exports__ = /*#__PURE__*/(0,exportHelper/* default */.A)(LowAltitudeFeaturevue_type_script_setup_true_lang_js/* default */.A, [['__scopeId',"data-v-4aa57328"]])
|
|
3189
|
+
|
|
3190
|
+
/* harmony default export */ var LowAltitudeFeature = (__exports__);
|
|
3191
|
+
|
|
3192
|
+
/***/ }),
|
|
3193
|
+
|
|
3021
3194
|
/***/ 26331:
|
|
3022
3195
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
3023
3196
|
|
|
@@ -3198,6 +3371,22 @@ _Form.default.install = (Vue, opts) => {
|
|
|
3198
3371
|
_KqGIS.kq_npm_client_common_vue.KqForm = _Form.default;
|
|
3199
3372
|
_KqGIS.kq_npm_client_common_vue.KqFormItem = _FormItem.default;
|
|
3200
3373
|
|
|
3374
|
+
/***/ }),
|
|
3375
|
+
|
|
3376
|
+
/***/ 39502:
|
|
3377
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
3378
|
+
|
|
3379
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76314);
|
|
3380
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
3381
|
+
// Imports
|
|
3382
|
+
|
|
3383
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
|
|
3384
|
+
// Module
|
|
3385
|
+
___CSS_LOADER_EXPORT___.push([module.id, "\n.kq-laf-geometry-status[data-v-4aa57328] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n margin: 10px 0;\n border-radius: 4px;\n background-color: #fef0f0;\n border: 1px solid #fde2e2;\n color: #f56c6c;\n font-size: 12px;\n}\n.kq-laf-geometry-status.has-geometry[data-v-4aa57328] {\n background-color: #f0f9eb;\n border-color: #e1f3d8;\n color: #67c23a;\n}\n.kq-laf-status-text[data-v-4aa57328] {\n flex: 1;\n}\n", ""]);
|
|
3386
|
+
// Exports
|
|
3387
|
+
/* harmony default export */ __webpack_exports__.A = (___CSS_LOADER_EXPORT___);
|
|
3388
|
+
|
|
3389
|
+
|
|
3201
3390
|
/***/ }),
|
|
3202
3391
|
|
|
3203
3392
|
/***/ 39640:
|
|
@@ -3843,22 +4032,6 @@ const __exports__ = Dividervue_type_script_lang_js/* default */.A;
|
|
|
3843
4032
|
|
|
3844
4033
|
module.exports = __WEBPACK_EXTERNAL_MODULE__74383__;
|
|
3845
4034
|
|
|
3846
|
-
/***/ }),
|
|
3847
|
-
|
|
3848
|
-
/***/ 74703:
|
|
3849
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
3850
|
-
|
|
3851
|
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76314);
|
|
3852
|
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
3853
|
-
// Imports
|
|
3854
|
-
|
|
3855
|
-
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
|
|
3856
|
-
// Module
|
|
3857
|
-
___CSS_LOADER_EXPORT___.push([module.id, "\n.kq-laf-geometry-status[data-v-b3c8fafe] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n margin: 10px 0;\n border-radius: 4px;\n background-color: #fef0f0;\n border: 1px solid #fde2e2;\n color: #f56c6c;\n font-size: 12px;\n}\n.kq-laf-geometry-status.has-geometry[data-v-b3c8fafe] {\n background-color: #f0f9eb;\n border-color: #e1f3d8;\n color: #67c23a;\n}\n.kq-laf-status-text[data-v-b3c8fafe] {\n flex: 1;\n}\n", ""]);
|
|
3858
|
-
// Exports
|
|
3859
|
-
/* harmony default export */ __webpack_exports__.A = (___CSS_LOADER_EXPORT___);
|
|
3860
|
-
|
|
3861
|
-
|
|
3862
4035
|
/***/ }),
|
|
3863
4036
|
|
|
3864
4037
|
/***/ 75797:
|
|
@@ -4717,11 +4890,11 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
4717
4890
|
value: true
|
|
4718
4891
|
}));
|
|
4719
4892
|
exports.kq_npm_client_leaflet_vue = exports.kq_npm_client_common_vue = exports.kq_npm_client3d_webgl_vue = void 0;
|
|
4720
|
-
|
|
4893
|
+
const kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
|
|
4721
4894
|
__webpack_require__.g.kq_npm_client_common_vue = kq_npm_client_common_vue;
|
|
4722
|
-
|
|
4895
|
+
const kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
|
|
4723
4896
|
__webpack_require__.g.kq_npm_client_leaflet_vue = kq_npm_client_leaflet_vue;
|
|
4724
|
-
|
|
4897
|
+
const kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
|
|
4725
4898
|
__webpack_require__.g.kq_npm_client3d_webgl_vue = kq_npm_client3d_webgl_vue;
|
|
4726
4899
|
|
|
4727
4900
|
/***/ })
|
|
@@ -4833,7 +5006,7 @@ Object.defineProperty(exports, "default", ({
|
|
|
4833
5006
|
return _LowAltitudeFeature.default;
|
|
4834
5007
|
}
|
|
4835
5008
|
}));
|
|
4836
|
-
var _LowAltitudeFeature = _interopRequireDefault(__webpack_require__(
|
|
5009
|
+
var _LowAltitudeFeature = _interopRequireDefault(__webpack_require__(26188));
|
|
4837
5010
|
var _LowAltitudeFeatureViewModel = _interopRequireDefault(__webpack_require__(4494));
|
|
4838
5011
|
var _init = _interopRequireDefault(__webpack_require__(20455));
|
|
4839
5012
|
/*
|