|
|
|
@ -3,12 +3,14 @@ import { MapContext } from '../MapContext'; |
|
|
|
import GlobalContext from '../../../../utils/GlobalContext'; |
|
|
|
import GlobalContext from '../../../../utils/GlobalContext'; |
|
|
|
import { addGeoserverLayer } from '../utils/helper'; |
|
|
|
import { addGeoserverLayer } from '../utils/helper'; |
|
|
|
import _ from 'lodash'; |
|
|
|
import _ from 'lodash'; |
|
|
|
|
|
|
|
import { Checkbox } from 'antd'; |
|
|
|
|
|
|
|
import './index.less'; |
|
|
|
const cacheLayers = []; |
|
|
|
const cacheLayers = []; |
|
|
|
export default function BusinessLayer(props) { |
|
|
|
export default function BusinessLayer(props) { |
|
|
|
|
|
|
|
|
|
|
|
const { layerKey, viewer, filterStr } = useContext(MapContext); |
|
|
|
const { layerKey, viewer, filterStr } = useContext(MapContext); |
|
|
|
const { layers, initExtent } = useContext(GlobalContext); |
|
|
|
const { layers, initExtent } = useContext(GlobalContext); |
|
|
|
|
|
|
|
const [currentLegends, setCurrentLegends] = useState([]); |
|
|
|
// useEffect(() => {
|
|
|
|
// useEffect(() => {
|
|
|
|
// if (viewer) {
|
|
|
|
// if (viewer) {
|
|
|
|
// cacheLayers.forEach(layer => {
|
|
|
|
// cacheLayers.forEach(layer => {
|
|
|
|
@ -36,27 +38,96 @@ export default function BusinessLayer(props) { |
|
|
|
// }, [layerKey, layers, viewer, initExtent])
|
|
|
|
// }, [layerKey, layers, viewer, initExtent])
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
useEffect(() => { |
|
|
|
if (viewer && layerKey) { |
|
|
|
if (viewer) { |
|
|
|
const layerOpt = layers[layerKey]; |
|
|
|
cacheLayers.forEach(layer => { |
|
|
|
const cacheLayer = cacheLayers.find(l => l.key === layerKey); |
|
|
|
viewer.imageryLayers.remove(layer.layerInstance); |
|
|
|
if (cacheLayer) { |
|
|
|
}); |
|
|
|
viewer.imageryLayers.remove(cacheLayer.layerInstance); |
|
|
|
|
|
|
|
_.remove(cacheLayers, item => item.key === layerKey); |
|
|
|
setCurrentLegends([]) |
|
|
|
} |
|
|
|
if (layerKey) { |
|
|
|
cacheLayers.push({ |
|
|
|
const layerOpt = layers[layerKey]; |
|
|
|
key: layerKey, |
|
|
|
const cacheLayer = cacheLayers.find(l => l.key === layerKey); |
|
|
|
layerInstance: addGeoserverLayer({ |
|
|
|
if (!layerOpt) { |
|
|
|
layerName: layerOpt.layerName, |
|
|
|
return; |
|
|
|
extent: initExtent, |
|
|
|
} |
|
|
|
viewer, |
|
|
|
if (layerOpt?.legends) { |
|
|
|
isWms: true, |
|
|
|
setCurrentLegends(layerOpt?.legends) |
|
|
|
cql_filter: filterStr || '1=1' |
|
|
|
} |
|
|
|
|
|
|
|
if (cacheLayer) { |
|
|
|
|
|
|
|
_.remove(cacheLayers, item => item.key === layerKey); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
cacheLayers.push({ |
|
|
|
|
|
|
|
key: layerKey, |
|
|
|
|
|
|
|
layerInstance: addGeoserverLayer({ |
|
|
|
|
|
|
|
layerName: layerOpt.layerName, |
|
|
|
|
|
|
|
extent: initExtent, |
|
|
|
|
|
|
|
viewer, |
|
|
|
|
|
|
|
isWms: true, |
|
|
|
|
|
|
|
cql_filter: filterStr || '1=1' |
|
|
|
|
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}, [layerKey, filterStr, viewer, layers, initExtent]) |
|
|
|
}, [layerKey, filterStr, viewer, layers, initExtent]) |
|
|
|
|
|
|
|
|
|
|
|
return <> |
|
|
|
return <div className='business-layer' > |
|
|
|
|
|
|
|
{currentLegends?.length > 0 && <div className='legend-content' style={{ |
|
|
|
</>; |
|
|
|
marginTop: 12, |
|
|
|
|
|
|
|
padding: 0, |
|
|
|
|
|
|
|
width: 'auto', |
|
|
|
|
|
|
|
right: 500, |
|
|
|
|
|
|
|
position: 'absolute', |
|
|
|
|
|
|
|
bottom: 20 |
|
|
|
|
|
|
|
}}> |
|
|
|
|
|
|
|
<div style={{ |
|
|
|
|
|
|
|
textAlign: "center", |
|
|
|
|
|
|
|
padding: 5, |
|
|
|
|
|
|
|
background: "#0D1923" |
|
|
|
|
|
|
|
}}>图例</div> |
|
|
|
|
|
|
|
<div className='layout-v' style={{ |
|
|
|
|
|
|
|
// marginTop: 8,
|
|
|
|
|
|
|
|
padding: "8px 24px" |
|
|
|
|
|
|
|
}}> |
|
|
|
|
|
|
|
{currentLegends?.map(legend => { |
|
|
|
|
|
|
|
let node = <div className='layout-h center layer-item'> |
|
|
|
|
|
|
|
<div className='layout-v center j-center' style={{ |
|
|
|
|
|
|
|
width: 24, |
|
|
|
|
|
|
|
}}> |
|
|
|
|
|
|
|
<div className='circle-legend' style={{ |
|
|
|
|
|
|
|
background: legend.fillColor, |
|
|
|
|
|
|
|
border: "1px solid " + legend.strokeColor |
|
|
|
|
|
|
|
}}></div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<div>{legend.name}</div> |
|
|
|
|
|
|
|
</div>; |
|
|
|
|
|
|
|
if (legend.image) { |
|
|
|
|
|
|
|
node = <div className='layout-h center layer-item'> |
|
|
|
|
|
|
|
<div className='layout-v center j-center' style={{ |
|
|
|
|
|
|
|
width: 24, |
|
|
|
|
|
|
|
}}> |
|
|
|
|
|
|
|
<img src={legend.image.src} alt="" style={{ |
|
|
|
|
|
|
|
width: 16 |
|
|
|
|
|
|
|
}} /> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<div>{legend.name}</div> |
|
|
|
|
|
|
|
</div>; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return <div key={legend.name} className='layout-h center' style={{ |
|
|
|
|
|
|
|
fontSize: 12, |
|
|
|
|
|
|
|
// fontStyle: "italic",
|
|
|
|
|
|
|
|
// marginLeft: 25,
|
|
|
|
|
|
|
|
color: "#ffffff" |
|
|
|
|
|
|
|
}}> |
|
|
|
|
|
|
|
<div className='rect-legend' style={{ |
|
|
|
|
|
|
|
background: legend.fillColor, |
|
|
|
|
|
|
|
border: `1px solid ${legend.strokeColor}` |
|
|
|
|
|
|
|
}}></div> |
|
|
|
|
|
|
|
<div style={{ |
|
|
|
|
|
|
|
marginLeft: 8 |
|
|
|
|
|
|
|
}}>{legend.name}</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
})} |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div>} |
|
|
|
|
|
|
|
</div>; |
|
|
|
} |
|
|
|
} |