基于 Vue3、Typescrip、Cesium 的组件库。
基于 pnpm workspace、vite、glup、rollup 脚手架,依赖 Vue3、Cesium 开发的 CBB 公共库——vue3-use-cesium 有以下特点/功能:
关于 Cesium 版本兼容性,已在 1.105、1.119 版本进行验证。
yarn add vue3-use-cesium # npm i vue3-use-cesium --save
在 App.vue 中使用组件,示例如下:
<template>
<router-view></router-view>
<z-map-base />
</template>
<script setup lang="ts">
import { ZMapBase } from "vue3-use-cesium";
</script>
在 main.js 引入样式:
import "vue3-use-cesium/style";
import { initMap } from "vue3-use-cesium";
// 路由拦截
router.beforeEach(async (to, from, next) => {
// ...
// 如果页面包含地图则加载Cesium.js
if (to.meta.hasMap) {
await initMap([`/CesiumV1.105/Cesium.js`, `/CesiumV1.105/Widgets/widgets.css`], {
imagery: "gd-img"
});
}
// ...
next();
});
import { onBeforeUnmount, onMounted } from "vue";
import { setToTarget, setVisible, clearMapElements, clearMapEvents, getViewer } from "vue3-use-cesium";
/**
* 基础地图使用
* @param selector div的id / body
* @param mapCreated 成功回调(返回Viewer)
*/
export const useBaseMap = (selector: string, mapCreated?: (viewer: any) => void) => {
onMounted(() => {
setToTarget(selector);
setVisible(true);
if (mapCreated) {
mapCreated(getViewer());
}
});
onBeforeUnmount(() => {
clearMapElements();
clearMapEvents();
setVisible(false);
setToTarget("body");
});
};
<template>
<!-- 注意:HTML注释得去掉,可能是Vue传送组件的bug?? -->
<!-- 只有一个顶层div -->
<div class="bbox">
<!-- 地图容器不能是顶层div -->
<div id="my-map">
<!-- 地图弹窗... -->
</div>
<!-- 地图面板等... -->
</div>
</template>
<script setup lang="ts">
import { useBaseMap } from "@/hooks/useCesium";
// 地图初始化
useBaseMap("#my-map", viewer => {
console.log(viewer);
});
</script>
材质

| 材质名称 | 效果图 |
|---|---|
| 闪电立方体 | ![]() |
| 雷达波束 | ![]() |
| 发光圆 | ![]() |
| 光电球弧 | ![]() |
| 渐变墙 | ![]() |
| 雷达扫描圆 | ![]() |
测量
