feat(760-1): 암상 지질도 겹 · 노선 따라 바위 종류 구간 · 밖 겹 출처 줄

- 서버: 지오빅데이터(KIGAM) 수치지질도 1:50,000 — WFS 암상 면(깨진 한글 칸은 기호별 점 조회로 채움) · 받은 범위 ∪ 노선으로 자름 · 저장본 · 노선 따라 1 m 표본 구간 · 키는 서버만(.env GEOBIGDATA_API_KEY · 쿼리 key)
- 그림 조각 대리에 geology(키 쿼리 이름 칸 key_param · 옛 겹 serviceKey 그대로)
- 화면(D03 · B05): 「제한·재해」에 「암상 지질도」 — 그림 조각 + 갈래 색 면 · 「기호 · 암상」 글 · 범례 · 노선 구간 표(참고 — 토사 · 암 판정 아님)
- 켠 밖 겹마다 범례 맨 아래 출처 줄(브이월드 · 국토지리정보원 · 산림청 · 환경부 · 생활안전지도 공공누리 · 한국지질자원연구원 CC BY-NC)
- 범례 칸 높이 한도 · 밀기(낮은 화면)
- 시험: test_760_1 새로 · test_634_2 · test_553_4 겹 차례 표에 geology 한 줄 더함(새 겹 · 낡은 표)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-03 08:32:53 +09:00
co-authored by Claude Opus 5.5
parent f28268f050
commit f6cfaf446c
21 changed files with 863 additions and 16 deletions
@@ -35,6 +35,7 @@ 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";
import { fetchPlanGeology, geologyCollection, geologyTail } from "../A00_Common/map/map_geology";
import { fetchVWorldMeta, type VWorldMeta } from "../B04_PreProcess/B04_PreProcess_Api_Fetch";
import {
createNormalizer,
@@ -207,7 +208,8 @@ export function createPlanLayers(opts: {
for (const def of LAYERS) gl.setVisible(def.key, on[def.key]);
gl.setData("hillshade", hillshade && (on.satellite ? hillshade.shade : hillshade.plain));
const light = meta && glOn && on.satellite; // 옛 캔버스 = 위성 없음
legendBox.show(meta ? legendRows(on, data) : [], light ? [lightRow] : []);
const tail = [...(meta ? geologyTail(on, data.geology) : []), ...(light ? [lightRow] : [])];
legendBox.show(meta ? legendRows(on, data) : [], tail);
if (meta && on.slope && data.slope) legend.firstElementChild?.append(gear);
}
@@ -543,6 +545,9 @@ export function createPlanLayers(opts: {
} finally {
window.clearTimeout(slow);
}
} else if (key === "geology") {
got.geology = await fetchPlanGeology(projectId); // 암상(760-1) — GL 만 그림
put("geology", geologyCollection(got.geology));
} else if (key === "bands" || key === "roadBands") {
const info = await fetchPlanBands(projectId);
got.bands = {