huweili-cesium 1.1.21 → 1.2.0
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/index.vue +78 -53
- package/js/basis.js +54 -1
- package/package.json +1 -1
package/index.vue
CHANGED
|
@@ -18,59 +18,7 @@ import { applyImageryLayers, resolveOnlineBasemap } from './js/utils/mapImagery'
|
|
|
18
18
|
import { createCustomToolbarButtons } from './js/customToolbarButtons'
|
|
19
19
|
|
|
20
20
|
const { merge } = objectUtils()
|
|
21
|
-
const { mouseController } = basicConfig()
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 设置 Cesium 地图的初始相机视角
|
|
25
|
-
*
|
|
26
|
-
* 功能说明:
|
|
27
|
-
* - 根据传入的中心点坐标(经纬度)和视角参数(高度、航向、俯仰、翻滚)
|
|
28
|
-
* - 将相机移动到指定位置并设置朝向
|
|
29
|
-
* - 用于地图初始化时设置默认视角位置
|
|
30
|
-
*
|
|
31
|
-
* @param {Cesium.Viewer} viewer - Cesium 地图实例
|
|
32
|
-
* @param {Object} center - 中心点配置对象
|
|
33
|
-
* @param {number} center.lng - 中心点经度(度),默认 0
|
|
34
|
-
* @param {number} center.lat - 中心点纬度(度),默认 0
|
|
35
|
-
* @param {number} center.alt - 相机高度(米),默认 10000
|
|
36
|
-
* @param {number} center.heading - 航向角(度),0=正北,90=正东,默认 0
|
|
37
|
-
* @param {number} center.pitch - 俯仰角(度),-90=正下方,0=水平,默认 -90
|
|
38
|
-
* @param {number} center.roll - 翻滚角(度),默认 0
|
|
39
|
-
*
|
|
40
|
-
* 使用示例:
|
|
41
|
-
* setInitialCameraView(viewer, {
|
|
42
|
-
* lng: 116.4074, // 北京经度
|
|
43
|
-
* lat: 39.9042, // 北京纬度
|
|
44
|
-
* alt: 10000, // 高度 10km
|
|
45
|
-
* heading: 0, // 朝向正北
|
|
46
|
-
* pitch: -35, // 俯视 35 度
|
|
47
|
-
* roll: 0 // 不翻滚
|
|
48
|
-
* })
|
|
49
|
-
*/
|
|
50
|
-
function setInitialCameraView(viewer, center = {}) {
|
|
51
|
-
// 安全检查:确保 viewer 和 camera 对象存在
|
|
52
|
-
if (!viewer?.camera) return
|
|
53
|
-
|
|
54
|
-
// 从 center 对象中提取参数,使用默认值确保容错性
|
|
55
|
-
const lng = Number(center.lng) || 0 // 经度,默认 0°
|
|
56
|
-
const lat = Number(center.lat) || 0 // 纬度,默认 0°
|
|
57
|
-
const alt = Number(center.alt) || 10000 // 高度,默认 10000 米
|
|
58
|
-
const heading = Cesium.Math.toRadians(Number(center.heading) || 0) // 航向角 → 弧度
|
|
59
|
-
const pitch = Cesium.Math.toRadians(-90) // 俯仰角,固定 -90°(垂直俯视)
|
|
60
|
-
const roll = Cesium.Math.toRadians(Number(center.roll) || 0) // 翻滚角 → 弧度
|
|
61
|
-
|
|
62
|
-
// 设置相机视角
|
|
63
|
-
viewer.camera.setView({
|
|
64
|
-
// 相机目标位置:使用经纬度坐标和高度创建 Cartesian3 坐标
|
|
65
|
-
destination: Cesium.Cartesian3.fromDegrees(lng, lat, alt),
|
|
66
|
-
// 相机朝向:通过 heading、pitch、roll 三个角度定义
|
|
67
|
-
orientation: {
|
|
68
|
-
heading, // 航向角:绕垂直轴旋转(0=北,90=东,180=南,270=西)
|
|
69
|
-
pitch, // 俯仰角:绕水平轴旋转(-90=正下方,0=水平,90=正上方)
|
|
70
|
-
roll, // 翻滚角:绕相机朝向轴旋转
|
|
71
|
-
},
|
|
72
|
-
})
|
|
73
|
-
}
|
|
21
|
+
const { mouseController, setInitialCameraView } = basicConfig()
|
|
74
22
|
|
|
75
23
|
const {
|
|
76
24
|
addToolbarButton,
|
|
@@ -367,6 +315,19 @@ function startContinuousRendering(viewer) {
|
|
|
367
315
|
animate()
|
|
368
316
|
}
|
|
369
317
|
|
|
318
|
+
/**
|
|
319
|
+
* 停止持续渲染循环
|
|
320
|
+
*
|
|
321
|
+
* 功能说明:
|
|
322
|
+
* - 取消 requestAnimationFrame 创建的动画帧请求
|
|
323
|
+
* - 清空 animationId,防止重复取消
|
|
324
|
+
* - 用于页面失活、组件卸载或需要暂停渲染时释放资源
|
|
325
|
+
*
|
|
326
|
+
* 使用场景:
|
|
327
|
+
* - 页面被 keep-alive 缓存时(onDeactivated)
|
|
328
|
+
* - 组件卸载时(onUnmounted)
|
|
329
|
+
* - 手动暂停地图渲染以节省性能时
|
|
330
|
+
*/
|
|
370
331
|
function stopRenderLoop() {
|
|
371
332
|
if (animationId) {
|
|
372
333
|
cancelAnimationFrame(animationId)
|
|
@@ -384,6 +345,18 @@ function setupActivityListeners() {
|
|
|
384
345
|
})
|
|
385
346
|
}
|
|
386
347
|
|
|
348
|
+
/**
|
|
349
|
+
* 从缓存中恢复地图渲染(用于 keep-alive 场景)
|
|
350
|
+
*
|
|
351
|
+
* 功能说明:
|
|
352
|
+
* - 当页面被 keep-alive 缓存后再次激活时,恢复 Cesium 地图的渲染状态
|
|
353
|
+
* - 重新设置当前地图 ID、激活状态和最后活跃时间
|
|
354
|
+
* - 在下一个 tick 中调整地图大小、触发渲染并重启持续渲染循环
|
|
355
|
+
*
|
|
356
|
+
* 使用场景:
|
|
357
|
+
* - Vue 路由中使用 keep-alive 缓存包含地图的组件,切换回该页面时调用
|
|
358
|
+
* - 在 onActivated 生命周期钩子中触发
|
|
359
|
+
*/
|
|
387
360
|
function resumeMapAfterCache() {
|
|
388
361
|
if (!map || map.isDestroyed?.()) return
|
|
389
362
|
mapStore.setCurrentMapId(props.mapId)
|
|
@@ -397,12 +370,36 @@ function resumeMapAfterCache() {
|
|
|
397
370
|
})
|
|
398
371
|
}
|
|
399
372
|
|
|
373
|
+
/**
|
|
374
|
+
* 组件挂载钩子(首次加载时触发)
|
|
375
|
+
*
|
|
376
|
+
* 触发时机:
|
|
377
|
+
* - 组件首次挂载到 DOM 时
|
|
378
|
+
* - 无论是否使用 keep-alive,首次加载都会触发
|
|
379
|
+
*
|
|
380
|
+
* 功能说明:
|
|
381
|
+
* - 设置当前地图 ID
|
|
382
|
+
* - 监听用户活动事件
|
|
383
|
+
* - 初始化 Cesium 地图
|
|
384
|
+
*/
|
|
400
385
|
onMounted(() => {
|
|
401
386
|
mapStore.setCurrentMapId(props.mapId)
|
|
402
387
|
setupActivityListeners()
|
|
403
388
|
initCesium()
|
|
404
389
|
})
|
|
405
390
|
|
|
391
|
+
/**
|
|
392
|
+
* keep-alive 组件激活钩子(从缓存中恢复时触发)
|
|
393
|
+
*
|
|
394
|
+
* 触发时机:
|
|
395
|
+
* - 当前组件被 keep-alive 包裹,用户导航回到该页面时
|
|
396
|
+
* - 组件从缓存状态恢复到活动状态
|
|
397
|
+
*
|
|
398
|
+
* 功能说明:
|
|
399
|
+
* - 重新设置当前地图 ID
|
|
400
|
+
* - 如果地图已销毁,重新初始化地图
|
|
401
|
+
* - 如果地图还在缓存中,恢复地图渲染
|
|
402
|
+
*/
|
|
406
403
|
onActivated(() => {
|
|
407
404
|
mapStore.setCurrentMapId(props.mapId)
|
|
408
405
|
if (!map || map.isDestroyed?.()) {
|
|
@@ -413,11 +410,39 @@ onActivated(() => {
|
|
|
413
410
|
resumeMapAfterCache()
|
|
414
411
|
})
|
|
415
412
|
|
|
413
|
+
/**
|
|
414
|
+
* keep-alive 组件失活钩子(页面被缓存时触发)
|
|
415
|
+
*
|
|
416
|
+
* 触发时机:
|
|
417
|
+
* - 当前组件被 keep-alive 包裹,用户导航离开该页面时
|
|
418
|
+
* - 组件进入缓存状态,但不会被销毁
|
|
419
|
+
*
|
|
420
|
+
* 功能说明:
|
|
421
|
+
* - 标记地图为非活跃状态
|
|
422
|
+
* - 停止持续渲染循环,节省 CPU 资源
|
|
423
|
+
*
|
|
424
|
+
* 与 onUnmounted 的区别:
|
|
425
|
+
* - onDeactivated:组件被缓存,可通过 onActivated 恢复
|
|
426
|
+
* - onUnmounted:组件被销毁,需要完全清理资源
|
|
427
|
+
*/
|
|
416
428
|
onDeactivated(() => {
|
|
417
429
|
isMapActive = false
|
|
418
430
|
stopRenderLoop()
|
|
419
431
|
})
|
|
420
432
|
|
|
433
|
+
/**
|
|
434
|
+
* 组件卸载钩子(完全销毁时触发)
|
|
435
|
+
*
|
|
436
|
+
* 触发时机:
|
|
437
|
+
* - 组件被完全移除时
|
|
438
|
+
* - 路由切换且未使用 keep-alive 缓存时
|
|
439
|
+
*
|
|
440
|
+
* 功能说明:
|
|
441
|
+
* - 停止渲染循环
|
|
442
|
+
* - 移除自定义工具栏按钮
|
|
443
|
+
* - 销毁 Cesium Viewer 实例释放内存
|
|
444
|
+
* - 从 store 中移除地图实例
|
|
445
|
+
*/
|
|
421
446
|
onUnmounted(() => {
|
|
422
447
|
isMapActive = false
|
|
423
448
|
stopRenderLoop()
|
package/js/basis.js
CHANGED
|
@@ -44,6 +44,58 @@ export function basicConfig() {
|
|
|
44
44
|
map.clock.shouldAnimate = true
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* 设置 Cesium 地图的初始相机视角
|
|
49
|
+
*
|
|
50
|
+
* 功能说明:
|
|
51
|
+
* - 根据传入的中心点坐标(经纬度)和视角参数(高度、航向、俯仰、翻滚)
|
|
52
|
+
* - 将相机移动到指定位置并设置朝向
|
|
53
|
+
* - 用于地图初始化时设置默认视角位置
|
|
54
|
+
*
|
|
55
|
+
* @param {Cesium.Viewer} viewer - Cesium 地图实例
|
|
56
|
+
* @param {Object} center - 中心点配置对象
|
|
57
|
+
* @param {number} center.lng - 中心点经度(度),默认 0
|
|
58
|
+
* @param {number} center.lat - 中心点纬度(度),默认 0
|
|
59
|
+
* @param {number} center.alt - 相机高度(米),默认 10000
|
|
60
|
+
* @param {number} center.heading - 航向角(度),0=正北,90=正东,默认 0
|
|
61
|
+
* @param {number} center.pitch - 俯仰角(度),-90=正下方,0=水平,默认 -90
|
|
62
|
+
* @param {number} center.roll - 翻滚角(度),默认 0
|
|
63
|
+
*
|
|
64
|
+
* 使用示例:
|
|
65
|
+
* setInitialCameraView(viewer, {
|
|
66
|
+
* lng: 116.4074, // 北京经度
|
|
67
|
+
* lat: 39.9042, // 北京纬度
|
|
68
|
+
* alt: 10000, // 高度 10km
|
|
69
|
+
* heading: 0, // 朝向正北
|
|
70
|
+
* pitch: -35, // 俯视 35 度
|
|
71
|
+
* roll: 0 // 不翻滚
|
|
72
|
+
* })
|
|
73
|
+
*/
|
|
74
|
+
const setInitialCameraView = (viewer, center = {}) => {
|
|
75
|
+
// 安全检查:确保 viewer 和 camera 对象存在
|
|
76
|
+
if (!viewer?.camera) return
|
|
77
|
+
|
|
78
|
+
// 从 center 对象中提取参数,使用默认值确保容错性
|
|
79
|
+
const lng = Number(center.lng) || 0 // 经度,默认 0°
|
|
80
|
+
const lat = Number(center.lat) || 0 // 纬度,默认 0°
|
|
81
|
+
const alt = Number(center.alt) || 10000 // 高度,默认 10000 米
|
|
82
|
+
const heading = Cesium.Math.toRadians(Number(center.heading) || 0) // 航向角 → 弧度
|
|
83
|
+
const pitch = Cesium.Math.toRadians(-90) // 俯仰角,固定 -90°(垂直俯视)
|
|
84
|
+
const roll = Cesium.Math.toRadians(Number(center.roll) || 0) // 翻滚角 → 弧度
|
|
85
|
+
|
|
86
|
+
// 设置相机视角
|
|
87
|
+
viewer.camera.setView({
|
|
88
|
+
// 相机目标位置:使用经纬度坐标和高度创建 Cartesian3 坐标
|
|
89
|
+
destination: Cesium.Cartesian3.fromDegrees(lng, lat, alt),
|
|
90
|
+
// 相机朝向:通过 heading、pitch、roll 三个角度定义
|
|
91
|
+
orientation: {
|
|
92
|
+
heading, // 航向角:绕垂直轴旋转(0=北,90=东,180=南,270=西)
|
|
93
|
+
pitch, // 俯仰角:绕水平轴旋转(-90=正下方,0=水平,90=正上方)
|
|
94
|
+
roll, // 翻滚角:绕相机朝向轴旋转
|
|
95
|
+
},
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
|
|
47
99
|
/**
|
|
48
100
|
* 鼠标事件控制器
|
|
49
101
|
*
|
|
@@ -617,6 +669,7 @@ export function basicConfig() {
|
|
|
617
669
|
set2DView,
|
|
618
670
|
set3DView,
|
|
619
671
|
applyOrthographicFrustum,
|
|
620
|
-
restorePerspectiveFrustum
|
|
672
|
+
restorePerspectiveFrustum,
|
|
673
|
+
setInitialCameraView
|
|
621
674
|
}
|
|
622
675
|
}
|