From 6d3a25365554f9c7c98b8a58fba7b7aa9b3f9e9f Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 14 Nov 2023 17:33:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/demo' into demo
---
src/components/GMap.vue | 59 ++++++++++++++++++++---------
src/hooks/use-cesium-tsa.ts | 53 +++++++++++++++++++-------
2 files changed, 78 insertions(+), 34 deletions(-)
diff --git a/src/components/GMap.vue b/src/components/GMap.vue
index d0f79ca..c398f0d 100644
--- a/src/components/GMap.vue
+++ b/src/components/GMap.vue
@@ -150,7 +150,8 @@
<a-col span="6">
<a-tooltip title="风速">
<span>W.S</span>
- <span class="ml5">{{ deviceInfo.device.wind_speed === str ? str : (deviceInfo.device.wind_speed / 10).toFixed(2) + ' m/s' }}</span>
+ <span class="ml5">{{ deviceInfo.device.wind_speed === str ? str : (deviceInfo.device.wind_speed /
+ 10).toFixed(2) + ' m/s' }}</span>
</a-tooltip>
</a-col>
</a-row>
@@ -174,26 +175,27 @@
<div class="osd-panel fz12" v-if="osdVisible.visible">
<div class="fz16 pr5 flex-align-center flex-row flex-justify-between"
style="border-bottom: 1px solid #515151; height: 10%;">
- <div class="flex-align-center flex-justify-center" style="display: flex;">
+ <div class="flex-align-center flex-justify-center" style="display: flex;">
<div v-if="osdVisible.latest_wayline_job" class="flex-column flex-align-center flex-justify-center">
- <div class="task_wrapper">
- <div class="task_content task_content_way" v-if="deviceInfo.device && deviceInfo.device?.mode_code === 5">
- <div class="task_status">
- <ContainerOutlined />
- <span>执行任务中</span>
- </div>
+ <div class="task_wrapper">
+ <div class="task_content task_content_way" v-if="deviceInfo.device && deviceInfo.device?.mode_code === 5">
+ <div class="task_status">
+ <ContainerOutlined />
+ <span>执行任务中</span>
</div>
- <div class="task_content" v-else>
- <div class="task_status">
- <ContainerOutlined />
- <span>待执行</span>
- </div>
- <div class="task_info">{{osdVisible.latest_wayline_job.is_later ? '今天': '明天'}}{{convertTimestampToDate(osdVisible.latest_wayline_job.begin_time, 'hh:mm')}}</div>
- </div>
- <div class="task_title">{{osdVisible.latest_wayline_job.name}}</div>
</div>
+ <div class="task_content" v-else>
+ <div class="task_status">
+ <ContainerOutlined />
+ <span>待执行</span>
+ </div>
+ <div class="task_info">{{ osdVisible.latest_wayline_job.is_later ? '今天' :
+ '明天' }}{{ convertTimestampToDate(osdVisible.latest_wayline_job.begin_time, 'hh:mm') }}</div>
+ </div>
+ <div class="task_title">{{ osdVisible.latest_wayline_job.name }}</div>
+ </div>
</div>
- <span :style="[osdVisible.latest_wayline_job?'margin-left:20px':'']">{{ osdVisible.gateway_callsign }}</span>
+ <span :style="[osdVisible.latest_wayline_job ? 'margin-left:20px' : '']">{{ osdVisible.gateway_callsign }}</span>
</div>
<div>
<a style="color: white;" @click="closeOsdWindow">
@@ -779,6 +781,7 @@
import { useConnectMqtt } from './g-map/use-connect-mqtt'
import Cesium from './cesiumMap/cesium.vue'
import { convertTimestampToDate } from '/@/utils/time'
+import { cesiumOperation } from '/@/hooks/use-cesium-tsa'
export default defineComponent({
components: {
BorderOutlined,
@@ -808,6 +811,7 @@
name: 'GMap',
props: {},
setup () {
+ const cesium = cesiumOperation()
const useMouseToolHook = useMouseTool()
const useGMapManageHook = useGMapManage()
const deviceTsaUpdateHook = deviceTsaUpdate()
@@ -1233,6 +1237,21 @@
deep: true
}
)
+ watch(() => openDroneControl.value, (is: boolean) => {
+ if (!is) {
+ cesium.removeById('rangeEllipse')
+ return
+ }
+ // 设置无人机范围
+ // cesium.removeById('rangeEllipse')
+ const { dock: { basic_osd } } = deviceInfo
+ const ellipseSetting = {
+ longitude: basic_osd.longitude,
+ latitude: basic_osd.latitude
+ }
+ cesium.addEllipse(ellipseSetting)
+ cesium.flyTo(ellipseSetting, 5, 20000)
+ })
function draw (type: MapDoodleType, bool: boolean) {
state.currentType = type
@@ -1600,10 +1619,12 @@
min-height: 2px;
border-radius: 2px;
}
+
.task_wrapper {
display: flex;
align-items: center;
font-size: 12px;
+
.task_content {
background-color: #41bbfa;
padding: 2px 4px;
@@ -1612,9 +1633,9 @@
.task_content_way {
background-color: #19be6b;
}
+
.task_title {
margin-left: 5px;
font-size: 14px;
}
-}
-</style>
+}</style>
diff --git a/src/hooks/use-cesium-tsa.ts b/src/hooks/use-cesium-tsa.ts
index 36fd161..f7a9c07 100644
--- a/src/hooks/use-cesium-tsa.ts
+++ b/src/hooks/use-cesium-tsa.ts
@@ -37,25 +37,31 @@
pitch?: number
roll?: number
}
+
+interface ellipseOption {
+ longitude: number
+ latitude: number
+}
+
// 定义全局的viewer变量防止重复生成
// eslint-disable-next-line no-var
var viewer: Cesium.Viewer | null = null
-export function cesiumOperation () {
+export function cesiumOperation() {
let handler: Cesium.ScreenSpaceEventHandler
const TDT_Token = 'c6eea7dad4fa1e2d1e32ec0e7c9735db'
// 天地图Key
// 天地图地图
const TDT_IMG_C = 'https://{s}.tianditu.gov.cn/img_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
- '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
- '&style=default&format=tiles&tk=' + TDT_Token
+ '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
+ '&style=default&format=tiles&tk=' + TDT_Token
// 天地图注记
const TDT_ZJ = 'https://{s}.tianditu.gov.cn/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
- '&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
- '&style=default&format=tiles&tk=' + TDT_Token
+ '&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
+ '&style=default&format=tiles&tk=' + TDT_Token
// 标准地图注记
const TID_STAND = 'https://{s}.tianditu.gov.cn/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0' +
- '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
- '&style=default&format=tiles&tk=' + TDT_Token
+ '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
+ '&style=default&format=tiles&tk=' + TDT_Token
// 天地图图层变量
const imageryProvider_tdt = new Cesium.WebMapTileServiceImageryProvider({
url: TDT_IMG_C,
@@ -145,7 +151,7 @@
}
// 清除所有标记点
- function removeAllPoint () {
+ function removeAllPoint() {
if (viewer) {
viewer?.entities?.removeAll()
}
@@ -162,6 +168,22 @@
id: pointOption.id,
})
}
+ // 添加半径为7公里的范围的圆
+ const addEllipse = ({ longitude, latitude }: ellipseOption) => {
+ if (!longitude && !latitude) return
+ const position = Cesium.Cartesian3.fromDegrees(longitude, latitude)
+ viewer?.entities.add({
+ position,
+ id: 'rangeEllipse',
+ name: 'rangeEllipse',
+ ellipse: {
+ semiMinorAxis: 7000.0,
+ semiMajorAxis: 7000.0,
+ material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.3),
+ }
+ })
+ console.log(viewer?.entities)
+ }
// 添加线段
const addPolyline = (pointOption: pointOption) => {
@@ -172,7 +194,7 @@
}
// 通过点ID删除
- function removeById (id:string) {
+ function removeById(id: string) {
viewer?.entities.removeById(id)
const pointEntity = viewer?.entities.getById(id)
if (pointEntity && pointEntity !== undefined) {
@@ -180,12 +202,12 @@
}
}
// 通过点ID获取实体
- function getEntityById (id:string) {
+ function getEntityById(id: string) {
const pointEntity = viewer?.entities.getById(id)
return pointEntity
}
// 更新图片实体位置
- function updateEntityPosition (longitude:number, latitude:number, id:string, params?:any) {
+ function updateEntityPosition(longitude: number, latitude: number, id: string, params?: any) {
const entity = getEntityById(id) as Cesium.Entity
const position = Cesium.Cartesian3.fromDegrees(longitude, latitude)
const heading = Cesium.Math.toRadians(-params.heading)
@@ -195,7 +217,7 @@
}
}
// 飞行 flyto
- const flyTo = (pointOption: pointOption, time: number = 4, height:number = 3000) => {
+ const flyTo = (pointOption: pointOption, time: number = 4, height: number = 3000) => {
if (!pointOption.longitude && !pointOption.latitude) return
const destination = Cesium.Cartesian3.fromDegrees(pointOption.longitude, pointOption.latitude, height)
const duration = time
@@ -230,20 +252,20 @@
}
// 地图放大
- const zoonIn = (range:number) => {
+ const zoonIn = (range: number) => {
// 获取当前视角的高度
const cameraHeight = viewer?.camera.positionCartographic.height
const amout = Cesium.Math.sign(range) * cameraHeight / Math.log(cameraHeight)
viewer?.camera.zoomIn(amout)
}
// 地图缩小
- const zoonOut = (range:number) => {
+ const zoonOut = (range: number) => {
const cameraHeight = viewer?.camera.positionCartographic.height
const amout = Cesium.Math.sign(range) * cameraHeight / Math.log(cameraHeight)
viewer?.camera.zoomOut(amout)
}
// 生成或删除路网图层
- const roadPattern = (flag:boolean) => {
+ const roadPattern = (flag: boolean) => {
if (store.state.common.mapSetting.mode === 0) return
const imageryLayers = viewer?.scene.imageryLayers
const tdtZwImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtZwImg_c')
@@ -312,6 +334,7 @@
getEntityById,
updateEntityPosition,
addPolyline,
+ addEllipse,
loadGeoJson,
removeAllDataSource
}
--
Gitblit v1.9.3