feat(history): align units and history data
This commit is contained in:
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user