吉安感知网项目-前端
罗广辉
2026-01-31 b8f8cc29658aca4d563a927c11e0efff538f6ad2
feat: 绘制面工具类
6 files modified
1 files renamed
7 files deleted
3583 ■■■■■ changed files
applications/drone-command/src/utils/cesium/DrawPolygon.js 817 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue 4 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/areaManage/partition/FormDiaLog copy.vue 4 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/layerManagement/components/folderFile.vue 316 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/layerManagement/components/leftList.vue 588 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/layerManagement/components/nationalSpatialPlanning.vue 49 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/layerManagement/components/rightEdit.vue 471 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/layerManagement/components/utils.js 619 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/layerManagement/index.vue 604 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue 8 ●●●● patch | view | raw | blame | history
packages/utils/map/DrawPolygon.js 13 ●●●● patch | view | raw | blame | history
packages/utils/map/index.js 45 ●●●●● patch | view | raw | blame | history
packages/utils/package.json 36 ●●●●● patch | view | raw | blame | history
pnpm-lock.yaml 9 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/utils/cesium/DrawPolygon.js
File was deleted
applications/drone-command/src/views/areaManage/defenseZone/FormDiaLog.vue
@@ -16,7 +16,7 @@
            <div class="right-container">
                <div class="header">
                    <span>{{ titleEnum[dialogMode] }}</span>
                    <el-icon class="close-btn" @click.stop="visible = false"><Close /></el-icon>
                </div>
@@ -105,7 +105,7 @@
import { fwDefenseSceneListApi } from '@/views/areaManage/sceneConfig/sceneConfigApi'
import { fieldRules, geomAnalysis, getDictLabel } from '@ztzf/utils'
import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
import { DrawPolygon } from '@/utils/cesium/DrawPolygon'
import { DrawPolygon } from '@ztzf/utils'
import { cartesian3Convert } from '@/utils/cesium/mapUtil'
import * as turf from '@turf/turf'
import * as Cesium from 'cesium'
applications/drone-command/src/views/areaManage/partition/FormDiaLog copy.vue
@@ -17,7 +17,7 @@
            <div class="right-container">
                <div class="header">
                    <span>{{ titleEnum[dialogMode] }}</span>
                    <el-icon class="close-btn" @click.stop="visible = false"><Close /></el-icon>
                </div>
@@ -180,7 +180,7 @@
import { useRoute } from 'vue-router'
import { fieldRules, geomAnalysis, getDictLabel } from '@ztzf/utils'
import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue'
import { DrawPolygon } from '@/utils/cesium/DrawPolygon'
import { DrawPolygon } from '@ztzf/utils'
import { cartesian3Convert } from '@/utils/cesium/mapUtil'
import * as turf from '@turf/turf'
import * as Cesium from 'cesium'
applications/drone-command/src/views/layerManagement/components/folderFile.vue
File was deleted
applications/drone-command/src/views/layerManagement/components/leftList.vue
File was deleted
applications/drone-command/src/views/layerManagement/components/nationalSpatialPlanning.vue
File was deleted
applications/drone-command/src/views/layerManagement/components/rightEdit.vue
File was deleted
applications/drone-command/src/views/layerManagement/components/utils.js
File was deleted
applications/drone-command/src/views/layerManagement/index.vue
File was deleted
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -11,8 +11,8 @@
        <div class="content" style="display: flex">
            <div class="processBox" v-if="dialogMode !== 'add' && processList.length">
                <div class="detail-title">工单记录</div>
                <div class="process" >
                    <OrderStepBar :processList="processList"/>
                <div class="process">
                    <OrderStepBar :processList="processList" />
                </div>
            </div>
            <div class="leftBox">
