fix tilesets for vectors map

This commit is contained in:
parent 2715c56b4f
commit f009a57b8e
7 changed files with 209 additions and 18 deletions

View file

@ -38,6 +38,7 @@ export default function App() {
const [vectorSource, setVectorSource] = useState<"mbtiles" | "tileset">("mbtiles");
const [tilesets, setTilesets] = useState<string[]>([]);
const [activeTileset, setActiveTileset] = useState<string>("");
const [tilesetKinds, setTilesetKinds] = useState<Record<string, string>>({});
const [selectedFileName, setSelectedFileName] = useState<string>("");
const fileInputRef = useRef<HTMLInputElement | null>(null);
const [sliceParams, setSliceParams] = useState<SliceParams>(initialSliceParams);
@ -96,6 +97,7 @@ export default function App() {
if (!res.ok) throw new Error(data?.detail || `status ${res.status}`);
setTilesets(data.tilesets || []);
setActiveTileset(data.active || "");
setTilesetKinds(data.kinds || {});
}, [config]);
useEffect(() => {
@ -164,8 +166,15 @@ export default function App() {
if (!res.ok) throw new Error(data?.detail || `status ${res.status}`);
setActiveTileset(data.active || name);
sendFrontLog(`tileset activated: ${data.active || name}`, "info");
const kind = (data.kind as string | undefined) || tilesetKinds[name] || "";
if (kind.startsWith("vector")) {
setMapMode("vector");
setVectorSource(kind === "vector-dir" ? "tileset" : "mbtiles");
} else if (kind.startsWith("raster")) {
setMapMode("raster");
}
},
[config, sendFrontLog],
[config, sendFrontLog, tilesetKinds],
);
const createTileset = useCallback(
@ -273,9 +282,13 @@ export default function App() {
setMapMode("raster");
}
sendFrontLog(`map ingested: kind=${data.kind} driver=${data.driver}`, "info");
if (data.tileset) {
refreshTilesets().catch(() => {});
activateTileset(String(data.tileset)).catch(() => {});
}
return data;
},
[sendFrontLog, sliceParams.max_zoom, sliceParams.min_zoom, sliceParams.tileset],
[activateTileset, refreshTilesets, sendFrontLog, sliceParams.max_zoom, sliceParams.min_zoom, sliceParams.tileset],
);
const uploadFileBlob = useCallback(
@ -291,6 +304,10 @@ export default function App() {
.then((res) => {
setSliceParams((p) => ({ ...p, source: res.path }));
setSelectedFileName(res.filename);
const lower = String(res.filename || "").toLowerCase();
if (lower.endsWith(".mbtiles")) setSliceParams((p) => ({ ...p, source_format: "mbtiles" }));
if (lower.endsWith(".tif") || lower.endsWith(".tiff") || lower.endsWith(".vrt"))
setSliceParams((p) => ({ ...p, source_format: "geotiff" }));
setSliceParams((p) => {
if (p.tileset) return p;
const proposed = String(res.filename || "")
@ -326,7 +343,11 @@ export default function App() {
],
});
if (typeof selected === "string") {
const lower = selected.toLowerCase();
setSliceParams((p) => ({ ...p, source: selected }));
if (lower.endsWith(".mbtiles")) setSliceParams((p) => ({ ...p, source_format: "mbtiles" }));
if (lower.endsWith(".tif") || lower.endsWith(".tiff") || lower.endsWith(".vrt"))
setSliceParams((p) => ({ ...p, source_format: "geotiff" }));
setSelectedFileName(selected.split("/").pop() || selected);
return;
}