import axios from "axios"; const identifyLayerActions = { "021102": async (params) => { return new Promise(async (resolve, reject) => { 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; const mapExtent = `${xmin},${ymin},${xmax},${ymax}`; const data = await axios.get( `${url}/identify?geometry=${input_geometry}&geometryType=${geometry_type}&layers=${layers}&returnGeometry=${returnGeometry}&mapExtent=${mapExtent}&imageDisplay=600,550,96&tolerance=${tolerance}&out_fields=*&f=json` ); if (data.status === 200 && data.data) { resolve(data.data); } else { resolve(null); } } }); }, "030300": async (params) => { console.log(params); }, "081100": async (params) => { return new Promise(async (resolve, reject) => { let { 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}`; } const result = await axios.post( requestUrl, JSON.stringify({ datasetNames: [layerTable || layerName], getFeatureMode: queryMode, bufferDistance, geometry, }), { headers: { "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; layers.forEach(async (layer) => { const action = identifyLayerActions[layer.layerType]; switch (layer.layerType) { case "021102": { const input_geometry = `${lng},${lat}`; const geometry_type = "esriGeometryPoint"; const result = await action({ input_geometry, geometry_type, url: layer.url, }); let res; if (result?.results?.length > 0) { res = result.results[0]; } if (cb) cb(res); break; } case "030300": break; case '081100': { const queryMode = 'BUFFER'; const bufferDistance = 0.0005; // 缓冲距离大概是50米 // const bufferDistance = 0.5; // 缓冲距离大概是??米 const spatialQueryMode = 'INTERSECT'; const geometry = { id: 0, style: null, parts: [1], points: [ { x: lng, y: lat, }, ], type: "POINT", }; let type = ""; let isSite = false; let layerTable = ""; if (layer.extendData) { const extendData = JSON.parse(layer.extendData); } const result = await action({ queryMode, spatialQueryMode, bufferDistance, geometry, layerName: layer.text, layerTable, url: layer.url, k: layer.serviceToken, }); if ([200, 201].includes(result.status) && result?.data?.datasetInfos?.length > 0) { console.log("处理业务数据 >>>>>> ", result?.data); const fieldInfos = result.data.datasetInfos?.[0]?.fieldInfos; console.log('fieldInfos >>>>> ', fieldInfos) const currentFeature = result.data.features?.[0]; console.log('currentFeature >>>>> ', currentFeature) const nameIndex = fieldInfos.findIndex((f) => ['res_name', 'dike_name', 'waga_name'].includes(f.name)); const codeIndex = fieldInfos.findIndex((f) => ['res_code','dike_code', 'waga_code'].includes(f.name)); // if (layer?.fields?.length > 0) { // const fieldIndex = fieldInfos.findIndex((f) => f.name === layer?.fields[0]?.field); // code = currentFeature?.fieldValues[fieldIndex]; // } let resData = { attributes: { res_code: currentFeature[codeIndex], res_name: currentFeature[nameIndex], } } console.log('resData >>>>> ', resData) if(cb) cb(resData) } break; } default: break; } }); };