@@ -269,7 +269,7 @@
import { gdManageDeviceListApi } from './gdManageDeviceApi'
import { cartesian3Convert } from '@/utils/cesium/mapUtil'
import * as Cesium from 'cesium'
import { DrawPolygon } from '@/utils/cesium/DrawPolygon'
import { DrawPolygon } from '@ztzf/utils'
import { pxToRem } from '@/utils/rem'
import dayjs from 'dayjs'
import RefuseOrderDialog from '@/views/orderView/orderManage/orderManage/RefuseOrderDialog.vue'
@@ -679,7 +679,7 @@
        display: flex;
        flex-direction: column;
        .process{
        .process {
            height: 100%;
            padding: 12px 16px 24px 16px;
            width: 312px;
packages/utils/map/DrawPolygon.js
File was renamed from applications/task-work-order/src/utils/cesium/DrawPolygon.js
@@ -1,9 +1,7 @@
import * as Cesium from 'cesium'
import * as turf from '@turf/turf'
import { boxTransformScale } from '@/utils/turfFunc'
import { ElMessage } from 'element-plus'
import { getPointPositionsHeight } from '@/utils/cesium/mapUtil'
import { flyVisual } from '@ztzf/utils'
import { flyVisual, getPointPositionsHeight } from './index'
/**
 * 多边形绘制与编辑工具类
@@ -727,6 +725,15 @@
            this.addPosition(item, false)
        })
        const boxTransformScale = (data, multiple = 3) => {
            const line = turf.lineString(data)
            const bbox = turf.bbox(line)
            const bboxPolygon = turf.bboxPolygon(bbox)
            const scaledPolygon = turf.transformScale(bboxPolygon, multiple)
            return turf.bbox(scaledPolygon)
        }
        // 视角飞入区域
        const newBox = boxTransformScale(
            positions.map(item => [item.lng, item.lat]),
packages/utils/map/index.js
@@ -1,5 +1,6 @@
import * as Cesium from 'cesium'
import { MapTooltip } from './MapTooltip'
import { DrawPolygon } from './DrawPolygon'
/**
 * 飞到中心点并且所有点在可视范围
 *  @param positionsData 二维数组,每项为 [lon, lat] 或 三维数组 [lon, lat, height]
@@ -61,4 +62,46 @@
    })
}
export { MapTooltip, flyVisual }
// 批量获取点数组经纬度对应高度信息
const getPointPositionsHeight = (data, viewer, droneHeight = null) => {
    return new Promise((resolve, reject) => {
        if (!data || !data.length) {
            resolve([])
            return
        }
        // 假设 viewer 已经初始化并且 terrainProvider 是有效的
        const terrainProvider = viewer?.terrainProvider
        // 创建 Cartographic 对象
        const cartographics = data.map(item => {
            const { lng, lat } = item
            return Cesium.Cartographic.fromDegrees(Number(lng), Number(lat))
        })
        // 获取地形数据的Promise
        const promise = Cesium.sampleTerrainMostDetailed(terrainProvider, cartographics)
        // 使用 Cesium.when 处理 Promise
        promise
            .then(function (updatedPositions) {
                //  是一个数组,包含更新后的 Cartographic 对象
                const newPosition = updatedPositions.map((item, index) => {
                    const longitude = Cesium.Math.toDegrees(item.longitude)
                    const latitude = Cesium.Math.toDegrees(item.latitude)
                    let pointData = {
                        ...data[index],
                        longitude,
                        latitude,
                        ASL: Number(item.height),
                        customHeight: Number(item.height),
                    }
                    if (droneHeight) pointData.TH = Number(item.height) + Number(droneHeight)
                    return pointData
                })
                resolve(newPosition)
            })
            .catch(function (error) {
                console.log('获取高程时发生错误:', error)
                resolve(data.map(item => ({ ...item, ASL: 0, customHeight: 0, longitude: item.lng, latitude: item.lat })))
            })
    })
}
export { MapTooltip, flyVisual, getPointPositionsHeight, DrawPolygon }
packages/utils/package.json
@@ -1,18 +1,22 @@
{
  "name": "@ztzf/utils",
  "version": "1.0.0",
  "private": true,
  "description": "工具类",
  "main": "index.js",
  "license": "ISC",
  "peerDependencies": {
    "cesium": "catalog:",
    "dayjs": "catalog:",
    "decimal.js": "catalog:"
  },
  "devDependencies": {
    "cesium": "catalog:",
    "dayjs": "catalog:",
    "decimal.js": "catalog:"
  }
    "name": "@ztzf/utils",
    "version": "1.0.0",
    "private": true,
    "description": "工具类",
    "main": "index.js",
    "license": "ISC",
    "peerDependencies": {
        "@turf/turf": "catalog:",
        "cesium": "catalog:",
        "dayjs": "catalog:",
        "decimal.js": "catalog:",
        "element-plus": "catalog:"
    },
    "devDependencies": {
        "@turf/turf": "catalog:",
        "cesium": "catalog:",
        "dayjs": "catalog:",
        "decimal.js": "catalog:",
        "element-plus": "catalog:"
    }
}
pnpm-lock.yaml
@@ -878,6 +878,12 @@
  packages/utils:
    devDependencies:
      '@turf/turf':
        specifier: 'catalog:'
        version: 6.5.0
      '@ztzf/utils':
        specifier: workspace:*
        version: 'link:'
      cesium:
        specifier: 'catalog:'
        version: 1.126.0
@@ -887,6 +893,9 @@
      decimal.js:
        specifier: 'catalog:'
        version: 10.6.0
      element-plus:
        specifier: 'catalog:'
        version: 2.9.11(vue@3.5.27(typescript@5.9.3))
  uniapps/work-app:
    dependencies: