| | |
| | | srySceneCount: 5, |
| | | sryProbByFactor: |
| | | '颗粒物(PM)相关X处,占比 %,主要涉及工地扬尘污染问题、道路扬尘污染问题等;VOC相关X处,占比 %,主要涉及加油站油气泄露、餐饮油烟污染等', |
| | | sryFocusRegion: '聚焦区域', |
| | | missionInfoList: [ |
| | | { |
| | | missionCode: '', |
| | |
| | | _airQulity: 'AQI:30(优)', |
| | | mainFactor: '', |
| | | _abnormalFactors: '', |
| | | sceneCount: 0 |
| | | sceneCount: 0, |
| | | _kilometres: '1000' |
| | | } |
| | | ], |
| | | missionDetailList: [ |
| | |
| | | avgValue: 38 |
| | | } |
| | | ], |
| | | _airQulity: 'AQI:30(优)', |
| | | aqi: 30, |
| | | pollutionDegree: '优' |
| | | } |
| | |
| | | return `${item.first}相关${item.second}处,占比 ${Math.round(item.third * 1000) / 10}%,主要涉及${getPollutingProblemTypes(item.first)}等`; |
| | | }) |
| | | .join(';'); |
| | | templateParam.sryFocusRegion = res.data.focusRegion.join('、'); |
| | | }); |
| | | } |
| | | |
| | |
| | | item._abnormalFactors = item.abnormalFactors |
| | | .map((factor) => factor) |
| | | .join('、'); |
| | | return item; |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | function generateMissionDetail(param) { |
| | | return dataAnalysisApi.fetchMissionDetail(param).then((res) => { |
| | | templateParam.missionDetailList = res.data.map((item, index) => { |
| | | const t = formatDateTimeRange(item.startTime, item.endTime).split(' '); |
| | | item._index = index + 1; |
| | | item._startTime = t[0]; |
| | | item._time = t[1]; |
| | | item._kilometres = Math.round(item.kilometres / 1000); |
| | | |
| | | const keySceneMap = new Map(); |
| | |
| | | `${info.count}个${type}(${info.scenes.map((s) => s.name).join('、')})` |
| | | ) |
| | | .join('、'); |
| | | item._dataStat = item.dataStatistics |
| | | .map( |
| | | (e) => |
| | | `${e.factor.des}(范围${e.minValue}–${e.maxValue}μg/m³,均值${e.avgValue}μg/m³)` |
| | | ) |
| | | .join('、'); |
| | | item._focusScene = |
| | | item.scenes.length > 0 |
| | | ? item.scenes.map((s) => s.name).join('、') |
| | | : '道路交通密集区和部分施工周边'; |
| | | return item; |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | function generateMissionDetail(param) { |
| | | return dataAnalysisApi.fetchMissionDetail(param).then((res) => { |
| | | templateParam.missionDetailList = res.data.map((item, index) => { |
| | | const t = formatDateTimeRange(item.startTime, item.endTime).split(' '); |
| | | item._index = index + 1; |
| | | item._startTime = t[0]; |
| | | item._time = t[1]; |
| | | item._kilometres = Math.round(item.kilometres / 1000); |
| | | item._airQulity = `AQI:${item.aqi}(${item.pollutionDegree})`; |
| | | |
| | | const factorNames = radioOptions(TYPE0).map((e) => e.name); |
| | | item._dataStatistics = item.dataStatistics.filter((e) => { |
| | | return factorNames.indexOf(e.factor) != -1; |
| | | }); |
| | | |
| | | radioOptions(TYPE0).forEach((f) => { |
| | | const _factor = item.dataStatistics.find((e) => e.factor == f.name); |
| | | item[`avgValue_${f.name}`] = _factor?.avgValue ?? '-'; |
| | | item[`maxValue_${f.name}`] = _factor?.maxValue ?? '-'; |
| | | item[`minValue_${f.name}`] = _factor?.minValue ?? '-'; |
| | | }); |
| | | |
| | | return item; |
| | |
| | | templateParam.clueByAreaList = res.data.map((item, index) => { |
| | | return { |
| | | _index: index + 1, |
| | | _area: item.sceneInfo.name + '周边', |
| | | _area: `${item.sceneInfo.type}${item.sceneInfo.name}周边`, |
| | | clueByFactorList: item.clueByFactorList.map((cbf) => { |
| | | return { |
| | | factor: cbf.factor, |
| | |
| | | pollutionDegree: item.pollutionDegree, |
| | | _areaDes: `走航区域经过${scenes.join('、')}`, |
| | | _gridDes: `${item.gridLen}米正方形网格`, |
| | | _missionDes: `${item.missionList.map((m) => m.missioncode).join('、')}${item.missionList.length}次` |
| | | _missionDes: `${item.missionList.map((m) => m.missionCode).join('、')}共${item.missionList.length}次` |
| | | }; |
| | | const _highRiskGridList = []; |
| | | item.highRiskGridList.forEach((g, i) => { |
| | | // const g = item.highRiskGridList[0]; |
| | | // const i = 0; |
| | | const p = generateGridFusionImg(g.factorType, item.gridFusionList).then( |
| | | (url) => { |
| | | const { url1, url2 } = url; |
| | |
| | | _boundsDes: `经度${g.bounds[0]}至${g.bounds[1]},纬度${g.bounds[2]}至${g.bounds[3]}`, |
| | | // 涉及街镇 |
| | | town: g.town, |
| | | _scenesDes: g.highRiskScenes.map((s) => s.name).join('、') |
| | | _scenesDes: |
| | | g.highRiskScenes.length > 0 |
| | | ? `涉及的污染场景包括${g.highRiskScenes.map((s) => s.name).join('、')}` |
| | | : '网格内可能存在隐藏风险源' |
| | | }); |
| | | } |
| | | ); |
| | |
| | | } |
| | | |
| | | async function generateGridFusionImg(factorName, dataList) { |
| | | var min = 1000000; |
| | | var max = 0; |
| | | let min = 1000000; |
| | | let max = 0; |
| | | dataList.forEach((v) => { |
| | | min = Math.min(min, getGridDataDetailFactorValue(v.data, factorName)); |
| | | max = Math.max(max, getGridDataDetailFactorValue(v.data, factorName)); |
| | | }); |
| | | |
| | | const gridData = dataList.map((v) => { |
| | | const gridDataStand = []; |
| | | const gridDataCustom = []; |
| | | dataList.forEach((v) => { |
| | | const data = getGridDataDetailFactorValue(v.data, factorName); |
| | | const grid = v.cell; |
| | | |
| | |
| | | nextColor.map((v) => v * 255), |
| | | ratio |
| | | ); |
| | | return [ |
| | | { |
| | | centerLng: grid.longitude, |
| | | centerLat: grid.latitude, |
| | | value: _color1, |
| | | coordinates: [ |
| | | [grid.point1Lon, grid.point1Lat], |
| | | [grid.point2Lon, grid.point2Lat], |
| | | [grid.point3Lon, grid.point3Lat], |
| | | [grid.point4Lon, grid.point4Lat] |
| | | ] |
| | | }, |
| | | { |
| | | centerLng: grid.longitude, |
| | | centerLat: grid.latitude, |
| | | value: _color, |
| | | coordinates: [ |
| | | [grid.point1Lon, grid.point1Lat], |
| | | [grid.point2Lon, grid.point2Lat], |
| | | [grid.point3Lon, grid.point3Lat], |
| | | [grid.point4Lon, grid.point4Lat] |
| | | ] |
| | | } |
| | | ]; |
| | | |
| | | gridDataStand.push({ |
| | | centerLng: grid.longitude, |
| | | centerLat: grid.latitude, |
| | | value: _color1, |
| | | coordinates: [ |
| | | [grid.point1Lon, grid.point1Lat], |
| | | [grid.point2Lon, grid.point2Lat], |
| | | [grid.point3Lon, grid.point3Lat], |
| | | [grid.point4Lon, grid.point4Lat] |
| | | ] |
| | | }); |
| | | gridDataCustom.push({ |
| | | centerLng: grid.longitude, |
| | | centerLat: grid.latitude, |
| | | value: _color, |
| | | coordinates: [ |
| | | [grid.point1Lon, grid.point1Lat], |
| | | [grid.point2Lon, grid.point2Lat], |
| | | [grid.point3Lon, grid.point3Lat], |
| | | [grid.point4Lon, grid.point4Lat] |
| | | ] |
| | | }); |
| | | }); |
| | | if (gridData[0] == undefined || gridData[1] == undefined) { |
| | | console.log(gridData); |
| | | } |
| | | const url1 = await chartMap.generateGridMap(gridData[0]); |
| | | const url2 = await chartMap.generateGridMap(gridData[1]); |
| | | const url1 = await chartMap.generateGridMap(gridDataStand); |
| | | const url2 = await chartMap.generateGridMap(gridDataCustom); |
| | | if (gridBase64Url.value == null) { |
| | | gridBase64Url.value = url1; |
| | | } |