健康风险分析,右下角新增图例;图例颜色方案重新设计,高风险(红色),低风险(绿色),符合常规颜色表达;

This commit is contained in:
JIANG
2025-12-19 16:12:54 +08:00
parent 120cfc2cb3
commit eb15100f4f
6 changed files with 47 additions and 24 deletions

View File

@@ -6,6 +6,12 @@ import MapToolbar from "@app/OlMap/Controls/Toolbar";
import { HealthRiskProvider } from "@components/olmap/HealthRiskAnalysis/HealthRiskContext"; import { HealthRiskProvider } from "@components/olmap/HealthRiskAnalysis/HealthRiskContext";
import HealthRiskPieChart from "@components/olmap/HealthRiskAnalysis/HealthRiskPieChart"; import HealthRiskPieChart from "@components/olmap/HealthRiskAnalysis/HealthRiskPieChart";
import PredictDataPanel from "@components/olmap/HealthRiskAnalysis/PredictDataPanel"; import PredictDataPanel from "@components/olmap/HealthRiskAnalysis/PredictDataPanel";
import StyleLegend from "@app/OlMap/Controls/StyleLegend";
import {
RAINBOW_COLORS,
RISK_BREAKS,
} from "@components/olmap/HealthRiskAnalysis/types";
import { Box } from "@mui/material";
export default function Home() { export default function Home() {
return ( return (
@@ -19,6 +25,17 @@ export default function Home() {
/> />
<Timeline /> <Timeline />
<HealthRiskPieChart /> <HealthRiskPieChart />
<Box className="absolute bottom-40 right-4 drop-shadow-xl flex flex-row items-end max-w-screen-lg overflow-x-auto z-10">
<StyleLegend
layerName="管道"
layerId="health-risk"
property="健康风险"
colors={RAINBOW_COLORS}
type="line"
dimensions={Array(RAINBOW_COLORS.length).fill(2)}
breaks={[0, ...RISK_BREAKS]}
/>
</Box>
</MapComponent> </MapComponent>
</HealthRiskProvider> </HealthRiskProvider>
</div> </div>

View File

@@ -112,7 +112,9 @@ const fetchFromBackend = async (
]); ]);
const cleanedData = transformBackendData(cleanedRes, featureIds); const cleanedData = transformBackendData(cleanedRes, featureIds);
const rawData = transformBackendData(rawRes, featureIds); // 如果清洗数据有值,则不显示原始监测值
const rawData =
cleanedData.length > 0 ? [] : transformBackendData(rawRes, featureIds);
return mergeTimeSeriesData( return mergeTimeSeriesData(
cleanedData, cleanedData,
@@ -136,7 +138,9 @@ const fetchFromBackend = async (
]); ]);
const cleanedData = transformBackendData(cleanedRes, featureIds); const cleanedData = transformBackendData(cleanedRes, featureIds);
const rawData = transformBackendData(rawRes, featureIds); // 如果清洗数据有值,则不显示原始监测值
const rawData =
cleanedData.length > 0 ? [] : transformBackendData(rawRes, featureIds);
const schemeSimData = transformBackendData(schemeSimRes, featureIds); const schemeSimData = transformBackendData(schemeSimRes, featureIds);
// 合并三组数据 // 合并三组数据
@@ -186,7 +190,9 @@ const fetchFromBackend = async (
]); ]);
const cleanedData = transformBackendData(cleanedRes, featureIds); const cleanedData = transformBackendData(cleanedRes, featureIds);
const rawData = transformBackendData(rawRes, featureIds); // 如果清洗数据有值,则不显示原始监测值
const rawData =
cleanedData.length > 0 ? [] : transformBackendData(rawRes, featureIds);
const simulationData = transformBackendData(simulationRes, featureIds); const simulationData = transformBackendData(simulationRes, featureIds);
// 合并三组数据 // 合并三组数据

View File

