📌预览
📌代码
<template> <div id="root-container" ref="rootContainer" class="root-container"> <div class="left-top-plugin"> <el-button type="primary" plain @click="start" :disabled="started">开始 </el-button> <el-button type="primary" plain @click="drawRectEdit" :disabled="!started || edited">进入编辑模式</el-button> <el-button type="danger" plain @click="drawRectRemove" :disabled="!started">删除全部</el-button> </div> </div></template>import { onMounted, onUnmounted, ref, } from "vue";import { PocketViewer } from '@/util/PocketViewer'import { Viewer } from 'cesium';import { RectGaguger, type RectGaugerOptions, } from "cesium-pocket/gauger";import { ElButton, ElMessageBox } from 'element-plus'
const rootContainer: any = ref(null);const viewer = ref<Viewer | null>(null)const status = ref(null)const started = ref(false)const edited = ref(false)const deleted = ref(false)let rectGauger: any = null
onMounted(() => { let mfCesium = new PocketViewer(rootContainer.value, {}) viewer.value = mfCesium.getViewer() init()});
onUnmounted(() => { if (viewer.value && !viewer.value.isDestroyed()) { viewer.value.destroy(); viewer.value = null; }});
let delConfirmFun = (): Promise<any> => { return new Promise((resolve) => { ElMessageBox.confirm( '确定删除该节点吗?', '', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', } ).then(() => { resolve(true) }).catch(() => { resolve(false) }) })}
const init = () => { let options: RectGaugerOptions = { delConfirmFun: delConfirmFun } rectGauger = new RectGaguger(viewer.value as Viewer, options)}
const start = () => { rectGauger.start() started.value = true}
const drawRectEdit = () => { rectGauger.setEditStatus() edited.value = true deleted.value = false}
const drawRectRemove = () => { rectGauger.clearAll() status.value = rectGauger.getStatus() started.value = false edited.value = false deleted.value = false init()} .root-container { position: relative; width: 100wh; height: 100vh; overflow: hidden; }
.left-top-plugin { position: absolute; top: 20px; left: 10px; z-index: 10; }📌操作步骤及流程
- 点击“开始”进入绘制模式,可绘制圆面,同时测量面积及半径距离
- 点击“进入编辑模式”开始编辑。鼠标变手型抓取时按住鼠标左键可拖拽节点,松开则放弃编辑。(拖拽圆心则移动圆面,拖拽边缘点则修改圆面半径)。面积和半径实时更新
- 点击“删除全部”可删除所有圆面。
- 可自定义节点和圆面的实体要素
📌构造函数参数列表(new CircleGauger(...))
| 序号 | 名称 | 类型 | 必须? | 默认值 | 含义 | 备注 |
|---|---|---|---|---|---|---|
| 1 | viewer | Cesium.Viewer | 是 | - | viewer对象 | - |
| 2 | options{ ... } | CircleOptions | 否 | - | 其他参数 | 参数集对象 |
| 2-1 | options.point | Cesium.PointGraphics.ConstructorOptions | 否 | - | Entity的PointGraphics参数项 | - |
| 2-2 | options.ellipse | Cesium.EllipseGraphics.ConstructorOptions | 否 | - | Entity的EllipseGraphics参数项 | - |
| 2-3 | options.circleOverFun | (startPoint: Cartesian3, endPoint: Cartesian3) => void | 否 | - | 绘制结束时的回调函数 | - |
| 2-4 | options.circleMovingFun | (startPoint: Cartesian3, endPoint: Cartesian3) => void | 否 | - | 绘制移动时的回调函数 | - |
| 2-5 | options.circleEditFun | () => Promise<boolean> | 否 | {浏览器自带confirm} | 删除时待确认的回调函数 | - |
📌API方法列表
| 序号 | 方法名 | 入参 | 返回值 | 含义 | 备注 |
|---|---|---|---|---|---|
| 1 | start | - | void | 开启测量圆面 | - |
| 2 | getEntity | - | Cesium.Entity | 获得圆面Entity | - |
| 3 | getDataSource | - | Cesium.DataSource | 获得点所有节点的DataSource | - |
| 4 | getPositions | - | Cartain3[] | 获得点所有节点的坐标 | - |
| 5 | clearAll | - | - | 清除所有对象 | - |