import type { MapGeoJSONFeature } from "maplibre-gl"; import type { DetailFeature } from "../types"; import { formatValue } from "../utils/format-value"; import { SOURCE_LAYERS } from "./sources"; export function getFeatureId(feature: MapGeoJSONFeature) { const raw = feature.properties?.id ?? feature.id; return raw === undefined || raw === null ? "" : String(raw); } export function toDetailFeature(feature: MapGeoJSONFeature): DetailFeature { const isPipe = feature.sourceLayer === SOURCE_LAYERS.pipes; const id = getFeatureId(feature); const diameter = feature.properties?.diameter; const length = feature.properties?.length; const demand = feature.properties?.demand; return { id, layer: isPipe ? "pipes" : "junctions", title: isPipe ? `管线 ${id || "未命名"}` : `节点 ${id || "未命名"}`, subtitle: isPipe ? `DN${formatValue(diameter)} · ${formatValue(length)} m` : `需水量 ${formatValue(demand)} · 高程 ${formatValue(feature.properties?.elevation)} m`, properties: feature.properties ?? {} }; }