@xingm/vmap-cesium-toolbar 0.0.2-alpha.11 → 0.0.2-alpha.12
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/dist/index.js +181 -67
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +5 -5
- package/dist/index.umd.js.map +1 -1
- package/dist/libs/CesiumMapDraw.d.ts +23 -0
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -91,14 +91,14 @@ class L {
|
|
|
91
91
|
* 应用/切换选中样式(统一逻辑,供调度器和子类共用)
|
|
92
92
|
*/
|
|
93
93
|
applySelectedStyleToEntity(e) {
|
|
94
|
-
|
|
94
|
+
I(e);
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
97
|
* 恢复原始样式(兼容旧接口,内部仍走统一逻辑)
|
|
98
98
|
*/
|
|
99
99
|
restoreOriginalStyleForEntity(e) {
|
|
100
100
|
const t = e;
|
|
101
|
-
t._isSelected &&
|
|
101
|
+
t._isSelected && I(t);
|
|
102
102
|
}
|
|
103
103
|
constructor(e, t = {}) {
|
|
104
104
|
this.viewer = e, this.scene = e.scene, this.entities = e.entities, this.callbacks = t, this.updateOffsetHeight();
|
|
@@ -199,7 +199,7 @@ class L {
|
|
|
199
199
|
}
|
|
200
200
|
// 其余公共方法(如有需要可在子类中覆盖)
|
|
201
201
|
}
|
|
202
|
-
function
|
|
202
|
+
function I(c) {
|
|
203
203
|
try {
|
|
204
204
|
const t = c._drawOptions?.selected;
|
|
205
205
|
if (!t) return;
|
|
@@ -253,16 +253,16 @@ function j(c) {
|
|
|
253
253
|
console.warn("toggleSelectedStyle failed", e);
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
|
-
function
|
|
256
|
+
function M(c) {
|
|
257
257
|
return !!c && Number.isFinite(c.x) && Number.isFinite(c.y) && Number.isFinite(c.z);
|
|
258
258
|
}
|
|
259
|
-
function
|
|
259
|
+
function j(c) {
|
|
260
260
|
return !isFinite(c) || isNaN(c) ? "0.00 m" : c >= 1e3 ? `${(c / 1e3).toFixed(2)} km` : `${c.toFixed(2)} m`;
|
|
261
261
|
}
|
|
262
|
-
function
|
|
262
|
+
function R(c) {
|
|
263
263
|
return !isFinite(c) || isNaN(c) ? "0.00 m²" : c >= 1 ? `${c.toFixed(2)} km²` : `${(c * 1e6).toFixed(2)} m²`;
|
|
264
264
|
}
|
|
265
|
-
function
|
|
265
|
+
function W(c, e) {
|
|
266
266
|
const t = n.Cartographic.fromCartesian(c), i = n.Cartographic.fromCartesian(e), r = Math.min(t.longitude, i.longitude), o = Math.max(t.longitude, i.longitude), s = Math.min(t.latitude, i.latitude), a = Math.max(t.latitude, i.latitude);
|
|
267
267
|
return new n.Rectangle(r, s, o, a);
|
|
268
268
|
}
|
|
@@ -276,14 +276,14 @@ function q(c) {
|
|
|
276
276
|
);
|
|
277
277
|
return o * s / 1e6;
|
|
278
278
|
}
|
|
279
|
-
function
|
|
280
|
-
const t = c.filter((o) =>
|
|
279
|
+
function H(c, e = n.Ellipsoid.WGS84) {
|
|
280
|
+
const t = c.filter((o) => M(o));
|
|
281
281
|
if (t.length < 3) return 0;
|
|
282
282
|
let i = 0;
|
|
283
283
|
const r = t.length;
|
|
284
284
|
for (let o = 0; o < r; o++) {
|
|
285
285
|
const s = t[o], a = t[(o + 1) % r];
|
|
286
|
-
if (!
|
|
286
|
+
if (!M(s) || !M(a))
|
|
287
287
|
return 0;
|
|
288
288
|
const l = e.cartesianToCartographic(s), h = e.cartesianToCartographic(a);
|
|
289
289
|
if (!l || !h || !Number.isFinite(l.longitude) || !Number.isFinite(l.latitude) || !Number.isFinite(h.longitude) || !Number.isFinite(h.latitude))
|
|
@@ -293,7 +293,7 @@ function R(c, e = n.Ellipsoid.WGS84) {
|
|
|
293
293
|
return i = Math.abs(i * 6378137 * 6378137 / 2), i / 1e6;
|
|
294
294
|
}
|
|
295
295
|
function J(c) {
|
|
296
|
-
const e = c.filter((o) =>
|
|
296
|
+
const e = c.filter((o) => M(o));
|
|
297
297
|
if (e.length === 0) return n.Cartesian3.ZERO;
|
|
298
298
|
let t = 0, i = 0, r = 0;
|
|
299
299
|
for (let o = 0; o < e.length; o++)
|
|
@@ -354,7 +354,7 @@ class V extends L {
|
|
|
354
354
|
finishDrawing() {
|
|
355
355
|
if (this.tempPositions.length < 2)
|
|
356
356
|
return this.restoreRequestRenderModeIfNeeded(), null;
|
|
357
|
-
const e = this.tempPositions.filter((l) =>
|
|
357
|
+
const e = this.tempPositions.filter((l) => M(l));
|
|
358
358
|
if (e.length < 2)
|
|
359
359
|
return this.restoreRequestRenderModeIfNeeded(), null;
|
|
360
360
|
const t = e.map((l) => {
|
|
@@ -474,7 +474,7 @@ class V extends L {
|
|
|
474
474
|
h.latitude,
|
|
475
475
|
(h.height || 0) + this.offsetHeight
|
|
476
476
|
));
|
|
477
|
-
const m = r % 2 === 0 ? -25 : 25, w =
|
|
477
|
+
const m = r % 2 === 0 ? -25 : 25, w = j(a);
|
|
478
478
|
if (r < this.currentSegmentLabels.length && this.currentSegmentLabels[r].billboard) {
|
|
479
479
|
const g = this.currentSegmentLabels[r];
|
|
480
480
|
if (g.position = new n.ConstantPositionProperty(u), g.billboard.pixelOffset = new n.ConstantProperty(new n.Cartesian2(0, m)), g._groundPosition = d, g._segmentText !== w) {
|
|
@@ -531,7 +531,7 @@ class V extends L {
|
|
|
531
531
|
i.latitude,
|
|
532
532
|
(i.height || 0) + this.offsetHeight
|
|
533
533
|
));
|
|
534
|
-
const a = `总长: ${
|
|
534
|
+
const a = `总长: ${j(e)}`, l = this.createTotalLengthBillboardImage(a);
|
|
535
535
|
if (this.currentTotalLabel && this.currentTotalLabel.billboard)
|
|
536
536
|
this.currentTotalLabel.position = new n.ConstantPositionProperty(o), this.currentTotalLabel.billboard.image = new n.ConstantProperty(l), this.currentTotalLabel._groundPosition = r;
|
|
537
537
|
else {
|
|
@@ -616,9 +616,15 @@ class K extends L {
|
|
|
616
616
|
updateDrawingEntity(e) {
|
|
617
617
|
if (this.scene.mode === n.SceneMode.SCENE3D && !this.scene.globe.tilesLoaded)
|
|
618
618
|
return;
|
|
619
|
-
const i = this.tempPositions.filter((o) =>
|
|
619
|
+
const i = this.tempPositions.filter((o) => M(o)), r = e && M(e) && i.length >= 2 ? [...i, e] : i;
|
|
620
620
|
if (r.length >= 3) {
|
|
621
|
-
const o = r.map((g) =>
|
|
621
|
+
const o = r.map((g) => {
|
|
622
|
+
try {
|
|
623
|
+
return n.Cartographic.fromCartesian(g);
|
|
624
|
+
} catch {
|
|
625
|
+
return null;
|
|
626
|
+
}
|
|
627
|
+
}).filter((g) => g && Number.isFinite(g.longitude) && Number.isFinite(g.latitude));
|
|
622
628
|
if (o.length < 3) {
|
|
623
629
|
if (this.currentPolygonEntity) {
|
|
624
630
|
this.entities.remove(this.currentPolygonEntity);
|
|
@@ -684,10 +690,16 @@ class K extends L {
|
|
|
684
690
|
* 完成绘制
|
|
685
691
|
*/
|
|
686
692
|
finishDrawing() {
|
|
687
|
-
const e = this.tempPositions.filter((u) =>
|
|
693
|
+
const e = this.tempPositions.filter((u) => M(u));
|
|
688
694
|
if (e.length < 3)
|
|
689
695
|
return this.restoreRequestRenderModeIfNeeded(), null;
|
|
690
|
-
const t = e.map((u) =>
|
|
696
|
+
const t = e.map((u) => {
|
|
697
|
+
try {
|
|
698
|
+
return n.Cartographic.fromCartesian(u);
|
|
699
|
+
} catch {
|
|
700
|
+
return null;
|
|
701
|
+
}
|
|
702
|
+
}).filter((u) => u && Number.isFinite(u.longitude) && Number.isFinite(u.latitude));
|
|
691
703
|
if (t.length < 3)
|
|
692
704
|
return this.restoreRequestRenderModeIfNeeded(), null;
|
|
693
705
|
const i = t.map(
|
|
@@ -742,7 +754,7 @@ class K extends L {
|
|
|
742
754
|
}
|
|
743
755
|
}), r._groundPositions = i, r && (r._drawOptions = this.drawOptions, r._drawType = this.getDrawType(), this.drawOptions?.onClick && (r._onClick = this.drawOptions.onClick), o && (r._borderEntity = o));
|
|
744
756
|
}
|
|
745
|
-
const h =
|
|
757
|
+
const h = H(i, this.scene.globe.ellipsoid);
|
|
746
758
|
if (h > 0) {
|
|
747
759
|
const u = J(i), m = n.Cartographic.fromCartesian(u), w = n.Cartesian3.fromRadians(
|
|
748
760
|
m.longitude,
|
|
@@ -755,7 +767,7 @@ class K extends L {
|
|
|
755
767
|
m.latitude,
|
|
756
768
|
(m.height || 0) + this.offsetHeight
|
|
757
769
|
));
|
|
758
|
-
const p = `面积: ${
|
|
770
|
+
const p = `面积: ${R(h)}`, f = this.createTotalLengthBillboardImage(p), b = this.entities.add({
|
|
759
771
|
position: g,
|
|
760
772
|
billboard: {
|
|
761
773
|
image: f,
|
|
@@ -778,7 +790,7 @@ class K extends L {
|
|
|
778
790
|
entity: r,
|
|
779
791
|
type: "polygon",
|
|
780
792
|
positions: i,
|
|
781
|
-
areaKm2:
|
|
793
|
+
areaKm2: H(i, this.scene.globe.ellipsoid)
|
|
782
794
|
};
|
|
783
795
|
return this.callbacks.onMeasureComplete && this.callbacks.onMeasureComplete(d), this.restoreRequestRenderModeIfNeeded(), this.callbacks.onDrawEnd && this.callbacks.onDrawEnd(r, d), d;
|
|
784
796
|
}
|
|
@@ -825,7 +837,7 @@ class _ extends L {
|
|
|
825
837
|
}
|
|
826
838
|
return;
|
|
827
839
|
}
|
|
828
|
-
const i =
|
|
840
|
+
const i = W(t[0], t[1]), r = n.HeightReference.NONE, o = this.drawOptions?.fillColor ? this.resolveColor(this.drawOptions.fillColor) : n.Color.GREEN, s = this.drawOptions?.strokeColor ? this.resolveColor(this.drawOptions.strokeColor) : this.drawOptions?.outlineColor ? this.resolveColor(this.drawOptions.outlineColor) : n.Color.DARKGREEN, a = this.drawOptions?.strokeWidth ?? this.drawOptions?.outlineWidth ?? 1;
|
|
829
841
|
this.currentRectangleEntity && !this.entities.contains(this.currentRectangleEntity) && (this.currentRectangleEntity = null), this.currentRectangleEntity ? (this.currentRectangleEntity.rectangle.coordinates = new n.ConstantProperty(i), this.currentRectangleEntity.rectangle.heightReference = new n.ConstantProperty(r), this.currentRectangleEntity.rectangle.extrudedHeight = this.offsetHeight > 0 ? new n.ConstantProperty(this.offsetHeight) : void 0, this.currentRectangleEntity.rectangle.material = new n.ColorMaterialProperty(o.withAlpha(0.5)), this.currentRectangleEntity.rectangle.outlineColor = new n.ConstantProperty(s), this.currentRectangleEntity.rectangle.outlineWidth = new n.ConstantProperty(a)) : (this.currentRectangleEntity = this.entities.add({
|
|
830
842
|
rectangle: {
|
|
831
843
|
coordinates: i,
|
|
@@ -844,7 +856,7 @@ class _ extends L {
|
|
|
844
856
|
finishDrawing() {
|
|
845
857
|
if (this.tempPositions.length < 2)
|
|
846
858
|
return this.restoreRequestRenderModeIfNeeded(), null;
|
|
847
|
-
const e = this.tempPositions.filter((m) =>
|
|
859
|
+
const e = this.tempPositions.filter((m) => M(m));
|
|
848
860
|
if (e.length < 2)
|
|
849
861
|
return this.restoreRequestRenderModeIfNeeded(), null;
|
|
850
862
|
const t = e.map((m) => {
|
|
@@ -854,7 +866,7 @@ class _ extends L {
|
|
|
854
866
|
w.latitude,
|
|
855
867
|
w.height || 0
|
|
856
868
|
);
|
|
857
|
-
}), i =
|
|
869
|
+
}), i = W(t[0], t[1]);
|
|
858
870
|
let r = null;
|
|
859
871
|
const o = this.drawOptions?.fillColor ? this.resolveColor(this.drawOptions.fillColor) : n.Color.GREEN, s = this.drawOptions?.strokeColor ? this.resolveColor(this.drawOptions.strokeColor) : this.drawOptions?.outlineColor ? this.resolveColor(this.drawOptions.outlineColor) : n.Color.DARKGREEN, a = this.drawOptions?.strokeWidth ?? this.drawOptions?.outlineWidth ?? 1;
|
|
860
872
|
this.offsetHeight > 0 ? (r = this.entities.add({
|
|
@@ -892,7 +904,7 @@ class _ extends L {
|
|
|
892
904
|
m.latitude,
|
|
893
905
|
this.offsetHeight
|
|
894
906
|
));
|
|
895
|
-
const p = `面积: ${
|
|
907
|
+
const p = `面积: ${R(l)}`, f = this.createTotalLengthBillboardImage(p), b = this.entities.add({
|
|
896
908
|
position: g,
|
|
897
909
|
billboard: {
|
|
898
910
|
image: f,
|
|
@@ -1077,7 +1089,7 @@ class $ extends L {
|
|
|
1077
1089
|
o._groundPosition = i, o._radius = r, o && (o._drawOptions = this.drawOptions, o._drawType = this.getDrawType(), this.drawOptions?.onClick && (o._onClick = this.drawOptions.onClick));
|
|
1078
1090
|
const d = Math.PI * r * r / 1e6;
|
|
1079
1091
|
if (d > 0) {
|
|
1080
|
-
const f = `面积: ${
|
|
1092
|
+
const f = `面积: ${R(d)}`, b = this.createTotalLengthBillboardImage(f), C = this.entities.add({
|
|
1081
1093
|
position: s,
|
|
1082
1094
|
billboard: {
|
|
1083
1095
|
image: b,
|
|
@@ -1158,6 +1170,10 @@ class D {
|
|
|
1158
1170
|
// 双击判断
|
|
1159
1171
|
// 最近一次鼠标移动位置,用于在右键删点后立即重绘预览
|
|
1160
1172
|
lastPreviewPosition = null;
|
|
1173
|
+
// 绘制步骤提示(跟随鼠标的提示 Label)
|
|
1174
|
+
drawHintEntity = null;
|
|
1175
|
+
drawHintText = "";
|
|
1176
|
+
drawHintLastPosition = null;
|
|
1161
1177
|
// 静态:当前处于绘制状态的 DrawHelper,用于跨实例互斥
|
|
1162
1178
|
static activeDrawingHelper = null;
|
|
1163
1179
|
// 绘制类实例
|
|
@@ -1219,7 +1235,7 @@ class D {
|
|
|
1219
1235
|
} catch (d) {
|
|
1220
1236
|
console.warn("entity onClick handler error", d);
|
|
1221
1237
|
}
|
|
1222
|
-
s._drawOptions?.selected &&
|
|
1238
|
+
s._drawOptions?.selected && I(s);
|
|
1223
1239
|
}, n.ScreenSpaceEventType.LEFT_CLICK);
|
|
1224
1240
|
} catch (i) {
|
|
1225
1241
|
console.warn("entity click handler init failed", i);
|
|
@@ -1230,7 +1246,7 @@ class D {
|
|
|
1230
1246
|
*/
|
|
1231
1247
|
handleSceneModeChanged() {
|
|
1232
1248
|
const e = this.offsetHeight;
|
|
1233
|
-
this.updateOffsetHeight(), e !== this.offsetHeight && this.updateFinishedEntitiesForModeChange();
|
|
1249
|
+
this.updateOffsetHeight(), e !== this.offsetHeight && this.updateFinishedEntitiesForModeChange(), this.isDrawing && this.drawHintLastPosition && this.updateDrawHintPosition(this.drawHintLastPosition);
|
|
1234
1250
|
}
|
|
1235
1251
|
/**
|
|
1236
1252
|
* 根据场景模式更新偏移高度
|
|
@@ -1238,6 +1254,97 @@ class D {
|
|
|
1238
1254
|
updateOffsetHeight() {
|
|
1239
1255
|
this.scene.mode === n.SceneMode.SCENE3D ? this.offsetHeight = 1 : this.offsetHeight = 0;
|
|
1240
1256
|
}
|
|
1257
|
+
/**
|
|
1258
|
+
* 计算提示文本(随绘制模式 + 点数量变化)
|
|
1259
|
+
*/
|
|
1260
|
+
getDrawHintText() {
|
|
1261
|
+
if (!this.isDrawing || !this.drawMode)
|
|
1262
|
+
return "";
|
|
1263
|
+
const e = this.tempPositions.length;
|
|
1264
|
+
switch (this.drawMode) {
|
|
1265
|
+
case "circle":
|
|
1266
|
+
return e === 0 ? "单击确定圆心" : e === 1 ? "移动鼠标确定半径,单击确定半径点,双击完成,右键撤销" : "双击完成,右键撤销";
|
|
1267
|
+
case "rectangle":
|
|
1268
|
+
return e === 0 ? "单击确定起点" : e === 1 ? "移动鼠标确定终点,单击确定终点,双击完成,右键撤销" : "双击完成,右键撤销";
|
|
1269
|
+
case "polygon":
|
|
1270
|
+
return e === 0 ? "单击开始绘制" : "单击继续添加点,双击完成,右键删除最后一点";
|
|
1271
|
+
case "line":
|
|
1272
|
+
return e === 0 ? "单击开始绘制" : "单击继续添加点,双击完成,右键删除最后一点";
|
|
1273
|
+
default:
|
|
1274
|
+
return "";
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
/**
|
|
1278
|
+
* 将提示位置转换为显示位置(按当前模式做轻微抬高,避免被地形遮挡)
|
|
1279
|
+
*/
|
|
1280
|
+
toHintDisplayPosition(e) {
|
|
1281
|
+
try {
|
|
1282
|
+
const t = n.Cartographic.fromCartesian(e), i = t.height || 0, r = this.offsetHeight > 0 ? this.offsetHeight : 0.1;
|
|
1283
|
+
return n.Cartesian3.fromRadians(
|
|
1284
|
+
t.longitude,
|
|
1285
|
+
t.latitude,
|
|
1286
|
+
i + r
|
|
1287
|
+
);
|
|
1288
|
+
} catch {
|
|
1289
|
+
return e;
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
/**
|
|
1293
|
+
* 创建或更新提示实体的位置与文本
|
|
1294
|
+
*/
|
|
1295
|
+
updateDrawHintPosition(e) {
|
|
1296
|
+
if (!this.isDrawing) return;
|
|
1297
|
+
const t = this.getDrawHintText();
|
|
1298
|
+
if (!t) {
|
|
1299
|
+
this.clearDrawHint();
|
|
1300
|
+
return;
|
|
1301
|
+
}
|
|
1302
|
+
this.drawHintText = t, this.drawHintLastPosition = e.clone();
|
|
1303
|
+
const i = this.toHintDisplayPosition(e);
|
|
1304
|
+
this.drawHintEntity ? (this.drawHintEntity.position = new n.ConstantPositionProperty(i), this.drawHintEntity.label && (this.drawHintEntity.label.text = new n.ConstantProperty(this.drawHintText))) : this.drawHintEntity = this.entities.add({
|
|
1305
|
+
position: new n.ConstantPositionProperty(i),
|
|
1306
|
+
label: {
|
|
1307
|
+
text: this.drawHintText,
|
|
1308
|
+
font: "14px 'Microsoft YaHei', 'PingFang SC', sans-serif",
|
|
1309
|
+
showBackground: !0,
|
|
1310
|
+
backgroundColor: n.Color.BLACK.withAlpha(0.75),
|
|
1311
|
+
fillColor: n.Color.WHITE,
|
|
1312
|
+
outlineColor: n.Color.BLACK,
|
|
1313
|
+
outlineWidth: 2,
|
|
1314
|
+
style: n.LabelStyle.FILL_AND_OUTLINE,
|
|
1315
|
+
pixelOffset: new n.Cartesian2(12, -18),
|
|
1316
|
+
horizontalOrigin: n.HorizontalOrigin.LEFT,
|
|
1317
|
+
verticalOrigin: n.VerticalOrigin.TOP,
|
|
1318
|
+
disableDepthTestDistance: Number.POSITIVE_INFINITY,
|
|
1319
|
+
heightReference: n.HeightReference.NONE,
|
|
1320
|
+
scaleByDistance: new n.NearFarScalar(150, 1, 15e6, 0.6)
|
|
1321
|
+
}
|
|
1322
|
+
});
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* 更新提示文本(不改变位置;通常在点数变化时调用)
|
|
1326
|
+
*/
|
|
1327
|
+
refreshDrawHintTextOnly() {
|
|
1328
|
+
const e = this.getDrawHintText();
|
|
1329
|
+
if (this.drawHintText = e, !e) {
|
|
1330
|
+
this.clearDrawHint();
|
|
1331
|
+
return;
|
|
1332
|
+
}
|
|
1333
|
+
this.drawHintEntity?.label && (this.drawHintEntity.label.text = new n.ConstantProperty(e));
|
|
1334
|
+
}
|
|
1335
|
+
/**
|
|
1336
|
+
* 清除绘制提示实体
|
|
1337
|
+
*/
|
|
1338
|
+
clearDrawHint() {
|
|
1339
|
+
if (this.drawHintEntity) {
|
|
1340
|
+
try {
|
|
1341
|
+
this.entities.remove(this.drawHintEntity);
|
|
1342
|
+
} catch {
|
|
1343
|
+
}
|
|
1344
|
+
this.drawHintEntity = null;
|
|
1345
|
+
}
|
|
1346
|
+
this.drawHintText = "", this.drawHintLastPosition = null;
|
|
1347
|
+
}
|
|
1241
1348
|
/**
|
|
1242
1349
|
* 开始绘制线条
|
|
1243
1350
|
*/
|
|
@@ -1268,7 +1375,7 @@ class D {
|
|
|
1268
1375
|
*/
|
|
1269
1376
|
startDrawing(e, t) {
|
|
1270
1377
|
const i = D.activeDrawingHelper;
|
|
1271
|
-
switch (i && i !== this && i.cancelDrawing(), this.endDrawingInternal(!1), this.drawMode = e, this.isDrawing = !0, this.lastPreviewPosition = null, D.activeDrawingHelper = this, this.tempPositions = [], this.tempEntities = [], this._doubleClickPending = !1, e) {
|
|
1378
|
+
switch (i && i !== this && i.cancelDrawing(), this.endDrawingInternal(!1), this.clearDrawHint(), this.drawMode = e, this.isDrawing = !0, this.lastPreviewPosition = null, D.activeDrawingHelper = this, this.tempPositions = [], this.tempEntities = [], this._doubleClickPending = !1, e) {
|
|
1272
1379
|
case "line":
|
|
1273
1380
|
this.currentDrawer = this.drawLine;
|
|
1274
1381
|
break;
|
|
@@ -1282,7 +1389,7 @@ class D {
|
|
|
1282
1389
|
this.currentDrawer = this.drawCircle;
|
|
1283
1390
|
break;
|
|
1284
1391
|
}
|
|
1285
|
-
this.currentDrawer && this.currentDrawer.startDrawing(t), this.activateDrawingHandlers();
|
|
1392
|
+
this.currentDrawer && this.currentDrawer.startDrawing(t), this.refreshDrawHintTextOnly(), this.activateDrawingHandlers();
|
|
1286
1393
|
}
|
|
1287
1394
|
/**
|
|
1288
1395
|
* 激活屏幕空间事件处理器
|
|
@@ -1298,16 +1405,16 @@ class D {
|
|
|
1298
1405
|
return;
|
|
1299
1406
|
}
|
|
1300
1407
|
const i = this.pickGlobePosition(t.position);
|
|
1301
|
-
i && this.addPoint(i);
|
|
1408
|
+
i && (this.updateDrawHintPosition(i), this.addPoint(i));
|
|
1302
1409
|
},
|
|
1303
1410
|
n.ScreenSpaceEventType.LEFT_CLICK
|
|
1304
1411
|
), this.screenSpaceEventHandler.setInputAction(() => {
|
|
1305
1412
|
!this.isDrawing || this.tempPositions.length === 0 || this.removeLastPoint();
|
|
1306
1413
|
}, n.ScreenSpaceEventType.RIGHT_CLICK), this.screenSpaceEventHandler.setInputAction(
|
|
1307
1414
|
(t) => {
|
|
1308
|
-
if (!this.isDrawing
|
|
1415
|
+
if (!this.isDrawing) return;
|
|
1309
1416
|
const i = this.pickGlobePosition(t.endPosition);
|
|
1310
|
-
i && this.updatePreview(i);
|
|
1417
|
+
i && (this.updateDrawHintPosition(i), this.tempPositions.length > 0 && this.updatePreview(i));
|
|
1311
1418
|
},
|
|
1312
1419
|
n.ScreenSpaceEventType.MOUSE_MOVE
|
|
1313
1420
|
);
|
|
@@ -1337,24 +1444,31 @@ class D {
|
|
|
1337
1444
|
* @returns 世界坐标 Cartesian3 或 null
|
|
1338
1445
|
*/
|
|
1339
1446
|
pickGlobePosition(e) {
|
|
1340
|
-
const t =
|
|
1341
|
-
if (t
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1447
|
+
const t = e;
|
|
1448
|
+
if (!t || !Number.isFinite(t.x) || !Number.isFinite(t.y))
|
|
1449
|
+
return null;
|
|
1450
|
+
try {
|
|
1451
|
+
const i = this.viewer.camera.getPickRay(e);
|
|
1452
|
+
if (i && this.scene.mode === n.SceneMode.SCENE3D && this.scene.globe.tilesLoaded) {
|
|
1453
|
+
const o = this.scene.globe.pick(i, this.scene);
|
|
1454
|
+
if (n.defined(o) && Number.isFinite(o.x) && Number.isFinite(o.y) && Number.isFinite(o.z))
|
|
1455
|
+
return o.clone();
|
|
1456
|
+
}
|
|
1457
|
+
const r = this.viewer.camera.pickEllipsoid(
|
|
1458
|
+
e,
|
|
1459
|
+
this.scene.globe.ellipsoid
|
|
1460
|
+
);
|
|
1461
|
+
return r && Number.isFinite(r.x) && Number.isFinite(r.y) && Number.isFinite(r.z) ? r.clone() : null;
|
|
1462
|
+
} catch {
|
|
1463
|
+
return null;
|
|
1345
1464
|
}
|
|
1346
|
-
const i = this.viewer.camera.pickEllipsoid(
|
|
1347
|
-
e,
|
|
1348
|
-
this.scene.globe.ellipsoid
|
|
1349
|
-
);
|
|
1350
|
-
return i && Number.isFinite(i.x) && Number.isFinite(i.y) && Number.isFinite(i.z) ? i : null;
|
|
1351
1465
|
}
|
|
1352
1466
|
/**
|
|
1353
1467
|
* 添加一个点到临时位置数组并创建点实体
|
|
1354
1468
|
* @param position 世界坐标
|
|
1355
1469
|
*/
|
|
1356
1470
|
addPoint(e) {
|
|
1357
|
-
this.drawMode === "polygon" && this.scene.mode === n.SceneMode.SCENE3D && !this.scene.globe.tilesLoaded || this.currentDrawer && (this.currentDrawer.addPointForHelper(e), this.tempPositions = this.currentDrawer.getTempPositions(), this.tempEntities = this.currentDrawer.getTempEntities(), this.updateDrawingEntity());
|
|
1471
|
+
this.drawMode === "polygon" && this.scene.mode === n.SceneMode.SCENE3D && !this.scene.globe.tilesLoaded || this.currentDrawer && (this.currentDrawer.addPointForHelper(e), this.tempPositions = this.currentDrawer.getTempPositions(), this.tempEntities = this.currentDrawer.getTempEntities(), this.updateDrawingEntity(), this.refreshDrawHintTextOnly());
|
|
1358
1472
|
}
|
|
1359
1473
|
/**
|
|
1360
1474
|
* 删除最后一个添加的点及其相关的临时实体
|
|
@@ -1363,7 +1477,7 @@ class D {
|
|
|
1363
1477
|
if (!this.currentDrawer)
|
|
1364
1478
|
return;
|
|
1365
1479
|
const e = this.currentDrawer.getTempPositions();
|
|
1366
|
-
!e || e.length === 0 || (this.currentDrawer.removeLastPointAndRedraw(), this.tempPositions = this.currentDrawer.getTempPositions(), this.tempEntities = this.currentDrawer.getTempEntities(), this.tempLabelEntities = this.currentDrawer.getTempLabelEntities(), this.lastPreviewPosition && this.isDrawing && this.updateDrawingEntity(this.lastPreviewPosition));
|
|
1480
|
+
!e || e.length === 0 || (this.currentDrawer.removeLastPointAndRedraw(), this.tempPositions = this.currentDrawer.getTempPositions(), this.tempEntities = this.currentDrawer.getTempEntities(), this.tempLabelEntities = this.currentDrawer.getTempLabelEntities(), this.lastPreviewPosition && this.isDrawing && this.updateDrawingEntity(this.lastPreviewPosition), this.refreshDrawHintTextOnly());
|
|
1367
1481
|
}
|
|
1368
1482
|
/**
|
|
1369
1483
|
* 更新预览线/面
|
|
@@ -1398,7 +1512,7 @@ class D {
|
|
|
1398
1512
|
}
|
|
1399
1513
|
e && e.entity && this.finishedEntities.push(e.entity), this.tempPositions = this.currentDrawer.getTempPositions(), this.tempEntities = this.currentDrawer.getTempEntities(), this.tempLabelEntities = this.currentDrawer.getTempLabelEntities(), this.finishedPointEntities = this.currentDrawer.getFinishedPointEntities(), this.tempLabelEntities.forEach((t) => {
|
|
1400
1514
|
this.finishedLabelEntities.push(t);
|
|
1401
|
-
}), this.tempLabelEntities = [], this.drawMode = null, this.isDrawing = !1, this.lastPreviewPosition = null, this.currentDrawer = null, this.deactivateDrawingHandlers(), D.activeDrawingHelper === this && (D.activeDrawingHelper = null);
|
|
1515
|
+
}), this.tempLabelEntities = [], this.drawMode = null, this.isDrawing = !1, this.lastPreviewPosition = null, this.currentDrawer = null, this.deactivateDrawingHandlers(), this.clearDrawHint(), D.activeDrawingHelper === this && (D.activeDrawingHelper = null);
|
|
1402
1516
|
}
|
|
1403
1517
|
/**
|
|
1404
1518
|
* 内部方法:重置绘图状态和清理临时数据
|
|
@@ -1406,7 +1520,7 @@ class D {
|
|
|
1406
1520
|
*/
|
|
1407
1521
|
endDrawingInternal(e) {
|
|
1408
1522
|
if (this.currentDrawer && (this.currentDrawer.clearTempEntitiesForHelper(), this.tempPositions = this.currentDrawer.getTempPositions(), this.tempEntities = this.currentDrawer.getTempEntities(), this.tempLabelEntities = this.currentDrawer.getTempLabelEntities()), this.tempEntities = [], this.tempLabelEntities = [], this.tempPositions = [], e) {
|
|
1409
|
-
this.drawMode = null, this.isDrawing = !1, this.lastPreviewPosition = null, this.currentDrawer = null, this.deactivateDrawingHandlers(), this.originalDepthTestAgainstTerrain !== null && (this.scene.globe.depthTestAgainstTerrain = this.originalDepthTestAgainstTerrain, this.originalDepthTestAgainstTerrain = null);
|
|
1523
|
+
this.drawMode = null, this.isDrawing = !1, this.lastPreviewPosition = null, this.currentDrawer = null, this.deactivateDrawingHandlers(), this.clearDrawHint(), this.originalDepthTestAgainstTerrain !== null && (this.scene.globe.depthTestAgainstTerrain = this.originalDepthTestAgainstTerrain, this.originalDepthTestAgainstTerrain = null);
|
|
1410
1524
|
try {
|
|
1411
1525
|
this.currentDrawer && this.currentDrawer.restoreRequestRenderModeIfNeeded && this.currentDrawer.restoreRequestRenderModeIfNeeded();
|
|
1412
1526
|
} catch {
|
|
@@ -2366,12 +2480,12 @@ class le {
|
|
|
2366
2480
|
}
|
|
2367
2481
|
}
|
|
2368
2482
|
}
|
|
2369
|
-
const
|
|
2483
|
+
const z = {
|
|
2370
2484
|
basePath: "/geojson",
|
|
2371
2485
|
silent: !1
|
|
2372
2486
|
};
|
|
2373
2487
|
async function ce(c = {}) {
|
|
2374
|
-
const { basePath: e } = { ...
|
|
2488
|
+
const { basePath: e } = { ...z, ...c };
|
|
2375
2489
|
try {
|
|
2376
2490
|
const t = await fetch(`${e}/file-list.json`);
|
|
2377
2491
|
if (t.ok) {
|
|
@@ -2384,7 +2498,7 @@ async function ce(c = {}) {
|
|
|
2384
2498
|
return [];
|
|
2385
2499
|
}
|
|
2386
2500
|
async function he(c, e = {}) {
|
|
2387
|
-
const { basePath: t, silent: i } = { ...
|
|
2501
|
+
const { basePath: t, silent: i } = { ...z, ...e };
|
|
2388
2502
|
try {
|
|
2389
2503
|
const r = `${t}/${c}.geojson`, o = await fetch(r);
|
|
2390
2504
|
if (!o.ok)
|
|
@@ -2396,7 +2510,7 @@ async function he(c, e = {}) {
|
|
|
2396
2510
|
}
|
|
2397
2511
|
}
|
|
2398
2512
|
async function de(c, e = {}) {
|
|
2399
|
-
const { silent: t } = { ...
|
|
2513
|
+
const { silent: t } = { ...z, ...e };
|
|
2400
2514
|
let i = c;
|
|
2401
2515
|
if ((!i || i.length === 0) && (i = await ce(e)), !i || i.length === 0)
|
|
2402
2516
|
return t || (console.warn("未提供 GeoJSON 文件列表,无法加载数据"), console.warn("请使用 loadAllAirportNoFlyZones(fileList) 提供文件列表,"), console.warn("或在 public/geojson 目录下创建 file-list.json 文件")), [];
|
|
@@ -2977,14 +3091,14 @@ class be {
|
|
|
2977
3091
|
if (this.measurementCallback?.onDistanceComplete)
|
|
2978
3092
|
this.measurementCallback.onDistanceComplete(t, i);
|
|
2979
3093
|
else {
|
|
2980
|
-
const r =
|
|
3094
|
+
const r = j(i);
|
|
2981
3095
|
console.log(`测距完成,总距离: ${r}`);
|
|
2982
3096
|
}
|
|
2983
3097
|
}
|
|
2984
3098
|
} else if (e.polygon) {
|
|
2985
3099
|
const t = e.polygon.hierarchy?.getValue(n.JulianDate.now());
|
|
2986
3100
|
if (t && this.measurementCallback?.onAreaComplete) {
|
|
2987
|
-
const i =
|
|
3101
|
+
const i = H(t.positions, this.viewer.scene.globe.ellipsoid);
|
|
2988
3102
|
this.measurementCallback.onAreaComplete(t.positions, i);
|
|
2989
3103
|
}
|
|
2990
3104
|
}
|
|
@@ -3755,12 +3869,12 @@ class De {
|
|
|
3755
3869
|
return t ? (t._onClick = void 0, this.entities.remove(t)) : !1;
|
|
3756
3870
|
}
|
|
3757
3871
|
}
|
|
3758
|
-
const
|
|
3759
|
-
class
|
|
3872
|
+
const Pe = 1e3, T = "_infoWindowData";
|
|
3873
|
+
class Me {
|
|
3760
3874
|
viewer;
|
|
3761
3875
|
container;
|
|
3762
3876
|
entityMap = /* @__PURE__ */ new Map();
|
|
3763
|
-
currentTopZIndex =
|
|
3877
|
+
currentTopZIndex = Pe;
|
|
3764
3878
|
defaultUpdateInterval = 0;
|
|
3765
3879
|
// ms, 默认 0 = 每帧更新
|
|
3766
3880
|
isCameraMoving = !1;
|
|
@@ -3860,8 +3974,8 @@ class Pe {
|
|
|
3860
3974
|
if (typeof r.anchorPixel == "number" && y)
|
|
3861
3975
|
a = y.x, l = y.y - r.anchorPixel;
|
|
3862
3976
|
else {
|
|
3863
|
-
const x = n.Cartographic.fromCartesian(o), G = n.Math.toDegrees(x.longitude), A = n.Math.toDegrees(x.latitude), Y = n.Cartesian3.fromDegrees(G, A, x.height + h), E = this.getContainerPixelPosition(Y),
|
|
3864
|
-
E &&
|
|
3977
|
+
const x = n.Cartographic.fromCartesian(o), G = n.Math.toDegrees(x.longitude), A = n.Math.toDegrees(x.latitude), Y = n.Cartesian3.fromDegrees(G, A, x.height + h), E = this.getContainerPixelPosition(Y), P = this.getContainerPixelPosition(o);
|
|
3978
|
+
E && P ? (a = E.x, l = E.y) : P && (a = P.x, l = P.y);
|
|
3865
3979
|
}
|
|
3866
3980
|
} catch {
|
|
3867
3981
|
}
|
|
@@ -3973,8 +4087,8 @@ class Pe {
|
|
|
3973
4087
|
})()), i.style.left = `${a}px`, i.style.top = `${l}px`, i.style.transform = C, i.style.display = "block", t.arrowEl && r.showArrow) {
|
|
3974
4088
|
const y = t.arrowEl, x = (r.arrowSize ?? 8) + "px", G = i.style.background || r.backgroundColor || "#ffffff";
|
|
3975
4089
|
y.style.borderLeft = "0", y.style.borderRight = "0", y.style.borderTop = "0", y.style.borderBottom = "0", y.style.left = "", y.style.right = "", y.style.top = "", y.style.bottom = "", y.style.transform = "";
|
|
3976
|
-
const A = (O) => O.startsWith("top") ? "top" : O.startsWith("bottom") ? "bottom" : O.startsWith("left") ? "left" : O.startsWith("right") ? "right" : "top", Y = (O) => O.includes("left") ? 25 : O.includes("right") ? 75 : 50, E = A(b),
|
|
3977
|
-
E === "top" ? (y.style.left = `${
|
|
4090
|
+
const A = (O) => O.startsWith("top") ? "top" : O.startsWith("bottom") ? "bottom" : O.startsWith("left") ? "left" : O.startsWith("right") ? "right" : "top", Y = (O) => O.includes("left") ? 25 : O.includes("right") ? 75 : 50, E = A(b), P = Y(b);
|
|
4091
|
+
E === "top" ? (y.style.left = `${P}%`, y.style.bottom = `-${x}`, y.style.transform = "translateX(-50%)", y.style.borderLeft = `${x} solid transparent`, y.style.borderRight = `${x} solid transparent`, y.style.borderTop = `${x} solid ${G}`) : E === "bottom" ? (y.style.left = `${P}%`, y.style.top = `-${x}`, y.style.transform = "translateX(-50%)", y.style.borderLeft = `${x} solid transparent`, y.style.borderRight = `${x} solid transparent`, y.style.borderBottom = `${x} solid ${G}`) : E === "left" ? (y.style.right = `-${x}`, y.style.top = `${P}%`, y.style.transform = "translateY(-50%)", y.style.borderTop = `${x} solid transparent`, y.style.borderBottom = `${x} solid transparent`, y.style.borderLeft = `${x} solid ${G}`) : (y.style.left = `-${x}`, y.style.top = `${P}%`, y.style.transform = "translateY(-50%)", y.style.borderTop = `${x} solid transparent`, y.style.borderBottom = `${x} solid transparent`, y.style.borderRight = `${x} solid ${G}`);
|
|
3978
4092
|
}
|
|
3979
4093
|
}
|
|
3980
4094
|
/**
|
|
@@ -4906,7 +5020,7 @@ class Ae {
|
|
|
4906
5020
|
circle;
|
|
4907
5021
|
ring;
|
|
4908
5022
|
constructor(e) {
|
|
4909
|
-
this.viewer = e, this.entities = e.entities, this.initInfoWindowContainer(), this.setupEntityClickHandler(), this.marker = new xe(e), this.label = new ve(e), this.icon = new Ge(e), this.svg = new De(e), this.infoWindow = new
|
|
5023
|
+
this.viewer = e, this.entities = e.entities, this.initInfoWindowContainer(), this.setupEntityClickHandler(), this.marker = new xe(e), this.label = new ve(e), this.icon = new Ge(e), this.svg = new De(e), this.infoWindow = new Me(e, this.infoWindowContainer), this.polyline = new Ne(e), this.polygon = new Te(e), this.rectangle = new Ee(e), this.circle = new Oe(e), this.ring = new Le(e);
|
|
4910
5024
|
}
|
|
4911
5025
|
/**
|
|
4912
5026
|
* 初始化信息窗口容器
|
|
@@ -5071,7 +5185,7 @@ class Ae {
|
|
|
5071
5185
|
this.removeAllOverlays(), this.infoWindowContainer && this.infoWindowContainer.parentNode && this.infoWindowContainer.parentNode.removeChild(this.infoWindowContainer), this.overlayMap.clear();
|
|
5072
5186
|
}
|
|
5073
5187
|
}
|
|
5074
|
-
class
|
|
5188
|
+
class Ie {
|
|
5075
5189
|
viewer;
|
|
5076
5190
|
imageryLayer = null;
|
|
5077
5191
|
rectangle = null;
|
|
@@ -5431,7 +5545,7 @@ class je {
|
|
|
5431
5545
|
this.imageryLayer = this.viewer.imageryLayers.addImageryProvider(i), this.imageryLayer.alpha = this.options.opacity, this.imageryLayer.show = !0;
|
|
5432
5546
|
}
|
|
5433
5547
|
}
|
|
5434
|
-
const
|
|
5548
|
+
const je = {
|
|
5435
5549
|
CesiumMapToolbar: be,
|
|
5436
5550
|
DrawHelper: D,
|
|
5437
5551
|
CesiumOverlayService: Ae,
|
|
@@ -5448,10 +5562,10 @@ export {
|
|
|
5448
5562
|
V as DrawLine,
|
|
5449
5563
|
K as DrawPolygon,
|
|
5450
5564
|
_ as DrawRectangle,
|
|
5451
|
-
|
|
5565
|
+
Ie as HeatmapLayer,
|
|
5452
5566
|
Oe as MapCircle,
|
|
5453
5567
|
Ge as MapIcon,
|
|
5454
|
-
|
|
5568
|
+
Me as MapInfoWindow,
|
|
5455
5569
|
ve as MapLabel,
|
|
5456
5570
|
le as MapLayersService,
|
|
5457
5571
|
xe as MapMarker,
|
|
@@ -5462,10 +5576,10 @@ export {
|
|
|
5462
5576
|
De as MapSVG,
|
|
5463
5577
|
ue as NotFlyZonesService,
|
|
5464
5578
|
ae as SearchService,
|
|
5465
|
-
|
|
5579
|
+
je as default,
|
|
5466
5580
|
N as defaultButtonSorts,
|
|
5467
5581
|
we as defaultButtons,
|
|
5468
5582
|
S as initCesium,
|
|
5469
|
-
|
|
5583
|
+
I as toggleSelectedStyle
|
|
5470
5584
|
};
|
|
5471
5585
|
//# sourceMappingURL=index.es.js.map
|