<template>
|
<div class="p-events-none m-t-2">
|
<el-row justify="space-between">
|
<el-row class="wrap">
|
<el-col span="2">
|
<el-row>
|
<BaseCard v-show="show" size="medium" direction="left">
|
<template #content>
|
<el-row>
|
<el-form :inline="true">
|
<el-form-item label="走航融合">
|
<el-select
|
v-model="selectedfusionData"
|
multiple
|
clearable
|
@change="handleChange"
|
placeholder="选择任务"
|
size="small"
|
class="w-250"
|
:loading="fusionLoading"
|
>
|
<el-option
|
v-for="(s, i) in fusionDataList"
|
:key="i"
|
:label="s.mixDataId"
|
:value="i"
|
/>
|
</el-select>
|
</el-form-item>
|
<el-form-item>
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
:disabled="
|
!gridCellList || selectedfusionData.length == 0
|
"
|
@click="handleFusionClick"
|
>
|
{{ '叠加融合' }}
|
</el-button>
|
</el-form-item>
|
</el-form>
|
</el-row>
|
<div class="m-t-8">网格要素</div>
|
<el-row class="m-t-8">
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
@click="handleGridClick"
|
>
|
{{ gridVisible ? '隐藏融合' : '显示融合' }}
|
</el-button>
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
@click="handleRankClick"
|
>
|
{{ rankVisible ? '隐藏排名' : '显示排名' }}
|
</el-button>
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
@click="handleDataClick"
|
>
|
{{ dataVisible ? '隐藏数据' : '显示数据' }}
|
</el-button>
|
</el-row>
|
<div class="m-t-8">网格样式</div>
|
<el-row class="m-t-8">
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
@click="handleOpacityClick"
|
>
|
{{ !isOpacity ? '透明化' : '取消透明化' }}
|
</el-button>
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
@click="handleColorClick"
|
>
|
{{ isStandardColor ? '绘制对比色' : '绘制标准色' }}
|
</el-button>
|
</el-row>
|
<div class="m-t-8">走航要素</div>
|
<el-row class="m-t-8">
|
<!-- <el-divider content-position="left"></el-divider> -->
|
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
size="small"
|
:loading="missionLoading || loading"
|
@click="handleUnderwayClick"
|
>
|
{{ underwayVisible ? '隐藏走航路线' : '显示走航路线' }}
|
</el-button>
|
</el-row>
|
</template>
|
<template #footer> </template>
|
</BaseCard>
|
</el-row>
|
</el-col>
|
<el-col span="2">
|
<el-row>
|
<CardButton
|
name="走航融合"
|
direction="right"
|
@click="() => (show = !show)"
|
></CardButton>
|
</el-row>
|
</el-col>
|
</el-row>
|
</el-row>
|
</div>
|
</template>
|
|
<script setup>
|
import { ref, onMounted, onUnmounted, watch } from 'vue';
|
import moment from 'moment';
|
import gridApi from '@/api/gridApi';
|
import { SatelliteGrid } from '@/model/SatelliteGrid';
|
|
const satelliteGrid = new SatelliteGrid();
|
|
// 借用卫星遥测模块中的100米网格
|
const props = defineProps({
|
groupId: {
|
type: Number,
|
default: 3
|
}
|
});
|
const show = ref(true);
|
|
const mission = ref(undefined);
|
|
const gridCellList = ref(undefined);
|
const fusionData = ref(undefined);
|
// 走航融合数据
|
const fusionLoading = ref(false);
|
const fusionDataList = ref([]);
|
const selectedfusionData = ref([]);
|
|
const gridDataDetailMap = new Map();
|
|
const gridVisible = ref(true);
|
const underwayVisible = ref(false);
|
const rankVisible = ref(false);
|
const dataVisible = ref(false);
|
const isStandardColor = ref(true);
|
const isOpacity = ref(false);
|
|
function timeFormatter(value) {
|
return moment(value).format('YYYY-MM-DD');
|
}
|
|
function fetchFusionData() {
|
fusionLoading.value = true;
|
gridApi
|
.fetchGridData(props.groupId, undefined, 3)
|
.then((res) => {
|
fusionDataList.value = res.data;
|
})
|
.finally(() => (fusionLoading.value = false));
|
}
|
|
// 检查走航数据是否和100米网格已融合
|
// function checkUnderwayFusionResult() {
|
// const time = moment(mission.value.startTime).format('YYYY-MM-DD HH:mm:ss');
|
// gridApi.fetchGridData(props.groupId, time, 3).then((res) => {
|
// if (res.data.length > 0) {
|
// fusionData.value = res.data[0];
|
// } else {
|
// fusionData.value = undefined;
|
// }
|
// });
|
// }
|
|
function resetButton() {
|
gridVisible.value = true;
|
underwayVisible.value = false;
|
rankVisible.value = false;
|
dataVisible.value = false;
|
isStandardColor.value = true;
|
isOpacity.value = false;
|
}
|
|
function prepareGrid(gridInfo) {
|
satelliteGrid.gridPrepare(gridInfo);
|
}
|
|
// 绘制网格遥感数据值和网格颜色
|
function drawGrid(gridDataDetail) {
|
satelliteGrid.drawGrid({ gridDataDetail, opacity: 1, zIndex: 11 });
|
}
|
|
// watch(mission, (nV, oV) => {
|
// if (nV != oV) {
|
// checkUnderwayFusionResult();
|
// search(nV);
|
// }
|
// });
|
|
watch(
|
() => props.groupId,
|
(nV, oV) => {
|
if (nV != oV) {
|
gridApi.fetchGridCell(nV).then((res) => {
|
gridCellList.value = res.data;
|
prepareGrid(gridCellList.value);
|
});
|
fetchFusionData();
|
}
|
},
|
{
|
immediate: true
|
}
|
);
|
|
function handleFusionClick() {
|
// resetButton();
|
satelliteGrid.changeVisibility({ showGridViews: false });
|
selectedfusionData.value.forEach((i) => {
|
const d = fusionDataList.value[i];
|
if (gridDataDetailMap.has(d.id)) {
|
// const gdd = gridDataDetailMap.get(d.id);
|
// satelliteGrid.drawTagGrid({
|
// tag: d.id,
|
// gridDataDetail: gdd,
|
// opacity: 1,
|
// zIndex: 11
|
// });
|
satelliteGrid.changeVisibility({ tag: d.id, showGridViews: true });
|
} else {
|
gridApi.fetchGridDataDetail(d.id, d.groupId).then((res) => {
|
gridDataDetailMap.set(d.id, res.data);
|
const gdd = res.data;
|
satelliteGrid.drawTagGrid({
|
tag: d.id,
|
gridDataDetail: gdd,
|
opacity: 1,
|
zIndex: 11
|
});
|
});
|
}
|
});
|
}
|
|
function handleGridClick() {
|
gridVisible.value = !gridVisible.value;
|
selectedfusionData.value.forEach((i) => {
|
const d = fusionDataList.value[i];
|
satelliteGrid.changeVisibility({
|
tag: d.id,
|
showGridViews: gridVisible.value
|
});
|
});
|
}
|
|
function handleUnderwayClick() {
|
underwayVisible.value = !underwayVisible.value;
|
underwayVisible.value ? draw() : mapLine.hideLine();
|
}
|
|
function handleRankClick() {
|
rankVisible.value = !rankVisible.value;
|
selectedfusionData.value.forEach((i) => {
|
const d = fusionDataList.value[i];
|
satelliteGrid.changeVisibility({
|
tag: d.id,
|
showRankTxt: rankVisible.value
|
});
|
});
|
}
|
|
function handleDataClick() {
|
dataVisible.value = !dataVisible.value;
|
selectedfusionData.value.forEach((i) => {
|
const d = fusionDataList.value[i];
|
satelliteGrid.changeVisibility({
|
tag: d.id,
|
showDataTxt: dataVisible.value
|
});
|
});
|
}
|
|
function handleColorClick() {
|
isStandardColor.value = !isStandardColor.value;
|
selectedfusionData.value.forEach((i) => {
|
const d = fusionDataList.value[i];
|
if (gridDataDetailMap.has(d.id)) {
|
const gdd = gridDataDetailMap.get(d.id);
|
satelliteGrid.drawTagGrid({
|
tag: d.id,
|
gridDataDetail: gdd,
|
useCustomColor: !isStandardColor.value,
|
opacity: 1,
|
zIndex: 11
|
});
|
}
|
});
|
}
|
|
function handleOpacityClick() {
|
isOpacity.value = !isOpacity.value;
|
satelliteGrid.changeGridOpacity({ opacityValue: isOpacity.value ? 0.1 : 1 });
|
}
|
|
/**走航轨迹*******************************************************************/
|
import { FactorDatas } from '@/model/FactorDatas';
|
import sector from '@/utils/map/sector';
|
import mapLine from '@/utils/map/line';
|
import mapUtil from '@/utils/map/util';
|
import { fetchHistoryData } from '@/utils/factor/data';
|
import { useFetchData } from '@/composables/fetchData';
|
import { useMissionStore } from '@/stores/mission';
|
|
onMounted(() => {
|
isUnmounted.value = false;
|
fetchMission();
|
});
|
onUnmounted(() => {
|
mapUtil.clearMap();
|
isUnmounted.value = true;
|
});
|
const { loading, fetchData } = useFetchData(10000);
|
|
const missionStore = useMissionStore();
|
const missionLoading = ref(false);
|
|
const isUnmounted = ref(false);
|
|
const drawMode = ref(0);
|
// 监测数据
|
const factorDataMap = new Map();
|
// pm2.5
|
const factorType = 6;
|
|
function fetchMission() {
|
missionLoading.value = true;
|
missionStore.fetchMission().finally(() => (missionLoading.value = false));
|
}
|
|
function search(option) {
|
const { deviceType, deviceCode, startTime, endTime } = option;
|
const _startTime = moment(startTime).format('YYYY-MM-DD HH:mm:ss');
|
const _endTime = moment(endTime).format('YYYY-MM-DD HH:mm:ss');
|
return fetchData((page, pageSize) => {
|
return fetchHistoryData({
|
deviceType,
|
deviceCode,
|
startTime: _startTime,
|
endTime: _endTime,
|
page,
|
perPage: pageSize
|
});
|
});
|
}
|
|
function draw() {
|
if (isUnmounted.value) return;
|
|
selectedfusionData.value.forEach((i) => {
|
const d = fusionDataList.value[i];
|
|
const mission = missionStore.missionList.find((v) => {
|
return v.missionCode == d.mixDataId;
|
});
|
|
if (factorDataMap.has(mission.missionCode)) {
|
const fd = factorDataMap.get(mission.missionCode);
|
drawLine(mission.missionCode, fd);
|
} else {
|
search(mission).then((res) => {
|
const fd = new FactorDatas();
|
fd.setData(res.data, drawMode.value, () => {
|
fd.refreshHeight(factorType.value);
|
factorDataMap.set(mission.missionCode, fd);
|
drawLine(mission.missionCode, fd);
|
});
|
});
|
}
|
});
|
}
|
|
function drawLine(missionCode, fd) {
|
// 刷新图例
|
const factor = fd.factor[factorType];
|
sector.clearSector();
|
fd.refreshHeight(factorType);
|
mapLine.drawTagLine(missionCode, fd, factor);
|
}
|
</script>
|
<style scoped></style>
|