<template>
|
<el-row class="wrap">
|
<el-col span="2">
|
<el-row>
|
<SatelliteManage
|
v-show="show"
|
class="satellite-manage"
|
:gridDataList="satelliteGridStore.gridDataList"
|
:loading="loading"
|
@search="onSearch"
|
@row-click="handleRowClick"
|
@show-rank="handleRankClick"
|
@show-data="handleDataClick"
|
@change-color="handleColorClick"
|
@change-opacity="handleOpacityClick"
|
></SatelliteManage>
|
</el-row>
|
</el-col>
|
<el-col span="2">
|
<el-row>
|
<CardButton
|
name="卫星遥测数据"
|
direction="right"
|
@click="() => (show = !show)"
|
></CardButton>
|
</el-row>
|
</el-col>
|
</el-row>
|
<SatelliteDataMix class="data-mix" @mix-data="handleMixDataClick">
|
</SatelliteDataMix>
|
<SatelliteMixTool :group-id="3"></SatelliteMixTool>
|
|
<!-- <el-row class="historical" justify="center">
|
<SatelliteAnimation
|
:loading="animaLoading"
|
:grid-data="gridDataDetailList"
|
:mapViews="mapViews"
|
></SatelliteAnimation>
|
</el-row> -->
|
</template>
|
<script setup>
|
import { map, onMapMounted } from '@/utils/map/index_old';
|
import calculate from '@/utils/map/calculate';
|
import marks from '@/utils/map/marks';
|
import grid from '@/utils/map/grid';
|
|
import { ref } from 'vue';
|
import gridApi from '@/api/gridApi';
|
import SatelliteManage from './component/SatelliteManage.vue';
|
import SatelliteDataMix from './component/SatelliteDataMix.vue';
|
import SatelliteMixTool from './component/SatelliteMixTool.vue';
|
import SatelliteProxy from './SatelliteProxy';
|
import { useFetchData } from '@/composables/fetchData';
|
import { useSatelliteGridStore } from '@/stores/satellite-grid';
|
import { useSceneStore } from '@/stores/scene';
|
|
const satelliteGridStore = useSatelliteGridStore();
|
const { loading, fetchData } = useFetchData(10000);
|
const sceneStore = useSceneStore();
|
const animaLoading = ref(true);
|
const show = ref(true);
|
|
let count = 0,
|
max = 0;
|
// 网格数据详情
|
const gridDataDetailMap = new Map();
|
const gridDataDetailList = ref([]);
|
// 地图网格相关对象
|
let mapViews;
|
|
// 查询网格信息和遥感数据组
|
function onSearch(options) {
|
satelliteGridStore.fetchGridCell(options.id).then(() => {
|
drawGrid(satelliteGridStore.gridInfo);
|
// initDistrict();
|
SatelliteProxy.drawDistrict('长宁区');
|
});
|
satelliteGridStore.fetchGridData(options.id).then(() => {
|
max = satelliteGridStore.gridDataList.length;
|
// fetchGridDataDetail(satelliteGridStore.gridDataList);
|
});
|
}
|
|
function fetchGridDataDetail(dataList) {
|
dataList.forEach((d) => {
|
gridApi.fetchGridDataDetail(d.id, d.groupId).then((res) => {
|
gridDataDetailMap.set(d.id, res.data);
|
// const gridData = res.data;
|
// drawTextAndColor(gridData);
|
finish();
|
});
|
});
|
}
|
|
function finish() {
|
count++;
|
if (count == max) {
|
animaLoading.value = false;
|
const list = [];
|
gridDataDetailMap.forEach((value, key) => {
|
list.push(value);
|
});
|
|
gridDataDetailList.value = list.sort((a, b) => {
|
return a.dataId - b.dataId;
|
});
|
console.log(gridDataDetailList.value);
|
}
|
}
|
|
function drawGrid(gridInfo) {
|
SatelliteProxy.clearAll(mapViews);
|
mapViews = SatelliteProxy.drawPolyline(gridInfo, (polygon) => {
|
//鼠标移入事件
|
polygon.on('mouseover', () => {
|
polygon.setOptions({
|
//修改多边形属性的方法
|
strokeWeight: 2,
|
strokeColor: 'red'
|
});
|
});
|
//鼠标移出事件
|
polygon.on('mouseout', () => {
|
polygon.setOptions({
|
strokeWeight: 1,
|
strokeColor: 'white'
|
});
|
});
|
//鼠标点击事件
|
polygon.on('click', () => {
|
const [lng, lat] = polygon.getExtData();
|
sceneStore.radius = 0.5;
|
sceneStore.searchScene(lng, lat);
|
});
|
});
|
}
|
|
// 绘制网格遥感数据值和网格颜色
|
function drawTextAndColor(gridData) {
|
// SatelliteProxy.clearText(mapViews);
|
const { resGridViews, pointsRes } = SatelliteProxy.drawColor({
|
gridViews: mapViews.gridViews,
|
points: mapViews.points,
|
gridDataDetail: gridData,
|
lastGridViews: mapViews.lastGridViews
|
});
|
mapViews.lastGridViews = resGridViews;
|
mapViews.lastPoints = pointsRes;
|
// 文本标记
|
const { textViews: dataTxt, labelsLayer: dataLayer } =
|
SatelliteProxy.drawDataText(
|
mapViews.lastPoints,
|
gridData,
|
mapViews.dataTxt,
|
mapViews.dataLayer
|
);
|
mapViews.dataTxt = dataTxt;
|
mapViews.dataLayer = dataLayer;
|
const { textViews: rankTxt, labelsLayer: rankLayer } =
|
SatelliteProxy.drawRankText(
|
mapViews.lastPoints,
|
gridData,
|
mapViews.rankTxt,
|
mapViews.rankLayer
|
);
|
mapViews.rankTxt = rankTxt;
|
mapViews.rankLayer = rankLayer;
|
}
|
|
let selectedGridData;
|
function handleRowClick(row) {
|
if (gridDataDetailMap.has(row.id)) {
|
const gridData = gridDataDetailMap.get(row.id);
|
selectedGridData = gridData;
|
drawTextAndColor(gridData);
|
} else {
|
gridApi.fetchGridDataDetail(row.id, row.groupId).then((res) => {
|
gridDataDetailMap.set(row.id, res.data);
|
const gridData = res.data;
|
selectedGridData = gridData;
|
drawTextAndColor(gridData);
|
});
|
}
|
}
|
|
function handleRankClick(rankVisible) {
|
// rankVisible ? map.add(mapViews.rankLayer) : map.remove(mapViews.rankLayer);
|
rankVisible ? map.add(mapViews.rankTxt) : map.remove(mapViews.rankTxt);
|
}
|
|
function handleDataClick(dataVisible) {
|
// dataVisible ? map.add(mapViews.dataLayer) : map.remove(mapViews.dataLayer);
|
dataVisible ? map.add(mapViews.dataTxt) : map.remove(mapViews.dataTxt);
|
}
|
|
function handleColorClick(isStandardColor) {
|
const { resGridViews, pointsRes } = SatelliteProxy.drawColor({
|
gridViews: mapViews.gridViews,
|
points: mapViews.points,
|
gridDataDetail: selectedGridData,
|
lastGridViews: mapViews.lastGridViews,
|
customColor: !isStandardColor
|
});
|
mapViews.lastGridViews = resGridViews;
|
mapViews.lastPoints = pointsRes;
|
}
|
|
function handleOpacityClick(isOpacity) {
|
mapViews.lastGridViews.forEach((e) => {
|
e.setOptions({
|
fillOpacity: isOpacity ? 0.1 : 0.7
|
});
|
});
|
}
|
|
function handleMixDataClick(gridData) {
|
handleRowClick(gridData);
|
}
|
</script>
|
<style scoped>
|
.satellite-manage {
|
}
|
|
.historical {
|
position: absolute;
|
bottom: 10px;
|
left: 0;
|
right: 0;
|
color: #0077ff;
|
}
|
|
.data-mix {
|
position: absolute;
|
right: 0;
|
top: 60px;
|
/* color: #0552f7; */
|
}
|
</style>
|