Commit 4ec88f96 authored by xuchaozou's avatar xuchaozou

perf: 优化前端出图样式文件

parent 5b24ea2e
Pipeline #96431 waiting for manual action with stages
...@@ -96,9 +96,9 @@ ...@@ -96,9 +96,9 @@
"@wisdom-cesium/krpano": "^1.0.29-60", "@wisdom-cesium/krpano": "^1.0.29-60",
"@wisdom-map/arcgismap":"^2.0.97", "@wisdom-map/arcgismap":"^2.0.97",
"@wisdom-map/basemap":"^2.0.4", "@wisdom-map/basemap":"^2.0.4",
"@wisdom-map/gis-component": "^1.0.38", "@wisdom-map/gis-component": "^1.0.46",
"@wisdom-map/gis-utils": "^1.0.33", "@wisdom-map/gis-utils": "^1.0.41",
"@wisdom-map/pd-map": "^1.0.131", "@wisdom-map/pd-map": "^1.0.140",
"@wisdom-utils/components": "0.1.337", "@wisdom-utils/components": "0.1.337",
"@wisdom-utils/utils": "0.1.377", "@wisdom-utils/utils": "0.1.377",
"ace-builds": "^1.4.12", "ace-builds": "^1.4.12",
......
...@@ -218,18 +218,33 @@ const VectorData = props => { ...@@ -218,18 +218,33 @@ const VectorData = props => {
mapServerName mapServerName
}) })
if(!vectorData) return if(!vectorData) return
const metaData = await getMetaData({mapServerName})
if(!metaData) return
let isChange = handleDataLayer({
schemes,
vectorData,
metaData
})
const isFilterField = getDataIsFilterField({ const isFilterField = getDataIsFilterField({
schemes, schemes,
vectorData vectorData
}) })
if(!isFilterField) return if(isFilterField) {
const metaData = await getMetaData({mapServerName}) const isUpdateFile = updateVectorFileds({
if(!metaData) return
await updateVectorFileds({
metaData, metaData,
schemes, schemes,
vectorData vectorData
}) })
if(isUpdateFile) {
isChange = true
}
}
if(isChange) {
const result = await AddStyleConfigJson({
fileName : "StyleConfig",
preventCache : Date.now()
}, vectorData)
}
} catch (error) { } catch (error) {
console.log(error) console.log(error)
} }
...@@ -258,6 +273,81 @@ const VectorData = props => { ...@@ -258,6 +273,81 @@ const VectorData = props => {
return null return null
} }
const handleDataLayer = ({
schemes,
vectorData,
metaData
}) => {
let isChange = false
schemes.map(scheme => {
const data = vectorData.data[`${scheme.schemename}-${scheme.id}`]
data.map(item => {
const {params, url} = parseUrlQueryParams({
url : item.style.sources.osm.tiles[0]
})
const layerNameArr = params.layerNames.split(",")
const outfields = params.outfields.split(";")
if(layerNameArr.length != outfields.length) return
const newLayerNameArr = [], deleteIndexArr = []
for(let i = 0; i < item.style.layers.length ; i++) {
const layer = item.style.layers[i]
const hasLayer = metaData.find(item => item.name == layer['source-layer'])
if(hasLayer) {
!newLayerNameArr.includes(hasLayer.name) && newLayerNameArr.push(hasLayer.name)
} else {
}
}
if(newLayerNameArr.length == layerNameArr.length) return
isChange = true
const newOutfields = newLayerNameArr.map(name => {
const index = layerNameArr.findIndex(a => a == name)
if(index == -1) {
const outFiled = getLayerFilterOutFields({
item,
name,
metaLayer : metaData.find(item => item.name == name)
})
return outFiled
}
return outfields[index]
})
item.style.sources.osm.tiles[0] = queryParamsToUrl({
url,
params : {
...params,
layerNames : newLayerNameArr.join(","),
outfields : newOutfields.join(";")
}
})
})
})
return isChange
}
const getLayerFilterOutFields = ({item, name, metaLayer}) => {
const layers = item.style.layers.filter(a => a['source-layer'] == name)
const outFileds = new Set()
layers.map(layer => {
const parseField = VectorUtils.filterFieldsHandle({
layerItem : layer,
outfields : null,
layerFields : []
})
if((parseField && parseField.sqlObj && parseField.sqlObj.length > 0)) {
parseField.sqlObj.filter(item => {
return metaLayer.fields.find(field => field.name == item.label)
}).map(item => outFileds.add(item.label))
}
extractBraceContentsRegex(layer?.layout?.['text-field'])?.filter(fieldName => {
return (metaLayer.fields.find(item => item.name == fieldName))
})?.map(item => {
outFileds.add(item)
})
})
return Array.from(outFileds).join(",")
}
const getDataIsFilterField = ({ const getDataIsFilterField = ({
schemes, schemes,
vectorData vectorData
...@@ -280,7 +370,7 @@ const VectorData = props => { ...@@ -280,7 +370,7 @@ const VectorData = props => {
return Array.isArray(data) ? data : null return Array.isArray(data) ? data : null
} }
const updateVectorFileds = async ({metaData , schemes, vectorData}) => { const updateVectorFileds = ({metaData , schemes, vectorData}) => {
let isUpdateFile = false let isUpdateFile = false
schemes.map(scheme => { schemes.map(scheme => {
const data = vectorData.data[`${scheme.schemename}-${scheme.id}`] const data = vectorData.data[`${scheme.schemename}-${scheme.id}`]
...@@ -288,18 +378,26 @@ const VectorData = props => { ...@@ -288,18 +378,26 @@ const VectorData = props => {
data.map(({style}) => { data.map(({style}) => {
const setFilterCollection = new Map() const setFilterCollection = new Map()
const setLayerCollection = new Set() const setLayerCollection = new Set()
const {params} = parseUrlQueryParams({
url : style.sources.osm.tiles[0]
})
style.layers.map(layer => { style.layers.map(layer => {
let isHandle = true
const metaLayer = metaData.find(item => item.name == layer['source-layer']) const metaLayer = metaData.find(item => item.name == layer['source-layer'])
if(!metaLayer) { if(!metaLayer) {
if( params.layerNames.indexOf(layer['source-layer']) > -1) {
setLayerCollection.add(layer['source-layer']) setLayerCollection.add(layer['source-layer'])
return return
} else {
isHandle = false
}
} }
handleFilterField({ isHandle && handleFilterField({
layer, layer,
setFilterCollection, setFilterCollection,
metaLayer metaLayer
}) })
handleLayoutTextField({ isHandle && handleLayoutTextField({
layer, layer,
setFilterCollection, setFilterCollection,
metaLayer metaLayer
...@@ -319,17 +417,8 @@ const VectorData = props => { ...@@ -319,17 +417,8 @@ const VectorData = props => {
} }
}) })
updateStyle(data) updateStyle(data)
if(data.length == 0) {
delete vectorData.data[`${scheme.schemename}-${scheme.id}`]
}
}) })
if(isUpdateFile) { return isUpdateFile
const result = await AddStyleConfigJson({
fileName : "StyleConfig",
preventCache : Date.now()
}, vectorData)
return result && result.code == 0 ? true : false
}
} }
const handleFilterField = ({ const handleFilterField = ({
...@@ -358,12 +447,7 @@ const VectorData = props => { ...@@ -358,12 +447,7 @@ const VectorData = props => {
} }
} }
const handleLayoutTextField = ({ const extractBraceContentsRegex = str => {
layer,
setFilterCollection,
metaLayer
}) => {
function extractBraceContentsRegex(str) {
const regex = /\{([^}]+)\}/g; const regex = /\{([^}]+)\}/g;
const contents = []; const contents = [];
let match; let match;
...@@ -372,6 +456,12 @@ const VectorData = props => { ...@@ -372,6 +456,12 @@ const VectorData = props => {
} }
return contents; return contents;
} }
const handleLayoutTextField = ({
layer,
setFilterCollection,
metaLayer
}) => {
const data = extractBraceContentsRegex(layer?.layout?.['text-field'])?.filter(fieldName => { const data = extractBraceContentsRegex(layer?.layout?.['text-field'])?.filter(fieldName => {
return !(metaLayer.fields.find(item => item.name == fieldName)) return !(metaLayer.fields.find(item => item.name == fieldName))
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment