feat(history): align units and history data

This commit is contained in:
2026-09-14 12:30:57 +08:00
parent 35b6819459
commit 08ddb4453d
21 changed files with 1849 additions and 3618 deletions
+39 -17
View File
@@ -23,7 +23,11 @@ import { TextLayer } from "@deck.gl/layers";
import { TripsLayer } from "@deck.gl/geo-layers";
import { CollisionFilterExtension } from "@deck.gl/extensions";
import { ContourLayer } from "deck.gl";
import { isLpsFlowProperty, toM3h } from "@utils/units";
import {
type NetworkResultUnits,
toModelDisplayValue,
} from "@utils/units";
import { useNetworkResultUnits } from "@/hooks/useNetworkResultUnits";
import { usePathname } from "next/navigation";
import {
cleanupTransientMapResources,
@@ -125,6 +129,7 @@ interface DataContextType {
elevationRange?: [number, number];
forceStyleAutoApplyVersion?: number;
setForceStyleAutoApplyVersion?: React.Dispatch<React.SetStateAction<number>>;
resultUnits?: NetworkResultUnits;
}
// 跨组件传递
@@ -138,14 +143,13 @@ const mergeJunctionValues = (
features: any[],
records: any[],
property: string,
resultUnits: NetworkResultUnits,
) => {
const recordsById = indexCalculationRecords(records);
return features.map((feature) => {
const record = recordsById.get(String(feature.id));
if (!record) return feature;
const value = isLpsFlowProperty(property)
? toM3h(record.value, "lps")
: record.value;
const value = toModelDisplayValue(record.value, property, resultUnits);
return { ...feature, [property]: value };
});
};
@@ -154,13 +158,14 @@ const mergePipeValues = (
features: any[],
records: any[],
property: string,
resultUnits: NetworkResultUnits,
) => {
const recordsById = indexCalculationRecords(records);
const isFlow = property === "flow";
return features.map((feature) => {
const record = recordsById.get(String(feature.id));
if (!record) return feature;
const value = isFlow ? toM3h(record.value, "lps") : record.value;
const value = toModelDisplayValue(record.value, property, resultUnits);
const reverseFlow = isFlow && record.value < 0;
return {
...feature,
@@ -202,6 +207,7 @@ const MapComponent: React.FC<MapComponentProps> = ({ children }) => {
const MAP_URL = config.MAP_URL;
const MAP_VIEW_STORAGE_KEY = `${MAP_WORKSPACE}_map_view`; // 持久化 key
const { durationMinutes, stepMinutes } = useTimelineTimeConfig();
const resultUnits = useNetworkResultUnits(project?.networkName);
const mapRef = useRef<HTMLDivElement | null>(null);
const canvasRef = useRef<HTMLCanvasElement | null>(null);
@@ -288,37 +294,52 @@ const MapComponent: React.FC<MapComponentProps> = ({ children }) => {
// 实时合并计算结果到基础地理数据中
const mergedJunctionData = useMemo(
() =>
mergeJunctionValues(junctionData, currentJunctionCalData, junctionText),
[junctionData, currentJunctionCalData, junctionText],
mergeJunctionValues(
junctionData,
currentJunctionCalData,
junctionText,
resultUnits,
),
[junctionData, currentJunctionCalData, junctionText, resultUnits],
);
const mergedPipeData = useMemo(
() => mergePipeValues(pipeData, currentPipeCalData, pipeText),
[pipeData, currentPipeCalData, pipeText],
() => mergePipeValues(pipeData, currentPipeCalData, pipeText, resultUnits),
[pipeData, currentPipeCalData, pipeText, resultUnits],
);
const mergedPipeFragments = useMemo(
() => mergePipeValues(pipeFragments, currentPipeCalData, pipeText),
[pipeFragments, currentPipeCalData, pipeText],
() => mergePipeValues(pipeFragments, currentPipeCalData, pipeText, resultUnits),
[pipeFragments, currentPipeCalData, pipeText, resultUnits],
);
const mergedCompareJunctionData = useMemo(
() =>
isCompareMode
? mergeJunctionValues(junctionData, compareJunctionCalData, junctionText)
? mergeJunctionValues(
junctionData,
compareJunctionCalData,
junctionText,
resultUnits,
)
: [],
[isCompareMode, junctionData, compareJunctionCalData, junctionText],
[isCompareMode, junctionData, compareJunctionCalData, junctionText, resultUnits],
);
const mergedComparePipeData = useMemo(
() =>
isCompareMode
? mergePipeValues(pipeData, comparePipeCalData, pipeText)
? mergePipeValues(pipeData, comparePipeCalData, pipeText, resultUnits)
: [],
[isCompareMode, pipeData, comparePipeCalData, pipeText],
[isCompareMode, pipeData, comparePipeCalData, pipeText, resultUnits],
);
const mergedComparePipeFragments = useMemo(
() =>
isCompareMode
? mergePipeValues(pipeFragments, comparePipeCalData, pipeText)
? mergePipeValues(
pipeFragments,
comparePipeCalData,
pipeText,
resultUnits,
)
: [],
[isCompareMode, pipeFragments, comparePipeCalData, pipeText],
[isCompareMode, pipeFragments, comparePipeCalData, pipeText, resultUnits],
);
const [diameterRange, setDiameterRange] = useState<
@@ -1163,6 +1184,7 @@ const MapComponent: React.FC<MapComponentProps> = ({ children }) => {
elevationRange,
forceStyleAutoApplyVersion,
setForceStyleAutoApplyVersion,
resultUnits,
}}
>
<MapContext.Provider value={map}>