|
|
@ -103,6 +103,11 @@ |
|
|
|
|
|
|
|
<div class="picture"> |
|
|
|
<h2 class="title">边界层特征值</h2> |
|
|
|
<div v-loading="loadingBackscatterStatus" |
|
|
|
style="width: 100%;" |
|
|
|
element-loading-text="加载中"> |
|
|
|
<canvas id='backscatter_chart'></canvas> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
@ -187,7 +192,8 @@ export default { |
|
|
|
singleWatervaporDrawer: HeatMapDrawer, |
|
|
|
cloudSolDrawer: HeatMapDrawer, |
|
|
|
pm2Point5Drawer: HeatMapDrawer, |
|
|
|
pm10Drawer: HeatMapDrawer |
|
|
|
pm10Drawer: HeatMapDrawer, |
|
|
|
backscatterDrawer: HeatMapDrawer, |
|
|
|
} = { |
|
|
|
boundaryLayerHeight: null, |
|
|
|
cloudsHeight: null, |
|
|
@ -200,7 +206,8 @@ export default { |
|
|
|
opticsExtinctionDrawer: null, |
|
|
|
cloudSolDrawer: null, |
|
|
|
pm2Point5Drawer: null, |
|
|
|
pm10Drawer: null |
|
|
|
pm10Drawer: null, |
|
|
|
backscatterDrawer: null |
|
|
|
} |
|
|
|
let options = reactive({ |
|
|
|
currentTab: 'MWR', |
|
|
@ -232,6 +239,7 @@ export default { |
|
|
|
loadingCloudRecognitionStatus: false, |
|
|
|
loadingExtinctionStatus: false, |
|
|
|
loadingWaterVaporStatus: false, |
|
|
|
loadingBackscatterStatus: false |
|
|
|
}) |
|
|
|
|
|
|
|
onMounted(() => { |
|
|
@ -304,19 +312,20 @@ export default { |
|
|
|
} else if (options.currentTab === 'optical-property') { |
|
|
|
// extinctionApi() |
|
|
|
// LidarRatioApi() |
|
|
|
// reloadCloudRecognition(801, 'extinction', drawOpticsExtinction); |
|
|
|
reloadCloudRecognition('extinctionOptics', 801, 'extinction', drawOpticsExtinction); |
|
|
|
} else if (options.currentTab === 'aerosol-product') { |
|
|
|
// boundaryLayerHeightDate() |
|
|
|
reloadChartsRecognition('pblh', drawCharts) |
|
|
|
reloadCloudRecognition(201, 'pm2_5', drawPm2Point5); |
|
|
|
// reloadCloudRecognition(201, 'pm10', drawPm10); |
|
|
|
reloadCloudRecognition('pm2_5', 201, 'pm2_5', drawPm2Point5); |
|
|
|
reloadCloudRecognition('pm2_5', 201, 'pm10', drawPm10); |
|
|
|
reloadCloudRecognition('backscatter', 201, 'backscatter', drawBackscatter) |
|
|
|
// boundaryCharacteristicApi() |
|
|
|
//aerosolApi() |
|
|
|
} else if (options.currentTab === 'BingoCloud') { |
|
|
|
//layerTypeApi() |
|
|
|
// cloudsHeightApi() |
|
|
|
// cloudTopHeightApi() |
|
|
|
// reloadCloudRecognition(801, 'layertype', drawCloudSol); |
|
|
|
reloadCloudRecognition('cloudSol', 801, 'layertype', drawCloudSol); |
|
|
|
} else if (options.currentTab === 'MWR') { |
|
|
|
//waterVapourApi() |
|
|
|
// reloadCloudRecognition(801, 'layertype', drawCloudRecognition); |
|
|
@ -325,6 +334,55 @@ export default { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const preprocessing = (type: string) => { |
|
|
|
switch(type) { |
|
|
|
case 'layertype': |
|
|
|
options.loadingCloudRecognitionStatus = true; |
|
|
|
clearHeatMapDrawer(creates.cloudRecognitionDrawer); |
|
|
|
break; |
|
|
|
case 'extinction': |
|
|
|
options.loadingExtinctionStatus = true; |
|
|
|
clearHeatMapDrawer(creates.extinctionDrawer); |
|
|
|
break; |
|
|
|
case 'watervapor': |
|
|
|
options.loadingWaterVaporStatus = true; |
|
|
|
clearHeatMapDrawer(creates.watervaporDrawer); |
|
|
|
break; |
|
|
|
case 'cloudSol': |
|
|
|
options.loadingCloudSolStatus = true; |
|
|
|
clearHeatMapDrawer(creates.cloudSolDrawer); |
|
|
|
break; |
|
|
|
case 'pm2_5': |
|
|
|
options.loadingPmStatus = true; |
|
|
|
clearHeatMapDrawer(creates.pm2Point5Drawer); |
|
|
|
break; |
|
|
|
case 'pm10': |
|
|
|
options.loadingPmStatus = true; |
|
|
|
clearHeatMapDrawer(creates.pm10Drawer); |
|
|
|
break; |
|
|
|
case 'extinctionOptics': |
|
|
|
options.loadingExtinctionOpticsStatus = true; |
|
|
|
clearHeatMapDrawer(creates.opticsExtinctionDrawer); |
|
|
|
break; |
|
|
|
case 'singleWatervapor': |
|
|
|
options.loadingWaterVaporSingleStatus = true; |
|
|
|
clearHeatMapDrawer(creates.singleWatervaporDrawer); |
|
|
|
break; |
|
|
|
case 'backscatter': |
|
|
|
options.loadingBackscatterStatus = true; |
|
|
|
clearHeatMapDrawer(creates.backscatterDrawer); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new Error("无效的type类型"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const clearHeatMapDrawer = (drawer: HeatMapDrawer) => { |
|
|
|
if (drawer == null) return; |
|
|
|
drawer.close(); |
|
|
|
drawer = null; |
|
|
|
} |
|
|
|
|
|
|
|
const cancelRequest = () => { |
|
|
|
axiosStore._axiosPromiseCancel.forEach(e=>{ |
|
|
|
e && e() |
|
|
@ -332,8 +390,31 @@ export default { |
|
|
|
axiosStore._axiosPromiseCancel = []; |
|
|
|
} |
|
|
|
|
|
|
|
const drawBackscatter = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingBackscatterStatus = false; |
|
|
|
if (creates.backscatterDrawer != null){ |
|
|
|
creates.backscatterDrawer.close(); |
|
|
|
} |
|
|
|
|
|
|
|
let matrix = converCloudRecognition(201, result); |
|
|
|
creates.backscatterDrawer = new HeatMapDrawer(800, 600, matrix, "backscatter_chart", '米'); |
|
|
|
creates.backscatterDrawer.setAxis(new CoordinateScale([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]), new CoordinateScale([0, 1000, 2000, 3000], true, true)); |
|
|
|
creates.backscatterDrawer.setColorChart(prepareBackscatterColors()); |
|
|
|
creates.backscatterDrawer.draw(); |
|
|
|
} |
|
|
|
|
|
|
|
const prepareBackscatterColors = () => { |
|
|
|
return new ColorChart(['#8F0000','#E00000', '#FF1F00', '#FF6600', '#FF9900', '#FFE000', '#EBFF14', '#99FF66', '#66FF99', '#1FFFE0', |
|
|
|
'#00E0FF', '#0099FF', '#005CFF', '#0029FF', '#0000E0', '#000099'], |
|
|
|
[-4, -4.25, -4.5, -4.75, -5, -5.25, -5.5, -5.75, -6, -6.25, -6.5, -6.75, -7, -7.25, -7.5, -7.75, -8] |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
const drawPm2Point5 = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
options.loadingPmStatus = false; |
|
|
|
if (creates.pm2Point5Drawer != null){ |
|
|
|
creates.pm2Point5Drawer.close(); |
|
|
|
} |
|
|
@ -347,6 +428,7 @@ export default { |
|
|
|
const drawPm10 = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingPmStatus = false; |
|
|
|
if (creates.pm10Drawer != null){ |
|
|
|
creates.pm10Drawer.close(); |
|
|
|
} |
|
|
@ -385,6 +467,7 @@ export default { |
|
|
|
const drawCloudSol = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingCloudSolStatus = false; |
|
|
|
if (creates.cloudSolDrawer != null){ |
|
|
|
creates.cloudSolDrawer.close(); |
|
|
|
} |
|
|
@ -399,6 +482,7 @@ export default { |
|
|
|
const drawOpticsExtinction = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingExtinctionOpticsStatus = false; |
|
|
|
if (creates.opticsExtinctionDrawer != null){ |
|
|
|
creates.opticsExtinctionDrawer.close(); |
|
|
|
} |
|
|
@ -413,6 +497,7 @@ export default { |
|
|
|
const drawSingleWatervapor = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingWaterVaporSingleStatus = false; |
|
|
|
if (creates.singleWatervaporDrawer != null){ |
|
|
|
creates.singleWatervaporDrawer.close(); |
|
|
|
} |
|
|
@ -427,6 +512,7 @@ export default { |
|
|
|
const drawWatervapor = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingWaterVaporStatus = false; |
|
|
|
if (creates.watervaporDrawer != null){ |
|
|
|
creates.watervaporDrawer.close(); |
|
|
|
} |
|
|
@ -448,6 +534,7 @@ export default { |
|
|
|
const drawExtinction = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingExtinctionStatus = false; |
|
|
|
if (creates.extinctionDrawer != null){ |
|
|
|
creates.extinctionDrawer.close(); |
|
|
|
} |
|
|
@ -466,7 +553,8 @@ export default { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
const reloadCloudRecognition = (capacity: number, element: string, callback: any) => { |
|
|
|
const reloadCloudRecognition = (type: string, capacity: number, element: string, callback: any) => { |
|
|
|
preprocessing(type); |
|
|
|
let result = new CustomeArray(callback); |
|
|
|
let time = moment(options.date); |
|
|
|
for(let index = 0; index < 24; index ++){ |
|
|
@ -486,6 +574,7 @@ export default { |
|
|
|
const drawCloudRecognition = (result: CustomeArray<any>) => { |
|
|
|
if (result.length != 24) return; |
|
|
|
|
|
|
|
options.loadingCloudRecognitionStatus = false; |
|
|
|
if (creates.cloudRecognitionDrawer != null){ |
|
|
|
creates.cloudRecognitionDrawer.close(); |
|
|
|
} |
|
|
@ -517,7 +606,7 @@ export default { |
|
|
|
} |
|
|
|
|
|
|
|
for(let y = 0; y < capacity; y++){ |
|
|
|
matrix[index][y] = new Box(index, y, 0, 0, 0, y * 15, time, "米"); |
|
|
|
matrix[index][y] = new Box(index, y, 0, 0, NaN, y * 15, time, "米"); |
|
|
|
} |
|
|
|
} |
|
|
|
return; |
|
|
@ -532,7 +621,10 @@ export default { |
|
|
|
if (matrix[tempIndex] == null){ |
|
|
|
matrix[tempIndex] = new Array<Box>(capacity); |
|
|
|
} |
|
|
|
matrix[tempIndex][h] = new Box(tempIndex, h, 0, 0, r.data[h][i], i * 15, time, "米"); |
|
|
|
|
|
|
|
let value = r.data[h][i]; |
|
|
|
value = value == null ? NaN : value; |
|
|
|
matrix[tempIndex][h] = new Box(tempIndex, h, 0, 0, value, h * 15, time, "米"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1088,6 +1180,9 @@ export default { |
|
|
|
#pm10_chart { |
|
|
|
transform: scale(0.5,0.4) translate(-314px, -475px); |
|
|
|
} |
|
|
|
#backscatter_chart { |
|
|
|
transform: scale(0.6,0.85) translateX(-260px); |
|
|
|
} |
|
|
|
#cloud_sol_chart { |
|
|
|
transform: scale(0.6,0.85) translate(-31%, -12px); |
|
|
|
} |
|
|
|