@@ -185,6 +185,7 @@ const StyleEditorPanel: React.FC<StyleEditorPanelProps> = ({
const { const {
currentJunctionCalData, currentJunctionCalData,
currentPipeCalData, currentPipeCalData,
pipeData,
junctionText, junctionText,
pipeText, pipeText,
setShowJunctionTextLayer, setShowJunctionTextLayer,

View File

@@ -1,3 +1,4 @@
import React from "react";
import Box from "@mui/material/Box"; import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";

View File

@@ -45,14 +45,13 @@ interface DataContextType {
currentJunctionCalData?: any[]; // 当前计算结果 currentJunctionCalData?: any[]; // 当前计算结果
setCurrentJunctionCalData?: React.Dispatch<React.SetStateAction<any[]>>; setCurrentJunctionCalData?: React.Dispatch<React.SetStateAction<any[]>>;
currentPipeCalData?: any[]; // 当前计算结果 currentPipeCalData?: any[]; // 当前计算结果
pipeData?: any[]; // 管道数据(含坐标等信息)
setCurrentPipeCalData?: React.Dispatch<React.SetStateAction<any[]>>; setCurrentPipeCalData?: React.Dispatch<React.SetStateAction<any[]>>;
pipeData?: any[]; // 管道数据(含坐标)
showJunctionText?: boolean; // 是否显示节点文本 showJunctionText?: boolean; // 是否显示节点文本
showPipeText?: boolean; // 是否显示管道文本 showPipeText?: boolean; // 是否显示管道文本
setShowJunctionTextLayer?: React.Dispatch<React.SetStateAction<boolean>>; setShowJunctionTextLayer?: React.Dispatch<React.SetStateAction<boolean>>;
setShowPipeTextLayer?: React.Dispatch<React.SetStateAction<boolean>>; setShowPipeTextLayer?: React.Dispatch<React.SetStateAction<boolean>>;
setShowContourLayer?: React.Dispatch<React.SetStateAction<boolean>>; setShowContourLayer?: React.Dispatch<React.SetStateAction<boolean>>;
// flowAnimation?: React.RefObject<boolean>;
isContourLayerAvailable?: boolean; isContourLayerAvailable?: boolean;
setShowWaterflowLayer?: React.Dispatch<React.SetStateAction<boolean>>; setShowWaterflowLayer?: React.Dispatch<React.SetStateAction<boolean>>;
setContourLayerAvailable?: React.Dispatch<React.SetStateAction<boolean>>; setContourLayerAvailable?: React.Dispatch<React.SetStateAction<boolean>>;
@@ -972,7 +971,6 @@ const MapComponent: React.FC<MapComponentProps> = ({ children }) => {
setShowJunctionTextLayer, setShowJunctionTextLayer,
setShowPipeTextLayer, setShowPipeTextLayer,
setShowContourLayer, setShowContourLayer,
// flowAnimation,
isContourLayerAvailable, isContourLayerAvailable,
setContourLayerAvailable, setContourLayerAvailable,
isWaterflowLayerAvailable, isWaterflowLayerAvailable,

View File

@@ -14,29 +14,29 @@ export interface PredictionResult {
} }
export const RAINBOW_COLORS = [ export const RAINBOW_COLORS = [
"rgba(255, 0, 0, 0.9)", // 红 (0.0 - 0.1) - 高风险 "rgba(211, 47, 47, 0.9)", // 红 (0.0 - 0.1) - 高风险
"rgba(255, 127, 0, 0.9)", // "rgba(244, 67, 54, 0.9)", // 红色 (0.1 - 0.2) - 高风险
"rgba(255, 215, 0, 0.9)", // 金黄 "rgba(255, 87, 34, 0.9)", // 深橙 (0.2 - 0.3)
"rgba(199, 224, 0, 0.9)", // 黄绿 "rgba(255, 152, 0, 0.9)", // 橙色 (0.3 - 0.4)
"rgba(76, 175, 80, 0.9)", // 中绿 "rgba(255, 193, 7, 0.9)", // 琥珀 (0.4 - 0.5)
"rgba(0, 158, 115, 0.9)", // 青绿 "rgba(255, 235, 59, 0.9)", // 黄色 (0.5 - 0.6)
"rgba(0, 188, 212, 0.9)", // 青色 "rgba(205, 220, 57, 0.9)", // 柠檬 (0.6 - 0.7)
"rgba(33, 150, 243, 0.9)", // 天蓝 "rgba(139, 195, 74, 0.9)", // 浅绿 (0.7 - 0.8)
"rgba(63, 81, 181, 0.9)", // 靛青 "rgba(76, 175, 80, 0.9)", // 绿色 (0.8 - 0.9) - 低风险
"rgba(142, 68, 173, 0.9)", // (0.9 - 1.0) - 低风险 "rgba(46, 125, 50, 0.9)", // 深绿 (0.9 - 1.0) - 低风险
]; ];
export const RISK_BREAKS = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]; export const RISK_BREAKS = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0];
export const RISK_LABELS = [ export const RISK_LABELS = [
"0.0 - 0.1 (极高风险)", "0.0 - 0.1 (极高风险)",
"0.1 - 0.2", "0.1 - 0.2 (高风险)",
"0.2 - 0.3", "0.2 - 0.3 (较高风险)",
"0.3 - 0.4", "0.3 - 0.4 (中高风险)",
"0.4 - 0.5", "0.4 - 0.5 (中等风险)",
"0.5 - 0.6", "0.5 - 0.6 (中等风险)",
"0.6 - 0.7", "0.6 - 0.7 (中低风险)",
"0.7 - 0.8", "0.7 - 0.8 (较低风险)",
"0.8 - 0.9", "0.8 - 0.9 (低风险)",
"0.9 - 1.0 (极低风险)", "0.9 - 1.0 (极低风险)",
]; ];