import { parseGeoJSONFeature } from "../../utils/tools"; import { DCPJ_TYPES, SLGC_TYPES } from "../../views/Home/consts"; import { parseGeoJSON } from "../../utils/tools"; function initState() { return { calculating: false, search: '', view: 0, layerVisible: { HighlightLayer: true, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }, layerSetting: { dem: true, dom: false, drplabel: 'h24', skNormalLabelInvisible: true, bxsk_lhdd: false, bxsk_jzdd: false, bxsk_bsdd: true, }, rightStack: [], hidePanels: false, }; } const map = { state: initState(), reducers: { setRaw(state, val) { return { ...state, ...val } }, setCalculating(state, val) { return { ...state, calculating: val }; }, setView(state, view) { return { ...state, view, rightStack: [], }; }, setSearch(state, search) { return { ...state, search }; }, setRightStack(state, { name, open }) { if (!name) { return state; } const rightStack = (state.rightStack || []).filter(o => o !== name); if (open) { rightStack.push(name); } return { ...state, rightStack }; }, setLayerVisible(state, vo) { const s = { ...state }; s.layerVisible = { ...s.layerVisible, ...vo, }; return s; }, setLayerVisibleExclusive(state, vo) { return { ...state, layerVisible: { ...vo } }; }, setLayerSetting(state, so) { const s = { ...state }; s.layerSetting = { ...s.layerSetting, ...so, }; return s; }, setHidePanels(state, val) { return { ...state, hidePanels: val, } }, reset() { return initState(); } }, effects: dispatch => ({ openSearch(value) { this.setSearch({ mode: 'search', search: value, }); this.setRightStack({ name: 'search', open: !!value }); }, openHighlights(ctx) { const { title, records } = ctx; if (!title || !records) { this.setSearch(null); this.setRightStack({ name: 'search', open: false }); return; } this.setSearch({ mode: 'select', records, title, }); this.setRightStack({ name: 'search', open: true }); }, // { type, prop, fill, stroke } highlightFeatures(records) { records = records.map(o => { if (!o || !o.type || !o.props) { return null; } const feature = parseGeoJSONFeature(o.props); if (!feature || !feature.properties) { console.error('invalid record to highlight'); return null; } feature.properties = o; return feature; }).filter(Boolean); dispatch.runtime.setLayerSetting({ highlight: records }) }, resetMap() { dispatch.map.reset(); dispatch.fzjcview.reset(); dispatch.overallview.reset(); dispatch.rcview.reset(); dispatch.realview.reset(); dispatch.shyjview.reset(); dispatch.slgcview.reset(); dispatch.runtime.reset(); }, setView(id) { let layerVisible = {}; const map = window.__mapref if (id === 1 || id == 503) { layerVisible = { RealDrpLayer: true, RealHDLayer: true, RealSkLayer: true, AdcdLayer: true, PicStLayer: false, RivlLayer: true, WataLayer: false, } Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 0) { layerVisible = { RealDrpLayer: true, RealHDLayer: true, RealSkLayer: false, PicStLayer: false, RivlLayer: true, YuwaiLayer: false, AdcdLayer: true, WataLayer: false, RealSkLayerQ2: true, RealHDLayerQ2: true, } Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 8) { layerVisible = { RealDrpLayer: true, RealHDLayer: true, RealSkLayer: false, PicStLayer: false, RivlLayer: true, YuwaiLayer: false, AdcdLayer: true, WataLayer: false, RealSkLayerQ2: true, RealHDLayerQ2: true, } Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 2) { layerVisible = { AdcdLayer: true, RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, FzdxLayer: false, WataLayer: false, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = !!SLGC_TYPES[key]; }); } else if (id === 3) { layerVisible = { AdcdLayer: true, RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, FzdxLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = !SLGC_TYPES[key]; }); } else if (id === 4) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 5) { layerVisible = { RealDrpLayer: true, RealHDLayer: false, RealSkLayer: true, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 6) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, RainDrpLayer: true, ShuikuLayer: false, BxSkLayer: true, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, RealHDLayerQ2: true, RealSkLayerQ2: true }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 7) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: true, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 201) { layerVisible = { RealDrpLayer: true, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 202) { layerVisible = { RealDrpLayer: false, RealHDLayer: true, RealSkLayer: true, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 203) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, BxjcLayer: false, SyjcLayer: false, SljcLayer: false, ByjcLayer: false }; dispatch.runtime.setCameraTarget({ center: [114.88069, 31.171967], zoom: 12, pitch: 60, bearing: 0 }); Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 204) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, PicStLayer: true, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 205) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: true, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 206) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, XunchaLayer: true, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 200) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 301) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, ShuichangLayer: true, ShuiyuandiLayer: false, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 302) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, ShuichangLayer: true, ShuichangQLayer: true, ShuiyuandiQLayer: true, ShuizhiLayer: true, ShuiyuandiLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 303 || id === 305 || id === 306) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, ShuichangLayer: true, ShuichangQLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 303 || id === 306 || id === 305) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id === 307) { layerVisible = { RealDrpLayer: false, RealHDLayer: true, RealSkLayer: true, BxSkLayer: false, FzdxLayer: false, WataLayer: false, AdcdLayer: true, RoadLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id == 501) { layerVisible = { RealDrpLayer: true, RealHDLayer: true, RealSkLayer: true, ShuiZhaLayer: true, BzLayer: true, SbLayer: true, QdLayer: true, ShuizhiLayer: true, TrsqLayer: true, AdcdLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id == 504) { layerVisible = { RealDrpLayer: true, TrsqLayer: true, AdcdLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id == 505) { layerVisible = { BzLayer: true, SbLayer: true, QdLayer: true, ShuizhiLayer: true, AdcdLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { layerVisible['Dcpj_' + key + 'Layer'] = false; }); } else if (id == 506 || id == 507) { layerVisible = { AdcdLayer: true, RivlLayer: true, }; Object.keys(DCPJ_TYPES).forEach(key => { if (key == 'bsnssinfo') { layerVisible['Dcpj_' + key + 'Layer'] = true; } else { layerVisible['Dcpj_' + key + 'Layer'] = false; } }); } dispatch.runtime.setLayerSetting({ contour: null, dem: undefined }) dispatch.map.setRaw({ layerVisible, view: id }); dispatch.runtime.setFeaturePop(null); if (id === 8) { dispatch.rcview.showRealContour('h24') } else { dispatch.runtime.setLayerSetting({ contour: null, dem: undefined }); dispatch.runtime.setLayerSetting({ planeArea: null }); dispatch.map.setLayerVisible({ ContourLayer: false }); } if (id === 201) { dispatch.map.setLayerSetting({ dom: false }); map.setLayoutProperty('热力图', 'visibility', 'visible'); } else { // dispatch.map.setLayerSetting({dom: true}); map.setLayoutProperty('热力图', 'visibility', 'none'); } if (id === 306) { dispatch.map.setLayerSetting({ dom: false }); dispatch.runtime.setShowGw(true) // map.setLayoutProperty('管网图', 'visibility', 'visible'); } else { dispatch.runtime.setShowGw(false) // dispatch.map.setLayerSetting({dom: true}); // map.setLayoutProperty('管网图', 'visibility', 'none'); } if (id === 503 || id == 501 || id == 504 || id == 505 || id == 506 || id == 507) { dispatch.map.setLayerSetting({ dom: false }); map.setLayoutProperty('灌区图', 'visibility', 'visible'); } else { // dispatch.map.setLayerSetting({dom: true}); map.setLayoutProperty('灌区图', 'visibility', 'none'); } if (id != 504) { dispatch.runtime.setYyfa({}) } if ( id === 3 || id === 203 || id === 205 || id === 206 ) { dispatch.map.setLayerSetting({ dom: true }); // map.setLayoutProperty('卫星图', 'visibility', 'visible'); } else { dispatch.map.setLayerSetting({ dom: false }); // map.setLayoutProperty('卫星图', 'visibility', 'none'); } if (id == 203) { const skdata = [ { "stcd": "61614200", "type": "sk", "hasRz": true, "stnm": "浮桥河水库", "adcd": "421181100000", "wscd": null, "importancy": 0, "lgtd": 114.875, "lttd": 31.166667, "elev": 0, "damel": 71.33, "dsflz": 68.04, "fsltdz": 64.89, "ddz": 51.78, "zcxsw": 64.89, "drpTm": "2025-06-03T02:00:00.000Z", "today": 0, "h1": 5, "h3": 6, "h6": 7.5, "h12": 8, "h24": 9, "h48": 26, "drpState": 1, "rz": 60.71, "w": 162.8, "a_fsltdz": -4.18, "rzTm": "2025-06-03T02:00:00.000Z", "rzWarning": 0, "rzState": 1, "aRz": -4.18 }, { "stcd": "61613010", "type": "sk", "hasRz": true, "stnm": "明山水库", "adcd": "421181103000", "wscd": null, "importancy": 0, "lgtd": 115.066667, "lttd": 31.016667, "elev": 0, "damel": 98.7, "dsflz": 96.07, "fsltdz": 93, "ddz": 78.02, "zcxsw": 93, "drpTm": "2025-06-03T02:00:00.000Z", "today": 0, "h1": 7, "h3": 8.4, "h6": 10.5, "h12": 11.200000000000001, "h24": 12.6, "h48": 25.799999999999997, "drpState": 1, "rz": 84.43, "w": 49.5, "a_fsltdz": -8.569999999999993, "rzTm": "2025-06-03T02:00:00.000Z", "rzWarning": 0, "rzState": 1, "aRz": -8.57 }, { "stcd": "61612610", "type": "sk", "hasRz": true, "stnm": "三河口水库", "adcd": "421181109000", "wscd": null, "importancy": 0, "lgtd": 115.166667, "lttd": 31.333333, "elev": 0, "damel": 156.8, "dsflz": 154.99, "fsltdz": 149, "ddz": 124, "zcxsw": 149, "drpTm": "2025-06-03T02:00:00.000Z", "today": 0, "h1": 7, "h3": 8.4, "h6": 10.5, "h12": 11.200000000000001, "h24": 12.6, "h48": 25.799999999999997, "drpState": 1, "rz": 141.45, "w": 77.8, "a_fsltdz": -7.550000000000011, "rzTm": "2025-06-03T01:00:00.000Z", "rzWarning": 0, "rzState": 1, "aRz": -7.55 }, { "stcd": "61612700", "type": "sk", "hasRz": true, "stnm": "碧绿河水库", "adcd": "421181109000", "wscd": null, "importancy": 0, "lgtd": 115.214444, "lttd": 31.299722, "elev": 0, "damel": 142.9, "dsflz": 139.08, "fsltdz": 137, "ddz": 105, "zcxsw": 137, "drpTm": "2025-06-03T02:00:00.000Z", "today": 0, "h1": 4, "h3": 4.8, "h6": 6, "h12": 6.4, "h24": 7.2, "h48": 22.6, "drpState": 1, "rz": 119.6, "w": 13.15, "a_fsltdz": -17.400000000000006, "rzTm": "2025-06-03T00:00:00.000Z", "rzWarning": 0, "rzState": 2, "aRz": -17.4 } ] const layer = map.getLayer('关联站点') if (layer) { map.removeLayer('关联站点'); map.removeSource('关联站点'); } map.addLayer({ 'id': '关联站点',//+new Date().getTime(), 'type': 'symbol', 'source': { 'type': 'geojson', 'data': { 'type': 'FeatureCollection', 'features': [], }, }, 'layout': { 'icon-allow-overlap': true, 'text-allow-overlap': true, 'icon-image': '水库-离线', 'icon-size': [ 'interpolate', ['linear'], ['zoom'], 10, 0.4, 14, 0.8, ], 'text-allow-overlap': true, 'text-size': [ 'interpolate', ['linear'], ['zoom'], 10, 10, 14, 14, ], 'text-font': ['Roboto Black'], 'text-field': [ 'step', ['zoom'], '', 12, ['get', 'stnm'] ], 'text-anchor': 'top', 'text-offset': [0, 1], }, 'paint': { 'text-color': '#fff' }, 'visibility': 'visible', }); map.getSource('关联站点').setData(parseGeoJSON(skdata)) } if(id!==200&&id!==203&&id!==205&&id!==206){ const layer = map.getLayer('临时水库tz') if(layer){ map.removeLayer('临时水库tz'); map.removeSource('临时水库tz'); } } } }) }; export default map;