|
|
|
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;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|