import { parseGeoJSONFeature } from "../../utils/tools"; import { DCPJ_TYPES, SLGC_TYPES } from "../../views/Home/consts"; 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 === 0 || id === 1 || id ==501 || id == 504 || id == 507 || id == 506) { layerVisible = { RealDrpLayer: true, RealHDLayer: true, RealSkLayer: true, AdcdLayer: true, PicStLayer: true, 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: true, PicStLayer: true, RivlLayer: true, YuwaiLayer: true, WataLayer: false, } 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 || id === 5) { 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 === 6) { layerVisible = { RealDrpLayer: false, RealHDLayer: false, RealSkLayer: false, BxSkLayer: 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 === 201) { layerVisible = { RealDrpLayer: true, RealHDLayer: true, 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; }); } dispatch.runtime.setLayerSetting({ contour: null, dem: undefined }) dispatch.map.setRaw({ layerVisible, view: id }); dispatch.runtime.setFeaturePop(null); if(id===201){ map.setLayoutProperty('热力图', 'visibility', 'visible'); }else{ map.setLayoutProperty('热力图', 'visibility', 'none'); } } }) }; export default map;