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:
longguancheng 2026-03-09 14:01:40 +08:00
commit c9c37dc219
8 changed files with 99 additions and 60 deletions

View File

@ -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;
}

View File

@ -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();

View File

@ -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',

View File

@ -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: '影像列表',

View File

@ -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>

View File

@ -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;
});

View File

@ -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)

View File

@ -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')">