feat(지도): 634-2 · 634-3 아이콘 표 두 장 · 묶음 메뉴 · 한 행 배선 · 호버 = 표(요구 546)

- 겹 표(map_layer_list) = 그룹1 22 줄 표 차례 · title = 호버제목 · group(수계망도 · 도로 · 토지·건물 · 제한·재해) · pages · 숨김 표 걷음 · 도로300m 한 줄(「도로」 묶음 · 기능 남김)
- 겹 줄(map_layer_bar) = 단독 넷 | 묶음 넷(여럿 고르기 메뉴 · 켠 수 배지 · 안 닫힘) | 그래픽 카드 · sync 가 단추 · 메뉴 줄 막힘 · 글을 맞춤(why = 페이지 까닭)
- 도구 표(map_toolbar) = 그룹2 17 줄 title · mapToolGroups 가 글을 표로 맞춤 · 기본 단추 생성 · 지형 칩 막힘 「수치지형도/라이다 — 까닭」
- 띠 = 한 자료 · 겹 둘(GL fillEdge 거름 · 옛 캔버스 · 범례 줄 따로) · B05 띠 받기(D03 과 같은 서버 길 · bandCollection 공용)
- D03 = 겹 줄 · 도구줄 한 행(createMapToolRow) · 222px 기댐 · 줄바꿈 CSS 걷음 · 측점 · 기울기 호버 덮어쓰기 걷음 · LAS 올리기 호버 걷음
- B05 = 세로 두 줄 → 한 행 · 호버 덮어쓰기 걷음(도구줄 · 1m 등고선 · 3D · 추천) · 겹 막힘 querySelector 덮어쓰기 → 공용 sync · 임도(업로드) 보임 + 「받은 임도 자료 없음」 막힘 · 스냅 간격 날 select → 고르기 메뉴(하나)
- 켬끔 기억 열쇠 · 측점 · 기울기 처음 값 · 그래픽 카드 취향 열쇠 둘 그대로
- 낡은 시험 고침(568_1 · 622_2 · 624_2 · 624_3 · 553_4 · 625_draw · b05_routeedit_initial · 626_3 · 390_4 · 346_2 · 353_1 · 581_2 · 584_1 · 584_3) — 표 꼴 row() · 호버 글 = 표 · 한 행 · 고르기 메뉴로 바뀐 글을 잡음 · 새 지킴 634_2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-01 11:40:26 +09:00
co-authored by Claude Opus 5.5
parent 2265ac4f7c
commit 61733d064d
34 changed files with 527 additions and 428 deletions
+10 -19
View File
@@ -26,10 +26,12 @@
* ========================================================================== */
import { showToast } from "@ui/ui_template_elements";
import { createMapToolRow } from "@ui/ui_template_map_tools";
import { themeColor } from "@ui/ui_template_palette";
import { readByKey, writeByKey } from "../A00_Common/b_page_state";
import { soilColor, tileOnly, type TileOnlyKey } from "../A00_Common/map/map_forest_layers";
import { createMapLayerBar } from "../A00_Common/map/map_layer_bar";
import { bandCollection } from "../A00_Common/map/map_layer_data";
import { LAYERS, LINE_LAYERS, ZONE_COLORS, type RoadPick } from "../A00_Common/map/map_layer_list";
import type { TerrainSource } from "../A00_Common/map/map_terrain_chip";
import { createMapLegend } from "../A00_Common/map/map_legend";
@@ -91,9 +93,9 @@ const CANVAS_PREF_KEY = "aislo:pref:d03.canvas";
const NO_SATELLITE_NOTE = "옛 그림은 위성 바탕 없이 그림";
type DataKey = keyof Prepared;
/** 겹 → 받는 자료(임도 짐작 = 도로 자료 · 조각만 쓰는 겹 = 없음). */
/** 겹 → 받는 자료(임도 짐작 = 도로 자료 · 도로 띠 = 띠 자료 · 조각만 쓰는 겹 = 없음). */
const dataKey = (key: Exclude<PlanLayerKey, TileOnlyKey>): DataKey =>
key === "forestRoad" ? "road" : key;
key === "forestRoad" ? "road" : key === "roadBands" ? "bands" : key;
export interface PlanLayers {
bar: HTMLElement;
@@ -189,12 +191,10 @@ export function createPlanLayers(opts: {
sync();
map.redrawBase();
}
const bar = layerBar.root;
bar.classList.add("d03-plan__layers");
// 571-1 — 오른쪽 평면 도구줄이 이 줄 오른쪽부터(CSS `--d03-layers-w`)
new ResizeObserver(() =>
map.root.style.setProperty("--d03-layers-w", `${layerBar.bar.offsetWidth}px`),
).observe(layerBar.bar);
// 634-3 — 한 행 두 영역(왼쪽 겹 줄 · 오른쪽 평면 도구줄 · 영역마다 가로 밀기)
const bar = createMapToolRow(layerBar.root, map.toolbar);
bar.classList.add("d03-plan__row");
layerBar.root.classList.add("d03-plan__layers"); // 가이드 촬영이 잡음
const legendBox = createMapLegend("d03-plan__legend");
const legend = legendBox.root;
@@ -543,23 +543,14 @@ export function createPlanLayers(opts: {
} finally {
window.clearTimeout(slow);
}
} else if (key === "bands") {
} else if (key === "bands" || key === "roadBands") {
const info = await fetchPlanBands(projectId);
got.bands = {
stream: prepare(info.stream.collection),
road: prepare(info.road.collection),
info,
};
const band = (name: "stream" | "road", fallback: string): GeoJsonCollection =>
glTagged(info[name].collection, () => themeColor(`--draw-map-band-${name}`, fallback), {
_band: name,
});
put("bands", {
features: [
...(band("road", "#facc15").features ?? []),
...(band("stream", "#22d3ee").features ?? []),
],
});
put("bands", bandCollection(info));
} else {
const collection = tiles.collection("지명");
got.place = (collection.features ?? []).flatMap((feature) => {