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:
@@ -1,7 +1,7 @@
|
||||
"""그림 조각 대리 — 바깥 WMS 를 웹 메르카토르 z/x/y 256 px PNG 로(PLAN 622-1 · 요구 529).
|
||||
|
||||
- 겹 = `SOURCES`(ecology 생태자연도 오픈API · landslide 생활안전지도 산사태위험지도) · 조각 상자
|
||||
= EPSG:3857 bbox 그대로 요청(두 곳 모두 3857 받음 · 옮겨 그리기 없음).
|
||||
- 겹 = `SOURCES`(ecology 생태자연도 오픈API · landslide 생활안전지도 산사태위험지도 · geology 지오빅데이터
|
||||
수치지질도 1:50,000 · 760-1) · 조각 상자 = EPSG:3857 bbox 그대로 요청(모두 3857 받음 · 옮겨 그리기 없음).
|
||||
- 처음 받고 기억 = `storage/_shared/wms_tiles/<name>/z/x/y.png`(영구 · `.part` → 바꿈) · 빈 조각
|
||||
(전부 투명) · 오류 조각 = 서버 메모리에 `SHORT_S` 초만 기억하고 투명 PNG.
|
||||
- 키 = `.env`(`SOURCES` 의 key_env) · 없으면 `MissingKeyError` · 키 값은 어떤 로그 · 응답에도 안 냄
|
||||
@@ -25,6 +25,9 @@ from uuid import uuid4
|
||||
|
||||
from common_util.common_util_contour_tiles import tile_bounds
|
||||
from config.config_system import STORAGE_BASE_DIR
|
||||
from D03_PlanAnalysis.D03_PlanAnalysis_Geology import KEY_ENV as GEOLOGY_KEY_ENV
|
||||
from D03_PlanAnalysis.D03_PlanAnalysis_Geology import MAP_LAYER as GEOLOGY_LAYER
|
||||
from D03_PlanAnalysis.D03_PlanAnalysis_Geology import WMS_URL as GEOLOGY_WMS_URL
|
||||
from D03_PlanAnalysis.D03_PlanAnalysis_Landslide import (
|
||||
LANDSLIDE_KEY_ENV,
|
||||
LANDSLIDE_LAYER,
|
||||
@@ -43,12 +46,13 @@ TIMEOUT_S = 30 # 생태자연도 한 조각이 8~15 s 걸릴 때 있음
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Source:
|
||||
"""WMS 하나 — 주소 · 키 칸 · 고정 인자 · 상자 좌표계 칸 이름."""
|
||||
"""WMS 하나 — 주소 · 키 칸 · 고정 인자 · 상자 좌표계 칸 이름 · 키 쿼리 이름."""
|
||||
|
||||
url: str
|
||||
key_env: str
|
||||
params: dict[str, str] = field(default_factory=dict)
|
||||
srs_param: str = "srs"
|
||||
key_param: str = "serviceKey"
|
||||
|
||||
|
||||
SOURCES: dict[str, Source] = {
|
||||
@@ -63,6 +67,20 @@ SOURCES: dict[str, Source] = {
|
||||
LANDSLIDE_KEY_ENV,
|
||||
{"layers": LANDSLIDE_LAYER, "styles": "", "format": "image/png", "transparent": "TRUE"},
|
||||
),
|
||||
"geology": Source(
|
||||
GEOLOGY_WMS_URL,
|
||||
GEOLOGY_KEY_ENV,
|
||||
{
|
||||
"service": "WMS",
|
||||
"version": "1.1.1",
|
||||
"request": "GetMap",
|
||||
"layers": GEOLOGY_LAYER,
|
||||
"styles": "",
|
||||
"format": "image/png",
|
||||
"transparent": "true",
|
||||
},
|
||||
key_param="key",
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +120,7 @@ def fetch(name: str, z: int, x: int, y: int) -> bytes:
|
||||
"width": str(TILE_PX),
|
||||
"height": str(TILE_PX),
|
||||
}
|
||||
url = f"{source.url}?serviceKey={_key(source)}&{urllib.parse.urlencode(query)}"
|
||||
url = f"{source.url}?{source.key_param}={_key(source)}&{urllib.parse.urlencode(query)}"
|
||||
request = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
||||
try:
|
||||
with urllib.request.urlopen(request, timeout=TIMEOUT_S) as response:
|
||||
|
||||
Reference in New Issue
Block a user