1.0.2 • Published 10 months ago

cesium-draw-js v1.0.2

Weekly downloads
-
License
ISC
Repository
github
Last release
10 months ago

基于 draw-helper1.6 封装的 cesium 绘制方法

绘制图形如下

基础图形如下图,坐标查询,空间距离,贴地距离和面积量算等实时计算功能不保存图形数据

Description

使用如下

  1. 安装 cesium-draw-js 包
npm i cesium-draw-js
  1. 引入 tooltip 和 确认取消弹框

绘制时添加的操作提示需要在页面中添加如下 dom

<!-- 绘制时的提示框,内部样式自己定义 -->
<div id="mouse-tooltip" />
<!-- 绘制停止时的确认取消框,样式自己定义,确认和取消方法引用参考第7点 -->
<div id="drawPopConfirmLayer" />
  1. 引入 turf.min.js 文件

缓冲区和面积量算需要引入 turf.min.js 文件,如果不用到这两个绘制功能,不需要引入

<script
    type="text/javascript"
    src="/node_modules/cesium-draw-js/dist/turf.min.js"
></script>
  1. 引入绘制方法

以绘制折线为例,执行以下代码就可以在你的 cesium 地图上开始绘制你的线条了

import { DrawFunc } from 'cesium-draw-js';
import type { LineOptions } from 'cesium-draw-js';

const viewer: Viewer = undefined; //  自己的 cesium.viewer
const options: LineOptions = {}; // 参数配置,可以更改线条的宽度,材料等
const drawGraph = new DrawFunc.DrawGraphLine(viewer, options);
drawGraph.startDraw();
  1. 所有绘制方法的 options 参数

所有绘制方法 options 参数都有 3 个公共参数,分别为 layerId、dragIconLight 和 dragIcon

|                          |          | options                                                                                             |
| ------------------------ | -------- | --------------------------------------------------------------------------------------------------- |
| DrawGraphPoint           | 点       |                                                                                                     |
| DrawGraphLine            | 折线     | polylineWidth、material                                                                             |
| DrawGraphCircle          | 圆形     | material、radiusLineMaterial、fill、outline、outlineWidth、outlineColor、lineWidth、outlineMaterial |
| DrawGraphPolygon         | 多边形   | material、outlineMaterial、fill、outlineWidth、outline                                              |
| DrawGraphRectangle       | 矩形     | material、outlineMaterial、fill、outlineWidth、outline                                              |
| DrawGraphBuffer          | 缓冲区   | material、lineMaterial、lineWidth、radius、line、fill                                               |
| DrawGraphStraightArrow   | 直线箭头 | material、outlineMaterial、fill、outlineWidth、outline                                              |
| DrawGraphAttactArrow     | 攻击箭头 | material、outlineMaterial、fill、outlineWidth、outline                                              |
| DrawGraphPincerArrow     | 钳击箭头 | material、outlineMaterial、fill、outlineWidth、outline                                              |
| DrawGraphPosMeasure      | 坐标查询 |                                                                                                     |
| DrawGraphSpaceDisMeasure | 空间距离 | polylineWidth、material                                                                             |
| DrawGraphStickDisMeasure | 贴地距离 | polylineWidth、material                                                                             |
| DrawGraphAreaMeasure     | 面积量算 | material、outlineMaterial、fill、outlineWidth、outline                                              |
  1. options 参数介绍

    参数名类型描述
    layerIdstring识别参数,放到 entity 中跟其它非绘制 entity 做区分
    dragIconLightstring鼠标点击处绘制的点的图片
    dragIconstring图形线条中心的点的图片
    fillboolean是否显示实体及其子项
    outlineboolean指定图形是否带有轮廓
    outlineWidthnumber指定图形轮廓宽度属性
    outlineColorColor指定图形轮廓 Color 属性
    extrudedHeightnumber指定多边形的拉伸面相对于椭圆体表面的高度
    polylineWidthstring单纯线条图形的线条宽度
    radiusstring缓冲区半径
    lineboolean是否显示线条
    lineWidthstring普通线条宽度
  2. 绘制方法的内部执行方法

    DrawGraphBuffer 由于需要支持实时设置缓存区半径参数,所以添加了 dialogVisible 和 saveConfig 两个方法,如果不想实时更改缓冲区半径,可以将 dialogVisible 自定义为 DrawGraphBuffer 中的 saveConfig

    描述options
    startDraw开始绘制
    reEnterModify重新进入编辑
    drawOldData取消修改,绘制修改前数据并清除所有监听
    clearDrawing清除绘制数据并清除所有监听
    saveDraw保存绘制的图形,返回保存的数据并清除所有监听
    dialogVisibleDrawGraphBuffer 特有,右键结束绘制时调用,需要自定义方法,主要是希望打开一个 dialog 支持输入缓存区半径
    saveConfigDrawGraphBuffer 特有,右键结束绘制时需要填入缓存区半径,保存缓冲区半径后调用 saveConfig 并结束绘制radius
    clearHandler清除所有 handler 监听
    clear清除所有绘制相关

编辑和删除

编辑和删除通过暴露的方法就可以实现,根据个人情况开发,可以参考下面的写法

/**
 * let layerId = 'xxx' //你自己设定的layerId
 * let viewer = new Viewer() // viewer 是你的 cesium 上的 viewer 应用
 * let drawGraph = new DrawGraphLine(viewer,{})  // drawGraph 是你的绘制 class
 */
// 给绘制的图形绑定点击事件
function bindGloveEvent() {
    handler = new ScreenSpaceEventHandler(viewer.scene.canvas)
    handler.setInputAction((movement: any) => {
        const pick = viewer.scene.pick(movement.position)
        if (defined(pick)) {
            const obj = pick?.id
            if (!obj || !obj.layerId || flag.value === OPERATE_STATUS.NONE)
                return

            if (flag.value === OPERATE_STATUS.EDIT) // 编辑状态
                enterDrawEditing(obj.timeStampId, obj.drawType)
            else if (flag.value === OPERATE_STATUS.DELETE) // 删除状态
                clearEntityById(obj.timeStampId)
        }
    }, ScreenSpaceEventType.LEFT_CLICK)
}
function clearEntityById(timeStampId: number) {
    const entityList = viewer.entities.values
    if (!entityList || entityList.length < 1)
        return

    for (let i = 0; i < entityList.length; i++) {
        const entity: DrawEntity = entityList[i]
        if (entity.layerId === layerId && entity.timeStampId === timeStampId) {
            viewer.entities.remove(entity)
            i--
        }
    }
}
function enterDrawEditing(timeStampId: number, drawType: string) {
    // 先移除entity
    clearEntityById(timeStampId)
    drawGraph?.reEnterModify(drawedShape[timeStampId], timeStampId)
}

参考实现页面

我写了一个Vue页面,可以参考内部的引用和实现方式

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago

0.0.12

10 months ago

0.0.11

10 months ago

0.0.10

10 months ago

0.0.9

10 months ago

0.0.8

10 months ago

0.0.7

10 months ago

0.0.6

10 months ago

0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

10 months ago

0.0.2

10 months ago

0.0.1

10 months ago

0.0.0

10 months ago