Merge branch 'main' into dev_20260130_RemoveRedis
# Conflicts: # backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/service/impl/SarImageServiceImpl.java
This commit is contained in:
commit
c9c37dc219
@ -45,7 +45,7 @@ public class ImageUtil {
|
||||
int lightRate = rotateDTO.getLightRate();
|
||||
if (lightRate != 0) {
|
||||
//OpenCVUtil.multiply(image, lightRate);
|
||||
OpenCVUtil.enhanceContrast(image, lightRate, 0);
|
||||
// OpenCVUtil.enhanceContrast(image, lightRate, 0);
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
@ -78,18 +78,18 @@ public class SarImageServiceImpl implements ISarImageService {
|
||||
}
|
||||
// 情况2:如果最后一张还能拼图,则直接返回继续拼
|
||||
JmImage last = imageList.get(imageList.size() - 1);
|
||||
Integer startFrameNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, Integer.class);
|
||||
int currWidth = startFrameNo == null ? 0 : singleWidth * (frameNo - startFrameNo + 1);
|
||||
int surplusNum = (IMG_MAX_WITH - currWidth) / singleWidth; // 还可以拼图片数
|
||||
Integer baseNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_CURR_FRAME_NO, Integer.class);
|
||||
|
||||
if (startFrameNo == null || currWidth < IMG_MAX_WITH ||
|
||||
baseNo == null || (frameNo - baseNo + 1 <= surplusNum)) {
|
||||
log.info("当前宽度:{} < {} 可以继续拼接", currWidth, IMG_MAX_WITH);
|
||||
return last;
|
||||
}
|
||||
// Integer startFrameNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, Integer.class);
|
||||
// int currWidth = startFrameNo == null ? 0 : singleWidth * (frameNo - startFrameNo + 1);
|
||||
// int surplusNum = (IMG_MAX_WITH - currWidth) / singleWidth; // 还可以拼图片数
|
||||
// Integer baseNo = imageCache.get(cachePrefix + ":" + CACHE_FIELD_CURR_FRAME_NO, Integer.class);
|
||||
//
|
||||
// if (startFrameNo == null || currWidth < IMG_MAX_WITH ||
|
||||
// baseNo == null || (frameNo - baseNo + 1 <= surplusNum)) {
|
||||
// log.info("当前宽度:{} < {} 可以继续拼接", currWidth, IMG_MAX_WITH);
|
||||
// return last;
|
||||
// }
|
||||
// 情况3:已经拼接到最大数量,或者当前图+填充数量超过允许拼接数量,创建新图像文件
|
||||
log.info("当前宽度:{} > {} 重新拼接,当前帧号{}作为首帧", currWidth, IMG_MAX_WITH, frameNo);
|
||||
// log.info("当前宽度:{} > {} 重新拼接,当前帧号{}作为首帧", currWidth, IMG_MAX_WITH, frameNo);
|
||||
base = new JmImage();
|
||||
imageCache.put(cachePrefix + ":" + CACHE_FIELD_START_FRAME_NO, frameNo);
|
||||
base.setImageNo(last.getImageNo() + 1);
|
||||
@ -105,9 +105,6 @@ public class SarImageServiceImpl implements ISarImageService {
|
||||
currAirline.setBeforeRight(before);
|
||||
}
|
||||
// 使用前一张图的右侧坐标作为后一张图的左侧,前提是没丢图
|
||||
if (!isFirst && !lostImage) {
|
||||
// 注释部分保持原样
|
||||
}
|
||||
before[0] = imageFrame.getLon5();
|
||||
before[1] = imageFrame.getLat5();
|
||||
before[2] = imageFrame.getLon8();
|
||||
|
||||
@ -175,6 +175,8 @@ export default {
|
||||
left: 'Left',
|
||||
right: 'Right',
|
||||
},
|
||||
uavline: "Airline",
|
||||
createAirline: 'Create Airline',
|
||||
rules: {
|
||||
inputTaskName: 'Please enter task name',
|
||||
startAltitude: 'Please enter start altitude',
|
||||
|
||||
@ -170,6 +170,12 @@ export default {
|
||||
stopTaskConfirm: '确定要结束该任务吗?',
|
||||
stopTaskSuccess: '任务已结束!',
|
||||
planArea: '规划区域',
|
||||
direction: {
|
||||
left: '左侧视',
|
||||
right: '右侧视',
|
||||
},
|
||||
uavline: "航线",
|
||||
createAirline: '创建航线',
|
||||
rules: {
|
||||
inputTaskName: '请输入任务名称',
|
||||
startAltitude: '请输入起飞点高度',
|
||||
@ -219,10 +225,6 @@ export default {
|
||||
tip: '提示',
|
||||
radarEndSuccess: '雷达关机成功',
|
||||
deleteConfirm: '确定要删除该?',
|
||||
direction: {
|
||||
left: '左侧视',
|
||||
right: '右侧视',
|
||||
},
|
||||
},
|
||||
picture: {
|
||||
list: '影像列表',
|
||||
|
||||
@ -8,7 +8,6 @@
|
||||
}"
|
||||
icon="ri-list-unordered"
|
||||
:title="this.$t('task.taskList')"
|
||||
|
||||
:visible.sync="taskList.visible"
|
||||
:scroll="false"
|
||||
:showClose="false"
|
||||
@ -94,9 +93,15 @@
|
||||
<i class="ri-more-fill"></i>
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item command="edit">{{ $t('task.editName') }}</el-dropdown-item>
|
||||
<el-dropdown-item command="copy">{{ $t('task.copy') }}</el-dropdown-item>
|
||||
<el-dropdown-item command="remove">{{ $t('task.delete') }}</el-dropdown-item>
|
||||
<el-dropdown-item command="edit">{{
|
||||
$t('task.editName')
|
||||
}}</el-dropdown-item>
|
||||
<el-dropdown-item command="copy">{{
|
||||
$t('task.copy')
|
||||
}}</el-dropdown-item>
|
||||
<el-dropdown-item command="remove">{{
|
||||
$t('task.delete')
|
||||
}}</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
@ -233,9 +238,11 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="$t('task.airline')" v-if="form.mode === '3'">
|
||||
<el-form-item :label="$t('task.uavline')" v-if="form.mode === '3'">
|
||||
<div class="airline-wrap">
|
||||
<div class="airline-create" @click="createAirline">{{ $t('task.createAirline') }}</div>
|
||||
<div class="airline-create" @click="createAirline">
|
||||
{{ $t('task.createAirline') }}
|
||||
</div>
|
||||
<div class="airline-list">
|
||||
<div
|
||||
class="airline-item"
|
||||
@ -405,7 +412,10 @@
|
||||
<el-option label="16bit" :value="1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('task.sideViewDirection')" v-if="form.mode !== '3'">
|
||||
<el-form-item
|
||||
:label="$t('task.sideViewDirection')"
|
||||
v-if="form.mode !== '3'"
|
||||
>
|
||||
<el-select
|
||||
popper-class="form-light"
|
||||
size="small"
|
||||
@ -455,7 +465,10 @@
|
||||
size="mini"
|
||||
></el-slider>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.mode !== '2'" :label="$t('task.waveAngle')">
|
||||
<el-form-item
|
||||
v-if="form.mode !== '2'"
|
||||
:label="$t('task.waveAngle')"
|
||||
>
|
||||
<el-slider
|
||||
v-model="form.waveAngle"
|
||||
:step="0.1"
|
||||
@ -492,7 +505,9 @@
|
||||
@click="previewLine"
|
||||
>{{ $t('common.preview') }}</el-button
|
||||
>
|
||||
<el-button size="mini" type="primary" @click="submit">{{ $t('common.save') }}</el-button>
|
||||
<el-button size="mini" type="primary" @click="submit">{{
|
||||
$t('common.save')
|
||||
}}</el-button>
|
||||
</div>
|
||||
</dt-card>
|
||||
</left-slide>
|
||||
@ -540,15 +555,25 @@
|
||||
<div class="task-line-detail">
|
||||
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
||||
<el-table-column type="index" width="50"> </el-table-column>
|
||||
<el-table-column prop="startLon" :label="$t('task.airline.startLon')"> </el-table-column>
|
||||
<el-table-column prop="startLat" :label="$t('task.airline.startLat')"> </el-table-column>
|
||||
<el-table-column prop="startHeight" :label="$t('task.airline.startHeight')">
|
||||
<el-table-column prop="startLon" :label="$t('task.airline.startLon')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="startLat" :label="$t('task.airline.startLat')">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="startHeight"
|
||||
:label="$t('task.airline.startHeight')"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startAlt" :label="$t('task.airline.startAlt')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endLon" :label="$t('task.airline.endLon')"> </el-table-column>
|
||||
<el-table-column prop="endLat" :label="$t('task.airline.endLat')"> </el-table-column>
|
||||
<el-table-column prop="endHeight" :label="$t('task.airline.endHeight')">
|
||||
<el-table-column prop="endLon" :label="$t('task.airline.endLon')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endLat" :label="$t('task.airline.endLat')">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="endHeight"
|
||||
:label="$t('task.airline.endHeight')"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column prop="endAlt" :label="$t('task.airline.endAlt')">
|
||||
</el-table-column>
|
||||
|
||||
@ -18,7 +18,7 @@ export default class OrthoImageryManager {
|
||||
/**
|
||||
* 添加或更新新推送的图片
|
||||
*/
|
||||
add(data) {
|
||||
add(data, brightness) {
|
||||
const key = `${data.jobId}-${data.uavId}~${data.fileId}`;
|
||||
|
||||
// 已存在则跳过
|
||||
@ -39,7 +39,7 @@ export default class OrthoImageryManager {
|
||||
const layer = this.viewer.cesiumViewer.imageryLayers.addImageryProvider(provider);
|
||||
|
||||
// ✅ 使用全局亮度和透明度,保证新图生效
|
||||
layer.brightness = this.globalBrightness;
|
||||
layer.brightness = brightness ? brightness : this.globalBrightness;
|
||||
layer.alpha = this.globalAlpha;
|
||||
|
||||
this.layerMap.set(key, layer);
|
||||
@ -52,7 +52,7 @@ export default class OrthoImageryManager {
|
||||
* 设置全局亮度,影响所有已有图片和未来新推送的图片
|
||||
*/
|
||||
setBrightness(value) {
|
||||
this.globalBrightness = value;
|
||||
// this.globalBrightness = value;
|
||||
this.layerMap.forEach(layer => {
|
||||
layer.brightness = value;
|
||||
});
|
||||
|
||||
@ -375,7 +375,7 @@ export default {
|
||||
lightPercent: 0,
|
||||
contrastPercent: 10,
|
||||
imageInfos: {
|
||||
brightness: 10
|
||||
brightness: 5
|
||||
},
|
||||
}
|
||||
},
|
||||
@ -487,7 +487,7 @@ export default {
|
||||
// )
|
||||
orthoManager = new OrthoImageryManager(viewer, DT.Cesium, {
|
||||
maxLayers: 400,
|
||||
brightness: 1.2, // 默认亮度
|
||||
brightness: 1, // 默认亮度
|
||||
alpha: 1.0 // 默认透明度
|
||||
})
|
||||
// this.startTest()
|
||||
@ -580,11 +580,11 @@ export default {
|
||||
// 亮度设置变化
|
||||
onLightChange: debounce(function (val) {
|
||||
const imageInfos = { ...this.imageInfos }
|
||||
orthoManager.setBrightness(val / 10)
|
||||
execBrightnessexport(imageInfos).then(res => {
|
||||
console.log('亮度调整成功');
|
||||
// this.$message.success('亮度调整成功')
|
||||
})
|
||||
orthoManager.setBrightness(val)
|
||||
// execBrightnessexport(imageInfos).then(res => {
|
||||
// console.log('亮度调整成功');
|
||||
// // this.$message.success('亮度调整成功')
|
||||
// })
|
||||
}, 500),
|
||||
// startTest() {
|
||||
// let testHeight = 1000
|
||||
@ -2818,10 +2818,10 @@ export default {
|
||||
handleWebsocketImage(info) {
|
||||
// console.log('SAR图像', info.body)
|
||||
let data = JSON.parse(info.body)
|
||||
this.imageInfos = Object.assign({}, this.imageInfos, data)
|
||||
this.imageInfos.brightness = data.brightness
|
||||
// this.imageInfos = Object.assign({}, this.imageInfos, data)
|
||||
// this.imageInfos.brightness = data.brightness
|
||||
console.log('SAR图像2', data)
|
||||
orthoManager.add(data)
|
||||
orthoManager.add(data, this.imageInfos.brightness)
|
||||
// this.addMarkPicture2(data)
|
||||
// console.log('灭有匹配到吗taskUavCollection', taskUavCollection, taskUavCollection[data.jobId])
|
||||
// if (taskUavCollection[data.jobId]) {
|
||||
@ -3040,6 +3040,10 @@ export default {
|
||||
viewer.entities.remove(item)
|
||||
}
|
||||
})
|
||||
if (orthoManager) {
|
||||
orthoManager.clearAll()
|
||||
orthoManager = null
|
||||
}
|
||||
}
|
||||
if (data.jobStatus === 1 && this.detailUav.id === data.jobId) {
|
||||
this.updateUavInfo(data.sarStatus)
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
<template v-slot:header>
|
||||
<span class="remote-header">
|
||||
<i class="ri-task-fill"></i>
|
||||
{{ $t('task.executingTasks') }}
|
||||
{{ $t('task.executingTasks') }}
|
||||
</span>
|
||||
</template>
|
||||
<div class="task-list__content">
|
||||
@ -91,9 +91,9 @@
|
||||
<el-slider
|
||||
v-model="imageInfos.brightness"
|
||||
show-input
|
||||
:min="1"
|
||||
:max="30"
|
||||
:step="1"
|
||||
:min="0.1"
|
||||
:max="20"
|
||||
:step="0.1"
|
||||
input-size="mini"
|
||||
:show-input-controls="false"
|
||||
@change="onLightChange"
|
||||
@ -137,19 +137,24 @@
|
||||
<div class="weather-info__content2">
|
||||
<div class="base-info">
|
||||
<div>
|
||||
<span>{{ $t('task.temperature') }}:</span><span>{{ weatherInfo2.wendu }}</span>
|
||||
<span>{{ $t('task.temperature') }}:</span
|
||||
><span>{{ weatherInfo2.wendu }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t('task.humidity') }}:</span><span>{{ weatherInfo2.shidu }}</span>
|
||||
<span>{{ $t('task.humidity') }}:</span
|
||||
><span>{{ weatherInfo2.shidu }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t('task.airQuality') }}:</span><span>{{ weatherInfo2.quality }}</span>
|
||||
<span>{{ $t('task.airQuality') }}:</span
|
||||
><span>{{ weatherInfo2.quality }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t('task.pm25') }}:</span><span>{{ weatherInfo2.pm25 }}</span>
|
||||
<span>{{ $t('task.pm25') }}:</span
|
||||
><span>{{ weatherInfo2.pm25 }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{ $t('task.pm10') }}:</span><span>{{ weatherInfo2.pm10 }}</span>
|
||||
<span>{{ $t('task.pm10') }}:</span
|
||||
><span>{{ weatherInfo2.pm10 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="week-info">
|
||||
@ -340,14 +345,18 @@
|
||||
<div class="task-line-detail">
|
||||
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
||||
<el-table-column type="index" width="50"> </el-table-column>
|
||||
<el-table-column prop="startLon" :label="$t('task.startLon')"> </el-table-column>
|
||||
<el-table-column prop="startLat" :label="$t('task.startLat')"> </el-table-column>
|
||||
<el-table-column prop="startLon" :label="$t('task.startLon')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="startLat" :label="$t('task.startLat')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="startHeight" :label="$t('task.startHeight')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="startAlt" :label="$t('task.startAlt')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endLon" :label="$t('task.endLon')"> </el-table-column>
|
||||
<el-table-column prop="endLat" :label="$t('task.endLat')"> </el-table-column>
|
||||
<el-table-column prop="endLon" :label="$t('task.endLon')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endLat" :label="$t('task.endLat')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endHeight" :label="$t('task.endHeight')">
|
||||
</el-table-column>
|
||||
<el-table-column prop="endAlt" :label="$t('task.endAlt')">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user