## πŸ—ΊοΈ κ³ μš©λŸ‰ 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 병λͺ© ν˜„μƒμ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. --- ### **μ΅œμ’… κ²°κ³Ό μš”μ•½** * **μ‹œμž‘ 파일 포맷:** ECW * **μ‹œμž‘ 파일 μš©λŸ‰:** μ•½ 2.2GB * **λ³€ν™˜ 파일 포맷:** JPEG (.jpg) * **λ³€ν™˜ 파일 μš©λŸ‰:** μ•½ 188MB * **ν˜Έν™˜μ„±:** GeoServer TMS ν‘œμ€€ 및 OpenLayers μ΅œμ ν™”