import React, { useEffect, useReducer, useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Checkbox, message } from 'antd'; import { CloseOutlined } from '@ant-design/icons'; import { useLocation } from 'react-router' import './index.less' import { config } from '@/config'; export default function Btn() { const dispatch = useDispatch() const location = useLocation() const showPanels = useSelector((s) => s.runtime.showPanels) const layerVisible = useSelector(s => s.map.layerVisible); const map = useSelector(s => s.map.map); const isFullScreen = useSelector(s => s.runtime.isFullScreen) const mapCenter = useSelector(s => s.runtime.mapCenter)||{} const mode = useSelector(s=>s.map.mode) const [open, setOpen] = useState(false)//是否弹出图层窗口 const [targetZoom, setTargetZoom] = useState(null)//点击缩放按钮后地图目标的zoom值 useEffect(()=>{ //移动地图后同步targetZoom值 setTargetZoom(mapCenter?.zoom||null) },[mapCenter]) const layerVisibleChanged = (event)=>{ const vo = { [event.target.name]: event.target.checked }; if(event.target.checked && (event.target.name==='SYLayer' || event.target.name==='SLLayer' || event.target.name==='WYLayer')){ dispatch.runtime.setCameraTarget({ center: [114.15437134051429, 29.744689445729758], zoom: 18, pitch: 60 }) } dispatch.map.setLayerVisible(vo); } const mapType = (name)=>{ if(name==='2d'){ dispatch.map.setMode('2d'); dispatch.map.setLayerVisible({ ['SatelliteImage']: true }); } if(name === '3d'){ if(location.pathname==='/mgr/sy/tqyb'){ message.error('天气预报无法切换3d视图') return } dispatch.map.setLayerVisible({ ['SatelliteImage']: false }); dispatch.map.setMode('3d'); } } const ExportImage = async () => { message.warn('功能开发中') return if(map._cesiumWidget){ map.render(); // 获取Canvas const canvas = map.scene.canvas; // 创建下载链接 const downloadLink = document.createElement('a'); downloadLink.href = canvas.toDataURL('image/png'); downloadLink.download = 'cesium-screenshot.png'; downloadLink.style.display = 'none'; // 触发下载 document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }else{ map.once('rendercomplete', function() { const canvas = map.getViewport().querySelector('.ol-layer canvas'); const link = document.createElement('a'); link.download = 'map.png'; link.href = canvas.toDataURL('image/png'); link.click(); }); map.renderSync(); // 触发重新渲染以确保画面完整 } } return (
dispatch.runtime.setShowPanels(!showPanels)}>
{message.warn('功能开发中')}}>
dispatch.runtime.setHome()}>
{message.warn('功能开发中')}}>
{ if(mapCenter?.zoom === targetZoom){ dispatch.runtime.setCameraTarget({...mapCenter, zoom: mapCenter.zoom + 1, fixed:true}) setTargetZoom(mapCenter.zoom + 1) } }}>
{ if(mapCenter?.zoom === targetZoom){ dispatch.runtime.setCameraTarget({...mapCenter, zoom: mapCenter.zoom - 1, fixed:true }) setTargetZoom(mapCenter.zoom - 1) } }}>
ExportImage()}>
dispatch.runtime.setIsFullScreen(!isFullScreen)}>
{setOpen(!open)}}>
资源目录 setOpen(false)}/>
mapType('2d')} name={'SatelliteImage'} > 影像图
{ const cameraTargeta = { center:config.mapCenter, zoom: 15, pitch: config.pitch3d, } if(mode==='2d'){ dispatch.runtime.setCameraTarget(cameraTargeta) }else{ dispatch.runtime.setMapCenter(cameraTargeta) } mapType('2d') }} > {/*
*/}
水库全景
{ const cameraTargeta = { center: [114.15437134051429, 29.744689445729758], zoom: 14, pitch: 60 } if(mode==='2d'){ dispatch.runtime.setCameraTarget(cameraTargeta) }else{ dispatch.runtime.setMapCenter(cameraTargeta) } mapType('2d') }} > {/*
*/}
流域全景
mapType('3d')} name={'3d'} > 3D图
{ const cameraTargeta = { center: [114.15437134051429, 29.744689445729758], zoom: 18, pitch: 60 } if(mode==='3d'){ dispatch.runtime.setCameraTarget(cameraTargeta) }else{ dispatch.runtime.setMapCenter(cameraTargeta) } mapType('3d') }} >
主坝
{ const cameraTargeta = { center: [114.18263599215172, 29.747020722346193], zoom: 18, pitch: 60 } if(mode==='3d'){ dispatch.runtime.setCameraTarget(cameraTargeta) }else{ dispatch.runtime.setMapCenter(cameraTargeta) } mapType('3d') }} >
副坝
{ const cameraTargeta = { center: [114.15437134051429, 29.743689445729758], zoom: 18, pitch: 60 } if(mode==='3d'){ dispatch.runtime.setCameraTarget(cameraTargeta) }else{ dispatch.runtime.setMapCenter(cameraTargeta) } mapType('3d') }} >
溢洪道
监测体系
水库水文站
流量站
视频站
渗压站
渗流站
位移站
洪水防御
危险区
安置点
企事业单位
沿河居民户
); }