From a3147c0d6f9a39e026b8598eb2bc14c84a96e465 Mon Sep 17 00:00:00 2001 From: Swanky <413564165@qq.com> Date: Sun, 7 Jan 2024 16:53:11 +0800 Subject: [PATCH] 1 --- public/config/app.json | 8 ++- src/components/Main/Content/index.js | 6 +- .../Main/Map/BusinessLayer/index.js | 62 +++++++++++++++++++ src/components/Main/Map/index.js | 8 ++- src/components/Main/Map/utils/helper.js | 8 +-- .../Main/components/Cdzy/CdzyFilter/index.js | 22 ++++++- src/components/Main/index.js | 11 +++- src/components/common/ZoneSelector/index.js | 10 +-- src/setupProxy.js | 6 ++ 9 files changed, 125 insertions(+), 16 deletions(-) create mode 100644 src/components/Main/Map/BusinessLayer/index.js diff --git a/public/config/app.json b/public/config/app.json index 4cadcd6..7590809 100644 --- a/public/config/app.json +++ b/public/config/app.json @@ -4,12 +4,18 @@ maximumLevel: 21, url: 'https://map.shuxitech.com/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}', // 多服务器使用 {s} 语法配合 subdomains 来用 subdomains: [0, 1, 2, 3, 4, 5, 6, 7] - }, + }, initExtent: [ 101.86701132942844, 30.431779754918296, 103.7517428402498, 33.31724803784266 ], zoneLayerOpt: { geoserverRoot: 'geoserver2', layerName: 'ne:c_area' + }, + layers: { + cdzy: { + // 草地资源 + layerName: 'yzt:t_grassland_result' + } } } diff --git a/src/components/Main/Content/index.js b/src/components/Main/Content/index.js index a788e6e..614d2da 100644 --- a/src/components/Main/Content/index.js +++ b/src/components/Main/Content/index.js @@ -108,7 +108,9 @@ export default function Content(props) { { if (current === item.key) { setCurrent(null) + props?.onLayerChange?.(null); } else { + props?.onLayerChange?.(item.key); setCurrent(item.key); } setFilterVisible(false) @@ -130,7 +132,9 @@ export default function Content(props) { { setFilterVisible(false) }} > - {Filter && } + {Filter && { + props?.onFilterChange?.(filterStr) + }} />}
{ + // if (viewer) { + // cacheLayers.forEach(layer => { + // layer.layerInstance.show = false; + // }) + // if (layerKey) { + // const layerOpt = layers[layerKey]; + // const cacheLayer = cacheLayers.find(l => l.key === layerKey); + // if (cacheLayer) { + // cacheLayer.layerInstance.show = true + // } else if (layerOpt) { + // cacheLayers.push({ + // key: layerKey, + // layerInstance: addGeoserverLayer({ + // layerName: layerOpt.layerName, + // extent: initExtent, + // viewer, + // isWms: true + // }) + // }) + // } + // } + // } + + // }, [layerKey, layers, viewer, initExtent]) + + useEffect(() => { + if (viewer && layerKey) { + const layerOpt = layers[layerKey]; + const cacheLayer = cacheLayers.find(l => l.key === layerKey); + if (cacheLayer) { + viewer.imageryLayers.remove(cacheLayer.layerInstance); + _.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]) + + return <> + + ; +} \ No newline at end of file diff --git a/src/components/Main/Map/index.js b/src/components/Main/Map/index.js index e68449b..b7128dd 100644 --- a/src/components/Main/Map/index.js +++ b/src/components/Main/Map/index.js @@ -3,6 +3,7 @@ import { MapContext } from './MapContext'; import GlobalContext from '../../../utils/GlobalContext'; import ImageLayer from './ImageLayer'; import ZoneLayer from './ZoneLayer'; +import BusinessLayer from './BusinessLayer'; const Cesium = window.Cesium; const turf = window.turf; @@ -56,7 +57,7 @@ export default function Map(props) { viewer.scene.screenSpaceCameraController.enableCollisionDetection = true; // viewer.scene.skyAtmosphere.show = false // viewer.scene.screenSpaceCameraController.minimumZoomDistance = props.minimumZoomDistance || 1000; - viewer.scene.screenSpaceCameraController.maximumZoomDistance = 50000; + // viewer.scene.screenSpaceCameraController.maximumZoomDistance = 50000; viewer.camera.setView({ // 设置相机位置 @@ -77,7 +78,9 @@ export default function Map(props) { }, []) return
+
; } \ No newline at end of file diff --git a/src/components/Main/Map/utils/helper.js b/src/components/Main/Map/utils/helper.js index 8cd6c6c..ed6b03f 100644 --- a/src/components/Main/Map/utils/helper.js +++ b/src/components/Main/Map/utils/helper.js @@ -44,16 +44,16 @@ export const addPolyline = ({ features, viewer }) => { }) } -export const addGeoserverLayer = ({ layerName, extent, isWms, viewer, geoserverRoot = 'geoserver' }) => { +export const addGeoserverLayer = ({ layerName, extent, isWms, viewer, geoserverRoot = 'geoserver', cql_filter = '1=1' }) => { let layer; if (isWms) { - let imageryProvider = new Cesium.WebMapServiceImageryProvider({ - url: `/${geoserverRoot}/ne/wms`, + let imageryProvider = window.testWms = new Cesium.WebMapServiceImageryProvider({ + url: `/${geoserverRoot}/yzt/wms`, layers: layerName, tileWidth: 256, tileHeight: 256, enablePickFeatures: false, - parameters: { transparent: true, format: 'image/png' }, + parameters: { transparent: true, format: 'image/png', cql_filter }, version: '1.1.0' }); diff --git a/src/components/Main/components/Cdzy/CdzyFilter/index.js b/src/components/Main/components/Cdzy/CdzyFilter/index.js index 2a4db36..02b474a 100644 --- a/src/components/Main/components/Cdzy/CdzyFilter/index.js +++ b/src/components/Main/components/Cdzy/CdzyFilter/index.js @@ -1,4 +1,4 @@ -import { Col, Divider, Form, Radio, Row, Select } from 'antd'; +import { Button, Col, Divider, Form, Radio, Row, Select } from 'antd'; import { useState, useEffect } from 'react' import ZoneSelector from '../../../../common/ZoneSelector'; import CdzyApi from '../../../../../utils/apis/CdzyApi'; @@ -88,5 +88,25 @@ export default function CdzyFilter(props) { + + + ; } \ No newline at end of file diff --git a/src/components/Main/index.js b/src/components/Main/index.js index 4950051..8987197 100644 --- a/src/components/Main/index.js +++ b/src/components/Main/index.js @@ -18,6 +18,9 @@ export default function Main(props) { const rootRef = useRef(); const size = useSize(rootRef) + const [layerKey, setLayerKey] = useState(); + const [filterStr, setFilterStr] = useState(); + useEffect(() => { // let screenSize = defaultSize; // if (!screenSize) { @@ -53,7 +56,7 @@ export default function Main(props) { }, [size]); return
- + {style &&
- + { + setLayerKey(key) + }} onFilterChange={str=>{ + setFilterStr(str) + }}/>
}
; diff --git a/src/components/common/ZoneSelector/index.js b/src/components/common/ZoneSelector/index.js index a038322..5025eca 100644 --- a/src/components/common/ZoneSelector/index.js +++ b/src/components/common/ZoneSelector/index.js @@ -6,9 +6,9 @@ export default function ZoneSelector(props) { const { value, onChange } = props; const [firstDatas, setFirstDatas] = useState([]); - const [firstValue, setFirstValue] = useState(null); + const [firstValue, setFirstValue] = useState("-1"); const [secDatas, setSecDatas] = useState([]); - const [secValue, setSecValue] = useState(null); + const [secValue, setSecValue] = useState("-1"); useEffect(() => { CommonApi.area().then(resp => { @@ -29,13 +29,13 @@ export default function ZoneSelector(props) { return - {firstValue !== null && { setSecValue(value); if (value) { onChange?.(value); diff --git a/src/setupProxy.js b/src/setupProxy.js index 7ee871c..1e6c146 100644 --- a/src/setupProxy.js +++ b/src/setupProxy.js @@ -21,4 +21,10 @@ module.exports = function (app) { pathRewrite: { '^/geoserver2': '/geoserver' } }) ) + app.use( + proxy('/geoserver', { + "target": "http://47.109.60.82:8080", + changeOrigin: true + }) + ) } \ No newline at end of file