From 0222749d20ddc0c612c1cb1f1757f68b4ad566cc Mon Sep 17 00:00:00 2001 From: caoqi Date: Mon, 24 Feb 2025 13:29:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E8=B6=85=E5=9B=BE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9C=8D=E5=8A=A1=E5=92=8C=E5=9C=B0=E5=9B=BE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=B8=8D=E5=85=BC=E5=AE=B9=E6=97=B6=E7=89=B9=E6=AE=8A?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/aiSupervision/layerConfigApi.js | 59 +++++++++---- .../layerManage/resource/LayerDetails.vue | 1 + .../reservoir/safeOperation/js/mapUtils.js | 82 ++++++++++++------- 3 files changed, 96 insertions(+), 46 deletions(-) diff --git a/src/api/aiSupervision/layerConfigApi.js b/src/api/aiSupervision/layerConfigApi.js index 604ed09..d9bdffa 100644 --- a/src/api/aiSupervision/layerConfigApi.js +++ b/src/api/aiSupervision/layerConfigApi.js @@ -176,7 +176,8 @@ export function queryServiceInfoApi(url, layer) { return new Promise(async (resolve, reject) => { const result = await axios.get(`${url}.json`); if (result.status === 200 && result.data) { - const layerId = result.data.layers.find((f) => f.parentLayerId === -1)?.subLayerIds?.[0]; + const layerId = result.data.layers.find((f) => f.parentLayerId === -1) + ?.subLayerIds?.[0]; const data = await axios.get(`${url}/${layerId}?f=json`); if (data.status === 200 && data.data) { resolve(data.data); @@ -186,30 +187,58 @@ export function queryServiceInfoApi(url, layer) { } case "081100": return new Promise(async (resolve, reject) => { + // layer.name的规则:xxx;xxx:xxx const name = layer.name; - const nameArr = name.split(":"); + let nameArr = name.split(";"); const splitUrl = url?.split("/rest/")[0]; const token = layer.token; - const newUrl = `${splitUrl.replace("/map-", "/data-")}/rest/data/datasources/${nameArr[0]}/datasets/${nameArr[1]}/fields.json?k=${token}`; - const result = await axios.get(newUrl); - if (result.status === 200 && result.data) { - const fields = result.data.fieldNames.map((item) => { - return { - name: item, - alias: item, - type: "-", - }; - }); - resolve({ fields }); + if (nameArr.length === 1) { + const newUrl = `${splitUrl.replace( + "/map-", + "/data-" + )}/rest/data/datasources/${nameArr[0]}/datasets/${ + nameArr[1] + }/fields.json?k=${token}`; + const result = await axios.get(newUrl); + if (result.status === 200 && result.data) { + const fields = result.data.fieldNames.map((item) => { + return { + name: item, + alias: item, + type: "-", + }; + }); + resolve({ fields }); + } + } else if (nameArr.length === 2) { + let layerName = nameArr[1]; + nameArr = layerName.split(":"); + const newUrl = `${nameArr[1]}/rest/data/datasources/${nameArr[0]}/datasets/${nameArr[1]}/fields.json?k=${token}`; + const result = await axios.get(newUrl); + if (result.status === 200 && result.data) { + const fields = result.data.fieldNames.map((item) => { + return { + name: item, + alias: item, + type: "-", + }; + }); + resolve({ fields }); + } else { + reject("请求失败"); + } } }); case "030300": return new Promise(async (resolve, reject) => { const result = await axios.get( - `${url}?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=${layer.index}`, + `${url}?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=${layer.index}` ); if (result.status === 200 && result.data) { - const xmlDom = new window.DOMParser().parseFromString(result.data, "text/xml"); + const xmlDom = new window.DOMParser().parseFromString( + result.data, + "text/xml" + ); const elements = xmlDom.getElementsByTagName("xs:element"); let fields = []; for (let i = 0; i < elements.length; i++) { diff --git a/src/views/aiSupervision/layerManage/resource/LayerDetails.vue b/src/views/aiSupervision/layerManage/resource/LayerDetails.vue index f660a29..506b0f5 100644 --- a/src/views/aiSupervision/layerManage/resource/LayerDetails.vue +++ b/src/views/aiSupervision/layerManage/resource/LayerDetails.vue @@ -48,6 +48,7 @@ prop="serviceName" style="font-size: 1rem" :label-width="'120px'" + placeholder="服务名称由两部分构成:数据服务url(如/iserver/services/data-supermap_shuili/rest);服务名称(如namespace:layer1)" > { + "021102": async (params) => { return new Promise(async (resolve, reject) => { - const { url, input_geometry, geometry_type, layers = 'all', returnGeometry = false, tolerance = 1 } = params; + const { + url, + input_geometry, + geometry_type, + layers = "all", + returnGeometry = false, + tolerance = 1, + } = params; const result = await axios.get(`${url}.json`); if (result.status === 200 && result.data) { const { xmin, ymin, xmax, ymax } = result.data.fullExtent; @@ -19,13 +26,29 @@ const identifyLayerActions = { } }); }, - '030300': async (params) => { + "030300": async (params) => { console.log(params); }, - '081100': async (params) => { + "081100": async (params) => { return new Promise(async (resolve, reject) => { - const { queryMode, bufferDistance, geometry, url, layerTable, layerName, k } = params; - const queryUrl = url.split('maps/')[0].replace('map-', 'data-'); + const { + queryMode, + bufferDistance, + geometry, + url, + layerTable, + layerName, + k, + } = params; + // const queryUrl = url.split('maps/')[0].replace('map-', 'data-'); + let queryUrl = ""; + if (layerName.split(";").length == 1 && layerName.includes(":")) { + queryUrl = url.split("maps/")[0].replace("map-", "data-"); + } else if (layerName.split(";").length == 2 && layerName.includes(":")) { + let dataServiceLayerInfo = layerName.split(";"); + queryUrl = dataServiceLayerInfo[0]; + layerName = dataServiceLayerInfo[1]; + } let requestUrl = `${queryUrl}data/featureResults.rjson?returnContent=true`; if (k) { requestUrl += `&k=${k}`; @@ -36,47 +59,46 @@ const identifyLayerActions = { datasetNames: [layerTable || layerName], getFeatureMode: queryMode, bufferDistance, - geometry + geometry, }), { headers: { - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' - } + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + }, } ); resolve(result); }); - } + }, }; export const queryLayersByPos = (position, layerList = [], cb) => { - const { lng, lat } = position; - const layers = layerList + const layers = layerList; layers.forEach(async (layer) => { const action = identifyLayerActions[layer.layerType]; switch (layer.layerType) { - case '021102': { + case "021102": { const input_geometry = `${lng},${lat}`; - const geometry_type = 'esriGeometryPoint'; + const geometry_type = "esriGeometryPoint"; const result = await action({ input_geometry, geometry_type, - url: layer.url + url: layer.url, }); let res; if (result?.results?.length > 0) { - res = result.results[0] + res = result.results[0]; } - if(cb) cb(res) + if (cb) cb(res); break; } - case '030300': + case "030300": break; - case '081100': { - const queryMode = 'BUFFER'; + case "081100": { + const queryMode = "BUFFER"; const bufferDistance = 0.0005; // 缓冲距离大概是50米 - const spatialQueryMode = 'INTERSECT'; + const spatialQueryMode = "INTERSECT"; const geometry = { id: 0, style: null, @@ -84,17 +106,16 @@ export const queryLayersByPos = (position, layerList = [], cb) => { points: [ { x: lng, - y: lat - } + y: lat, + }, ], - type: 'POINT' + type: "POINT", }; - let type = ''; + let type = ""; let isSite = false; - let layerTable = ''; + let layerTable = ""; if (layer.extendData) { const extendData = JSON.parse(layer.extendData); - } const result = await action({ queryMode, @@ -104,11 +125,10 @@ export const queryLayersByPos = (position, layerList = [], cb) => { layerName: layer.text, layerTable, url: layer.url, - k: layer.serviceToken + k: layer.serviceToken, }); if ([200, 201].includes(result.status)) { - console.log('处理业务数据 >>>>>> ', result) - + console.log("处理业务数据 >>>>>> ", result); } break; } From 844c8c0e819f5e6b7e619d17487af2b2c7107598 Mon Sep 17 00:00:00 2001 From: caoqi Date: Mon, 24 Feb 2025 14:07:14 +0800 Subject: [PATCH 2/2] feat: ~ --- src/views/reservoir/safeOperation/js/mapUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/reservoir/safeOperation/js/mapUtils.js b/src/views/reservoir/safeOperation/js/mapUtils.js index 7369c07..59036ef 100644 --- a/src/views/reservoir/safeOperation/js/mapUtils.js +++ b/src/views/reservoir/safeOperation/js/mapUtils.js @@ -31,7 +31,7 @@ const identifyLayerActions = { }, "081100": async (params) => { return new Promise(async (resolve, reject) => { - const { + let { queryMode, bufferDistance, geometry,