目录
basic
代码
tips
- cesium 鼠标左键旋转右键平移
let controller = viewer.scene.screenSpaceCameraController;
controller.tiltEventTypes = [Cesium.CameraEventType.RIGHT_DRAG];
controller.rotateEventTypes = [Cesium.CameraEventType.LEFT_DRAG];
google earth demo
components
实时跟踪
当前位置定位:刷新页面,查看当前位置
代码
历史轨迹
第一版:实现人员跟踪
漫思
vite-plugin-cesium的原理
vite-plugin-cesium
vite-plugin-cesium
是一个用于简化在 Vite 项目中集成 CesiumJS 的插件。它的核心原理是通过自动化配置和资源处理,解决 CesiumJS 在 Vite 中常见的静态资源加载、路径配置、模块兼容性等问题。以下是其工作原理的详细分析:
1. 自动依赖管理与路径别名
- Cesium 安装:插件会自动安装
cesium
npm 包,或确保用户已正确安装。 - 别名配置:在 Vite 配置中设置路径别名,将
cesium
指向node_modules/cesium
,简化模块导入:// vite.config.js export default { resolve: { alias: { cesium: path.resolve(__dirname, "node_modules/cesium"), }, }, };
2. 静态资源处理
CesiumJS 依赖大量静态资源(如 WebAssembly、图片、CSS 等),这些资源需要被正确加载。
- 资源复制:插件在开发阶段将
node_modules/cesium/Build/Cesium
下的静态资源复制到 Vite 项目的public
目录(或指定路径),确保开发服务器能访问它们。 - 生产构建处理:在构建阶段,资源会被打包到输出目录(如
dist
),并通过CESIUM_BASE_URL
配置基础路径。
3. Web Workers 与 WASM 配置
CesiumJS 使用 Web Workers 和 WebAssembly 提升性能,但浏览器安全策略要求这些文件必须通过正确的 MIME 类型和路径加载。
- Worker 文件处理:通过
vite
的worker
插件配置,将.js
文件标记为 Web Workers,确保其被正确隔离和加载。 - WASM 配置:配置
.wasm
文件作为异步模块加载,并设置正确的 MIME 类型(如application/wasm
)。
4. 环境变量注入
- CESIUM_BASE_URL:插件自动设置环境变量
CESIUM_BASE_URL
,指向静态资源的基础路径(如开发环境的/public
或生产环境的相对路径)。CesiumJS 通过此变量加载资源:window.CESIUM_BASE_URL = "/";
5. Vite 构建配置调整
- 资源包含规则:扩展
assetsInclude
配置,让 Vite 识别 Cesium 相关文件(如.glb
,.czml
等)。 - CommonJS 转换:CesiumJS 使用 CommonJS 模块,插件通过
@rollup/plugin-commonjs
将其转换为 ESM,确保与 Vite 的 ESM 环境兼容。 - 依赖优化:在
optimizeDeps
中排除 Cesium,避免 Vite 预构建时处理其复杂依赖。
6. 开发服务器中间件配置
- CORS 头设置:为开发服务器添加中间件,设置
Cross-Origin-Opener-Policy
和Cross-Origin-Embedder-Policy
头,解决 Web Worker 的跨域限制。 - 静态资源代理:确保对 Cesium 资源的请求被正确代理到本地文件或 CDN。
7. 生产优化
- 代码拆分:配置 Rollup 避免拆分关键 Cesium 模块,保持运行时完整性。
- 资源压缩:启用
build.minify
压缩代码,同时确保 WASM 等二进制文件不被破坏。
总结
vite-plugin-cesium
通过以下方式简化开发:
- 自动化配置:隐藏复杂的路径、资源处理和模块转换逻辑。
- 环境适配:统一开发和生产环境下的静态资源加载行为。
- 兼容性处理:解决 CJS/ESM 模块差异和浏览器安全策略问题。
开发者只需安装插件并导入 Cesium,无需手动处理上述细节,即可快速启动 3D 地理可视化项目。
cesium maximumScreenSpaceError
A tile’s screen space error is roughly equivalent to the number of pixels wide that would be drawn if a sphere with a radius equal to the tile’s geometric error were rendered at the tile’s position. If this value exceeds maximumScreenSpaceError the tile refines to its descendants.
瓦片的屏幕空间误差大致相当于如果以与瓦片几何误差相等的半径绘制一个球体,并在瓦片位置渲染时,该球体所绘制的像素宽度。如果此值超过 maximumScreenSpaceError ,则瓦片将细化到其子代。
Depending on the tileset, maximumScreenSpaceError may need to be tweaked to achieve the right balance. Higher values provide better performance but lower visual quality.
根据瓦片集的不同,可能需要调整 maximumScreenSpaceError 以实现正确的平衡。更高的值提供更好的性能,但视觉质量较低。
cesium 用帧缓存实现了什么
渲染不生效问题
为啥有时候在cesium地图上触发某些接口不会立马生效,例如上面的map.removeGraphic(graphic); 需要拖动地图或者放大缩小等操作才会看到生效
map.viewer.scene.requestRender(); // 手动触发渲染