| | |
| | | <template> |
| | | <el-row class="wrap"> |
| | | <el-col span="2"> |
| | | <!-- <el-button |
| | | class="p-events-auto" |
| | | type="info" |
| | | icon="Memo" |
| | | plain |
| | | @click="draw" |
| | | > |
| | | 绘制网格 |
| | | </el-button> --> |
| | | <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" |
| | | ></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 class="historical" justify="center"> |
| | | <SatelliteAnimation |
| | | :loading="animaLoading" |
| | | :grid-data="gridDataDetailList" |
| | | :mapViews="mapViews" |
| | | ></SatelliteAnimation> |
| | | </el-row> --> |
| | | <el-row justify="space-between"> |
| | | <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" |
| | | ></SatelliteManage> |
| | | </el-row> |
| | | </el-col> |
| | | <el-col span="2"> |
| | | <el-row> |
| | | <CardButton |
| | | name="卫星遥测数据" |
| | | direction="right" |
| | | @click="() => (show = !show)" |
| | | ></CardButton> |
| | | </el-row> |
| | | <el-row class="flex-col"> |
| | | <GridStyleTool |
| | | @show-rank="handleRankClick" |
| | | @show-data="handleDataClick" |
| | | @change-color="handleColorClick" |
| | | @change-opacity="handleOpacityClick" |
| | | ></GridStyleTool> |
| | | </el-row> |
| | | </el-col> |
| | | </el-row> |
| | | <GridTool></GridTool> |
| | | </el-row> |
| | | <!-- <SatelliteDataMix class="data-mix" @mix-data="handleMixDataClick"> |
| | | </SatelliteDataMix> --> |
| | | |
| | | <!-- <el-row class="historical" justify="center"> |
| | | <SatelliteAnimation |
| | | :loading="animaLoading" |
| | | :grid-data="gridDataDetailList" |
| | | :mapViews="mapViews" |
| | | ></SatelliteAnimation> |
| | | </el-row> --> |
| | | </template> |
| | | <script setup> |
| | | import { map } 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 { ref, onMounted } from 'vue'; |
| | | import gridApi from '@/api/gridApi'; |
| | | import SatelliteManage from './component/SatelliteManage.vue'; |
| | | import SatelliteProxy from './SatelliteProxy'; |
| | | import moment from 'moment'; |
| | | import GridStyleTool from './component/GridStyleTool.vue'; |
| | | import { SatelliteProxy } from './SatelliteProxy'; |
| | | import { useFetchData } from '@/composables/fetchData'; |
| | | import { useSatelliteGridStore } from '@/stores/satellite-grid'; |
| | | import { useSceneStore } from '@/stores/scene'; |
| | | import { useGridStore } from '@/stores/grid-info'; |
| | | |
| | | const satelliteProxy = new SatelliteProxy(); |
| | | |
| | | const gridStore = useGridStore(); |
| | | gridStore.selectedSatelliteProxy = satelliteProxy; |
| | | gridStore.pushGridClz(satelliteProxy); |
| | | |
| | | const sceneStore = useSceneStore(); |
| | | const satelliteGridStore = useSatelliteGridStore(); |
| | | |
| | | const { loading, fetchData } = useFetchData(10000); |
| | | const animaLoading = ref(true); |
| | | const show = ref(true); |
| | |
| | | // 网格数据详情 |
| | | const gridDataDetailMap = new Map(); |
| | | const gridDataDetailList = ref([]); |
| | | // 地图网格相关对象 |
| | | let mapViews; |
| | | |
| | | // 查询网格信息和遥感数据组 |
| | | function onSearch(options) { |
| | | satelliteGridStore.fetchGridCell(options.id).then(() => { |
| | | drawGrid(satelliteGridStore.gridInfo); |
| | | prepareGrid(satelliteGridStore.gridInfo); |
| | | satelliteProxy.drawDistrict('长宁区'); |
| | | }); |
| | | satelliteGridStore.fetchGridData(options.id); |
| | | satelliteGridStore.fetchGridData(options.id).then(() => { |
| | | max = satelliteGridStore.gridDataList.length; |
| | | // fetchGridDataDetail(satelliteGridStore.gridDataList); |
| | | }); |
| | | } |
| | | |
| | | function fetchGridDataDetail(dataList) { |
| | |
| | | } |
| | | } |
| | | |
| | | function drawGrid(gridInfo) { |
| | | SatelliteProxy.clearAll(mapViews); |
| | | mapViews = SatelliteProxy.drawPolyline(gridInfo); |
| | | function prepareGrid(gridInfo) { |
| | | satelliteProxy.gridPrepare(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); |
| | | // }); |
| | | }); |
| | | satelliteProxy.setGridEvent('click', (e) => { |
| | | const polygon = e.target; |
| | | const { gridCell } = polygon.getExtData(); |
| | | const cellIndex = gridCell.cellIndex; |
| | | const gridDataDetail = |
| | | satelliteGridStore.selectedGridDataDetail[cellIndex - 1]; |
| | | gridStore.selectedGridCellAndDataDetail = { |
| | | gridCell, |
| | | gridDataDetail |
| | | }; |
| | | }); |
| | | } |
| | | |
| | | // 绘制网格遥感数据值和网格颜色 |
| | | function drawTextAndColor(gridData) { |
| | | // SatelliteProxy.clearText(mapViews); |
| | | // 文本标记 |
| | | const { textViews: dataTxt, labelsLayer: dataLayer } = |
| | | SatelliteProxy.drawDataText(mapViews.points, gridData, mapViews.dataTxt, mapViews.dataLayer); |
| | | mapViews.dataTxt = dataTxt; |
| | | mapViews.dataLayer = dataLayer; |
| | | const { textViews: rankTxt, labelsLayer: rankLayer } = |
| | | SatelliteProxy.drawRankText(mapViews.points, gridData, mapViews.rankTxt, mapViews.rankLayer); |
| | | mapViews.rankTxt = rankTxt; |
| | | mapViews.rankLayer = rankLayer; |
| | | SatelliteProxy.drawColor(mapViews.gridViews, gridData); |
| | | function drawGrid(useCustomColor) { |
| | | satelliteProxy.changeVisibility({ |
| | | showGridViews: false, |
| | | showDataTxt: false, |
| | | showRankTxt: false |
| | | }); |
| | | satelliteProxy.drawTagGrid({ |
| | | tag: satelliteGridStore.selectedGridData.id, |
| | | gridDataDetail: satelliteGridStore.selectedGridDataDetail, |
| | | useCustomColor, |
| | | useDataTxtColor: true, |
| | | extData: { |
| | | name: `卫星遥测数据 - ${moment(satelliteGridStore.selectedGridData).format('YYYY-MM-DD')}` |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleRowClick(row) { |
| | | if (gridDataDetailMap.has(row.id)) { |
| | | const gridData = gridDataDetailMap.get(row.id); |
| | | drawTextAndColor(gridData); |
| | | } else { |
| | | gridApi.fetchGridDataDetail(row.id, row.groupId).then((res) => { |
| | | gridDataDetailMap.set(row.id, res.data); |
| | | const gridData = res.data; |
| | | drawTextAndColor(gridData); |
| | | }); |
| | | } |
| | | satelliteGridStore.fetchGridDataDetail(row, () => { |
| | | drawGrid(); |
| | | }); |
| | | } |
| | | |
| | | function handleRankClick(rankVisible) { |
| | | rankVisible ? map.add(mapViews.rankLayer) : map.remove(mapViews.rankLayer); |
| | | satelliteProxy.changeVisibility({ showRankTxt: rankVisible }); |
| | | } |
| | | |
| | | function handleDataClick(dataVisible) { |
| | | dataVisible ? map.add(mapViews.dataLayer) : map.remove(mapViews.dataLayer); |
| | | satelliteProxy.changeVisibility({ showDataTxt: dataVisible }); |
| | | } |
| | | |
| | | function handleColorClick(isStandardColor) { |
| | | drawGrid(!isStandardColor); |
| | | } |
| | | |
| | | function handleOpacityClick(value) { |
| | | satelliteProxy.changeGridOpacity({ opacityValue: value }); |
| | | } |
| | | |
| | | function handleMixDataClick(gridData) { |
| | | handleRowClick(gridData); |
| | | } |
| | | </script> |
| | | <style scoped> |
| | |
| | | bottom: 10px; |
| | | left: 0; |
| | | right: 0; |
| | | color: #0077ff; |
| | | } |
| | | |
| | | .data-mix { |
| | | position: absolute; |
| | | right: 0; |
| | | top: 60px; |
| | | /* color: #0552f7; */ |
| | | } |
| | | </style> |