| | |
| | | CardButton: typeof import('./components/CardButton.vue')['default'] |
| | | CardDialog: typeof import('./components/CardDialog.vue')['default'] |
| | | ConfigManage: typeof import('./components/map/ConfigManage.vue')['default'] |
| | | copy: typeof import('./components/search/OptionAOD.vue')['default'] |
| | | CoreHeader: typeof import('./components/core/CoreHeader.vue')['default'] |
| | | CoreMenu: typeof import('./components/core/CoreMenu.vue')['default'] |
| | | DataSummary: typeof import('./components/monitor/DataSummary.vue')['default'] |
| | |
| | | FactorRadio: typeof import('./components/monitor/FactorRadio.vue')['default'] |
| | | FactorTrend: typeof import('./components/monitor/FactorTrend.vue')['default'] |
| | | GaugeChart: typeof import('./components/chart/GaugeChart.vue')['default'] |
| | | GridSearch: typeof import('./components/grid/GridSearch.vue')['default'] |
| | | HistoricalTrajectory: typeof import('./components/animation/HistoricalTrajectory.vue')['default'] |
| | | MapLocation: typeof import('./components/map/MapLocation.vue')['default'] |
| | | MapScene: typeof import('./components/map/MapScene.vue')['default'] |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <CardDialog |
| | | v-model="dialogVisible" |
| | | title="ç½æ ¼ä¿¡æ¯" |
| | | draggable |
| | | :modal="false" |
| | | width="300px" |
| | | > |
| | | <template #default> |
| | | <el-form |
| | | :inline="false" |
| | | ref="formRef" |
| | | label-position="right" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="ç½æ ¼ç¼å·ï¼"> |
| | | <div> |
| | | {{ data.cellIndex }} |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="ç»çº¬åº¦ï¼"> |
| | | <div> |
| | | {{ data.longitude + ', ' + data.latitude }} |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="PM2.5ï¼"> |
| | | <div> |
| | | {{ data.pm25 + ' μg/m³' }} |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="åè³èå´ï¼"> |
| | | <div>/</div> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | <template #footer> </template> |
| | | </CardDialog> |
| | | </template> |
| | | <script setup> |
| | | import { ref, watch, computed } from 'vue'; |
| | | import { useGridStore } from '@/stores/grid-info'; |
| | | |
| | | const gridStore = useGridStore(); |
| | | |
| | | const dialogVisible = ref(false); |
| | | |
| | | const data = computed(() => { |
| | | if (gridStore.selectedGridCellAndDataDetail) { |
| | | return { |
| | | cellIndex: gridStore.selectedGridCellAndDataDetail.gridCell.cellIndex, |
| | | longitude: gridStore.selectedGridCellAndDataDetail.gridCell.longitude, |
| | | latitude: gridStore.selectedGridCellAndDataDetail.gridCell.latitude, |
| | | pm25: gridStore.selectedGridCellAndDataDetail.gridDataDetail.pm25 |
| | | }; |
| | | } else { |
| | | return { |
| | | cellIndex: '/', |
| | | longitude: '/', |
| | | latitude: '/', |
| | | pm25: '/' |
| | | }; |
| | | } |
| | | }); |
| | | |
| | | watch( |
| | | () => gridStore.selectedGridCellAndDataDetail, |
| | | (nv, ov) => { |
| | | if (nv != ov) { |
| | | dialogVisible.value = true; |
| | | } |
| | | }, |
| | | { deep: true } |
| | | ); |
| | | </script> |
| | |
| | | // import { ref } from 'vue'; |
| | | // import { defineStore } from 'pinia'; |
| | | // import { useFetchData } from '@/composables/fetchData'; |
| | | // import sceneInfoApi from '@/api/sceneInfoApi'; |
| | | // import { useToolboxStore } from '@/stores/toolbox'; |
| | | import { ref } from 'vue'; |
| | | import { defineStore } from 'pinia'; |
| | | |
| | | // const toolboxStore = useToolboxStore(); |
| | | // èµ°èªè®¾å¤ |
| | | export const useGridStore = defineStore('grid', () => { |
| | | const selectedSatelliteProxy = undefined; |
| | | |
| | | // // èµ°èªè®¾å¤ |
| | | // export const useGridStore = defineStore('grid', () => { |
| | | // const selectedGrid = ref(undefined); |
| | | const selectedGridCellAndDataDetail = ref(undefined); |
| | | |
| | | // function searchScene(lng, lat) { |
| | | // // if (toolboxStore.sceneSearchStatus) { |
| | | // return fetchData(() => { |
| | | // return sceneInfoApi |
| | | // .searchByCoordinate(lng, lat, radius.value * 1000) |
| | | // .then((res) => { |
| | | // sceneList.value = res.data.filter((v) => { |
| | | // return v.typeId != 19 && v.typeId != 20; |
| | | // }); |
| | | // return res; |
| | | // }); |
| | | // }); |
| | | // // } |
| | | // } |
| | | |
| | | // return { radius, sceneList, loading, searchScene }; |
| | | // }); |
| | | return { selectedSatelliteProxy, selectedGridCellAndDataDetail }; |
| | | }); |
| | |
| | | }); |
| | | // ç½æ ¼æ°æ®è¯¦æ
|
| | | const gridDataDetailMap = new Map(); |
| | | const selectedGridData = ref(undefined) |
| | | const selectedGridData = ref(undefined); |
| | | |
| | | const selectedGridDataDetail = ref(undefined) |
| | | const selectedGridDataDetail = ref(undefined); |
| | | |
| | | // è·åç½æ ¼ä¿¡æ¯ |
| | | function fetchGridCell(groupId) { |
| | |
| | | |
| | | // è·å饿µåæ¥å
·ä½ç½æ ¼çæµæ°æ® |
| | | function fetchGridDataDetail(gridData, callback) { |
| | | selectedGridData.value = gridData; |
| | | if (gridDataDetailMap.has(gridData.id)) { |
| | | selectedGridData.value = gridDataDetailMap.get(gridData.id); |
| | | callback(selectedGridData.value); |
| | | selectedGridDataDetail.value = gridDataDetailMap.get(gridData.id); |
| | | callback(selectedGridDataDetail.value); |
| | | } else { |
| | | gridApi.fetchGridDataDetail(gridData.id, gridData.groupId).then((res) => { |
| | | gridDataDetailMap.set(gridData.id, res.data); |
| | | selectedGridData.value = res.data; |
| | | callback(selectedGridData.value); |
| | | selectedGridDataDetail.value = res.data; |
| | | callback(selectedGridDataDetail.value); |
| | | }); |
| | | } |
| | | } |
| | |
| | | gridDataList, |
| | | mixGridDataList, |
| | | selectedGridData, |
| | | selectedGridDataDetail, |
| | | fetchGridCell, |
| | | fetchGridData, |
| | | fetchGridDataDetail |
| | |
| | | <!-- <MissionManage></MissionManage> --> |
| | | <ConfigManage></ConfigManage> |
| | | <!-- <MapLocation></MapLocation> --> |
| | | <SceneSearch></SceneSearch> |
| | | <MapScene></MapScene> |
| | | <SceneSearch></SceneSearch> |
| | | <GridSearch></GridSearch> |
| | | <!-- <el-button |
| | | @click="satelliteImportVisible = !satelliteImportVisible" |
| | | type="primary" |
| | |
| | | class="el-button-custom aod-right-top p-events-auto" |
| | | >AODæ°æ®å¯¼å
¥</el-button |
| | | > --> |
| | | <PollutionTrace class="aod-right-top"></PollutionTrace> |
| | | <ProductManage class="satellite-right-top"></ProductManage> |
| | | </el-row> |
| | | <!-- <CoreMenu></CoreMenu> --> |
| | | <router-view></router-view> |
| | | </div> |
| | | <SatelliteImport v-model="satelliteImportVisible"></SatelliteImport> |
| | | <AODImport v-model="aodImportVisible"></AODImport> |
| | | <!-- <SatelliteImport v-model="satelliteImportVisible"></SatelliteImport> |
| | | <AODImport v-model="aodImportVisible"></AODImport> --> |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | import SatelliteImport from './satellitetelemetry/component/SatelliteImport.vue'; |
| | | import AODImport from './satellitetelemetry/component/AODImport.vue'; |
| | | import ProductManage from './dataproduct/ProductManage.vue'; |
| | | import PollutionTrace from './satellitetelemetry/PollutionTrace.vue'; |
| | | const satelliteImportVisible = ref(false); |
| | | const aodImportVisible = ref(false); |
| | | </script> |
| | |
| | | gap: 4px; |
| | | } |
| | | .satellite-right-top { |
| | | width: 120px; |
| | | /*width: 120px;*/ |
| | | position: absolute; |
| | | right: 0px; |
| | | } |
| | | |
| | | .aod-right-top { |
| | | position: absolute; |
| | | right: 124px; |
| | | right: 100px; |
| | | } |
| | | </style> |
| | |
| | | }; |
| | | }); |
| | | satelliteProxy.drawGrid({ |
| | | gridData: _aod, |
| | | gridDataDetail: _aod, |
| | | showDataTxt: true, |
| | | showRankTxt: true |
| | | }); |
| | |
| | | return b.pm25 - a.pm25; |
| | | }); |
| | | satelliteProxy.drawGrid({ |
| | | gridData: tempGridDataDetailList.value, |
| | | gridDataDetail: tempGridDataDetailList.value, |
| | | showDataTxt: true, |
| | | showRankTxt: true |
| | | }); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-button |
| | | @click="handleChange" |
| | | type="primary" |
| | | class="el-button-custom p-events-auto" |
| | | >æ±¡ææº¯æºï¼{{ disable ? 'å
³' : 'å¼' }}</el-button |
| | | > |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import { ref, onMounted } from 'vue'; |
| | | import { useGridStore } from '@/stores/grid-info'; |
| | | import { useSceneStore } from '@/stores/scene'; |
| | | |
| | | const gridStore = useGridStore(); |
| | | const sceneStore = useSceneStore(); |
| | | |
| | | const disable = ref(true); |
| | | |
| | | function handleChange() { |
| | | disable.value = !disable.value; |
| | | if (disable.value) { |
| | | gridStore.selectedSatelliteProxy.goBackGridEvent('click'); |
| | | } else { |
| | | gridStore.selectedSatelliteProxy.setGridEvent('click', (e) => { |
| | | const polygon = e.target; |
| | | const { centerPoint } = polygon.getExtData(); |
| | | const [lng, lat] = centerPoint; |
| | | sceneStore.radius = 0.5; |
| | | sceneStore.searchScene(lng, lat); |
| | | }); |
| | | } |
| | | } |
| | | </script> |
| | |
| | | mapViews; |
| | | |
| | | districtPolygon; |
| | | |
| | | events = new Map(); |
| | | |
| | | // ç»å¶åºå¿è¾¹ç |
| | | drawDistrict(districtName, isNew) { |
| | | onMapMounted(() => { |
| | |
| | | ] |
| | | // eslint-disable-next-line no-undef |
| | | .map((d) => new AMap.LngLat(d[0], d[1])), |
| | | extData: points[i] |
| | | extData: { |
| | | centerPoint: points[i], |
| | | // gridPoints, |
| | | gridCell: v |
| | | } |
| | | }; |
| | | }); |
| | | const gridViews = gridMapUtil.drawPolylines({ points: gridPoints, event }); |
| | |
| | | |
| | | // ç»å¶ç½æ ¼é¥ææ°æ®å¼åç½æ ¼é¢è² |
| | | drawGrid({ |
| | | gridData, |
| | | gridDataDetail, |
| | | useCustomColor, |
| | | opacity, |
| | | zIndex, |
| | |
| | | const { resGridViews, pointsRes } = this.drawColor({ |
| | | gridViews: this.mapViews.gridViews, |
| | | points: this.mapViews.points, |
| | | gridDataDetail: gridData, |
| | | gridDataDetail: gridDataDetail, |
| | | lastGridViews: this.mapViews.lastGridViews, |
| | | customColor: useCustomColor, |
| | | opacity: opacity, |
| | |
| | | // æ°æ®æ è®° |
| | | const { textViews: dataTxt, labelsLayer: dataLayer } = this.drawDataText( |
| | | this.mapViews.lastPoints, |
| | | gridData, |
| | | gridDataDetail, |
| | | this.mapViews.dataTxt, |
| | | this.mapViews.dataLayer |
| | | ); |
| | |
| | | |
| | | const { textViews: rankTxt, labelsLayer: rankLayer } = this.drawRankText( |
| | | this.mapViews.lastPoints, |
| | | gridData, |
| | | gridDataDetail, |
| | | this.mapViews.rankTxt, |
| | | this.mapViews.rankLayer |
| | | ); |
| | |
| | | }); |
| | | } |
| | | |
| | | setGridEvent(event) { |
| | | setGridEvent(name, event) { |
| | | if (!this.events.has(name)) { |
| | | this.events.set(name, []); |
| | | } |
| | | const list = this.events.get(name); |
| | | if (list.length > 0) { |
| | | const lastEvent = list[list.length - 1]; |
| | | this.mapViews.gridViews.forEach((polygon) => { |
| | | polygon.off(name, lastEvent); |
| | | }); |
| | | } |
| | | this.events.get(name).push(event); |
| | | this.mapViews.gridViews.forEach((polygon) => { |
| | | event(polygon); |
| | | polygon.on(name, event); |
| | | }); |
| | | } |
| | | |
| | | |
| | | goBackGridEvent(name) { |
| | | if (this.events.has(name)) { |
| | | const eventList = this.events.get(name); |
| | | //å
ç§»é¤åæçäºä»¶ |
| | | const lastEvent = eventList.pop(); |
| | | this.mapViews.gridViews.forEach((polygon) => { |
| | | polygon.off(name, lastEvent); |
| | | }); |
| | | //è·åä¸ä¸ä¸ªäºä»¶ |
| | | const event = eventList.pop(); |
| | | this.mapViews.gridViews.forEach((polygon) => { |
| | | polygon.on(name, event); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // // å°å¾ç½æ ¼ç¸å
³å¯¹è±¡ |
| | |
| | | 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 satelliteGridStore = useSatelliteGridStore(); |
| | | const { loading, fetchData } = useFetchData(10000); |
| | | const gridStore = useGridStore(); |
| | | gridStore.selectedSatelliteProxy = satelliteProxy; |
| | | const sceneStore = useSceneStore(); |
| | | const satelliteGridStore = useSatelliteGridStore(); |
| | | |
| | | const { loading, fetchData } = useFetchData(10000); |
| | | const animaLoading = ref(true); |
| | | const show = ref(true); |
| | | |
| | |
| | | }); |
| | | }); |
| | | //é¼ æ ç¹å»äºä»¶ |
| | | polygon.on('click', () => { |
| | | const [lng, lat] = polygon.getExtData(); |
| | | sceneStore.radius = 0.5; |
| | | sceneStore.searchScene(lng, lat); |
| | | }); |
| | | // 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 drawGrid(gridData) { |
| | | satelliteProxy.drawGrid({ gridData }); |
| | | function drawGrid(gridDataDetail) { |
| | | satelliteProxy.drawGrid({ gridDataDetail: gridDataDetail }); |
| | | } |
| | | |
| | | function handleRowClick(row) { |
| | |
| | | |
| | | function handleColorClick(isStandardColor) { |
| | | satelliteProxy.drawGrid({ |
| | | gridData: satelliteGridStore.selectedGridData, |
| | | gridDataDetail: satelliteGridStore.selectedGridDataDetail, |
| | | useCustomColor: !isStandardColor |
| | | }); |
| | | } |
| | |
| | | } |
| | | |
| | | // ç»å¶ç½æ ¼é¥ææ°æ®å¼åç½æ ¼é¢è² |
| | | function drawGrid(gridData) { |
| | | satelliteProxy.drawGrid({ gridData, opacity: 1, zIndex: 11 }); |
| | | function drawGrid(gridDataDetail) { |
| | | satelliteProxy.drawGrid({ gridDataDetail, opacity: 1, zIndex: 11 }); |
| | | } |
| | | |
| | | watch(mission, (nV, oV) => { |
| | |
| | | } |
| | | }); |
| | | |
| | | let selectedGridData; |
| | | let selectedGridDataDetail; |
| | | // å å èå |
| | | function handleFusionClick() { |
| | | // resetButton(); |
| | | const d = fusionData.value; |
| | | if (gridDataDetailMap.has(d.id)) { |
| | | const gridData = gridDataDetailMap.get(d.id); |
| | | selectedGridData = gridData; |
| | | drawGrid(gridData); |
| | | selectedGridDataDetail = gridDataDetailMap.get(d.id); |
| | | // selectedGridData = gridData; |
| | | drawGrid(selectedGridDataDetail); |
| | | } else { |
| | | gridApi.fetchGridDataDetail(d.id, d.groupId).then((res) => { |
| | | gridDataDetailMap.set(d.id, res.data); |
| | | const gridData = res.data; |
| | | selectedGridData = gridData; |
| | | drawGrid(gridData); |
| | | selectedGridDataDetail = res.data; |
| | | // selectedGridData = gridData; |
| | | drawGrid(selectedGridDataDetail); |
| | | }); |
| | | } |
| | | } |
| | |
| | | function handleColorClick() { |
| | | isStandardColor.value = !isStandardColor.value; |
| | | satelliteProxy.drawGrid({ |
| | | gridData: selectedGridData, |
| | | gridDataDetail: selectedGridData, |
| | | useCustomColor: !isStandardColor.value, |
| | | opacity: 1, |
| | | zIndex: 11 |