제공해주신 스크립트는 **GDAL**의 핵심 도구들을 아주 효율적으로 연결한 훌륭한 워크플로우입니다. 특히 직접 파일 형식을 변환(Translate)하지 않고 가상 데이터셋인 **VRT**를 활용해 중간 과정의 스토리지 낭비와 시간 소모를 최소화한 점이 인상적입니다. 요청하신 고용량 ECW 파일을 TMS(Tile Map Service) JPG로 변환하는 표준 가이드를 정리해 드립니다. --- ## 🗺️ 고용량 ECW 파일을 TMS 타일로 변환하는 가이드 본 가이드는 대용량 항공사진이나 위성영상(ECW)을 웹 지도 서비스(OpenLayers, Leaflet 등)에서 사용할 수 있도록 **EPSG:3857(Web Mercator)** 좌표계 기반의 JPG 타일로 변환하는 과정을 설명합니다. ### 1. 작업 프로세스 개요 전체 과정은 실제 데이터를 물리적으로 계속 복사하는 대신, **VRT(Virtual Format)**를 통해 설정값만 저장한 뒤 마지막 단계에서 한 번에 타일을 굽는 방식을 권장합니다. | 단계 | 도구 | 주요 목적 | | --- | --- | --- | | **Step 0** | `gdalinfo` | 원본 파일의 좌표계 및 밴드 구성 확인 | | **Step 1** | `gdalwarp` | 원본 좌표계(예: EPSG:5187)를 웹 좌표계(EPSG:3857)로 재투영 | | **Step 2** | `gdal_translate` | 타일 생성에 불필요한 밴드 제거 및 데이터 포맷(Byte) 최적화 | | **Step 3** | `gdal2tiles` | 최종 VRT를 바탕으로 실제 물리적 타일(JPG) 생성 | --- ### 2. 단계별 상세 실행 절차 #### Step 0: 메타데이터 확인 변환 전, 원본의 `Upper Left`, `Lower Right` 좌표와 정의된 EPSG 코드를 반드시 확인해야 합니다. ```bash gdalinfo "input_path.ecw" ``` #### Step 1: 좌표계 변환 및 VRT 생성 ECW는 보통 국가 표준 좌표계를 사용하므로, 웹에서 쓰이는 Web Mercator로 변환이 필요합니다. * **`-of VRT`**: 물리적 파일을 만들지 않고 설정 파일만 생성하여 속도가 빠릅니다. * **`-s_srs` / `-t_srs**`: 소스 좌표계와 타겟 좌표계를 명시합니다. ```bash gdalwarp -of VRT -s_srs EPSG:5187 -t_srs EPSG:3857 ^ -co "BLOCKXSIZE=256" -co "BLOCKYSIZE=256" ^ "input.ecw" "step1_warped.vrt" ``` #### Step 2: 밴드 구성 및 데이터 타입 최적화 웹 타일은 보통 RGB(3밴드)를 사용합니다. 4번째 밴드(Alpha/Infrared)가 있거나 데이터 타입이 Float인 경우, 이를 `Byte` 타입으로 고정하여 용량을 줄입니다. ```bash gdal_translate -of VRT -b 1 -b 2 -b 3 -ot Byte "step1_warped.vrt" "step2_final.vrt" ``` #### Step 3: TMS 타일 생성 (최종 단계) 실제 CPU 연산이 가장 많이 일어나는 구간입니다. * **`--processes=N`**: 멀티코어를 활용하여 속도를 높입니다. * **`-z 16-21`**: 줌 레벨을 설정합니다. (고해상도일수록 뒷 숫자를 키움) * **`--tiledriver=JPEG`**: 용량 효율을 위해 PNG 대신 JPEG를 사용합니다. (배경 투명도가 필요 없으나 용량이 중요한 경우 최적) ```bash set GDAL_CACHEMAX=16384 gdal2tiles --processes=8 ^ -z 16-21 ^ -w openlayers ^ --tmscompatible ^ --tiledriver=JPEG ^ "step2_final.vrt" "./output_folder" ``` --- ### 3. 주요 팁 및 주의사항 * **메모리 활용 (`GDAL_CACHEMAX`)**: 시스템 RAM이 넉넉하다면 `GDAL_CACHEMAX`를 높게 설정하세요. 2GB 이상의 파일을 다룰 때는 최소 4096(4GB) 이상을 권장합니다. * **용량 최적화**: 작성하신 스크립트에서 2GB ECW가 188MB JPG 타일로 줄어든 것은 매우 효율적인 결과입니다. 만약 용량을 더 줄여야 한다면 `--xyz` 방식 검토나 JPEG 퀄리티 조절이 필요할 수 있습니다. * **병렬 처리**: `--processes` 옵션은 본인 컴퓨터의 논리 프로세서(Thread) 수에 맞춰 조절하면 비약적인 속도 향상을 볼 수 있습니다. * **VRT의 이점**: 중간 단계에서 `warped.tif` 같은 대용량 파일을 생성하지 않으므로 디스크 I/O 병목 현상을 방지할 수 있습니다.