huweili-cesium 1.1.21 → 1.2.1

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/README.md CHANGED
@@ -172,10 +172,10 @@ npm run sync
172
172
  | `public/config/constants.js` | `window.MapInstanceIds` 定义多地图 ID(如 `HOME: 'home-main-map'`) | `:map-id` 须与之一致,工具栏回调里的 `mapId` 也要传同一个值 |
173
173
  | `public/config/mapConfig.js` | `window.MapConfig`(中心点、2D/3D、底图列表、是否显示 Cesium 自带控件等) | 控制地图初始化;`control.homeButton: false` 时由自定义工具栏替代 |
174
174
 
175
- 在页面中引用常量(推荐):
175
+ 在页面中引用常量(从 `runtimeConfig` 导入):
176
176
 
177
177
  ```js
178
- import { MapInstanceIds } from '@/main'
178
+ import { MapInstanceIds } from '@/config/runtimeConfig'
179
179
 
180
180
  const HOME_MAP_ID = MapInstanceIds?.HOME || 'home-main-map'
181
181
  ```
@@ -195,7 +195,7 @@ const HOME_MAP_ID = MapInstanceIds?.HOME || 'home-main-map'
195
195
 
196
196
  <script setup>
197
197
  import CesiumMap from 'huweili-cesium'
198
- import { MapInstanceIds } from '@/main'
198
+ import { MapInstanceIds } from '@/config/runtimeConfig'
199
199
  import { getHomeToolbarButtons } from '@/utils/homeToolbarButtons'
200
200
 
201
201
  const HOME_MAP_ID = MapInstanceIds?.HOME || 'home-main-map'
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "huweili-cesium",
3
- "version": "1.1.21",
3
+ "version": "1.2.1",
4
4
  "description": "基于 Cesium 的地图工具库(无人机态势、轨迹、围栏、工具栏等)",
5
5
  "type": "module",
6
6
  "main": "./index.js",