항공영상TIF를 TMS로변환 가이드.md
· 5.8 KiB · Markdown
Ham
# 항공영상 TIF → TMS 타일 변환 가이드
대용량 항공영상(약 **1TB GeoTIFF**)을 **OpenLayers에서 사용할 TMS 타일**로 변환하는 절차를 정리한다.
본 가이드는 **GDAL 기반 처리**를 기준으로 작성되었으며 다음 환경을 기준으로 한다.
* GDAL (OSGeo4W)
* OpenLayers 3.x
* 좌표계: **EPSG:5187 → EPSG:3857**
* 타일 포맷: **JPEG**
* 타일 레벨: **16 ~ 20**
---
# 전체 작업 흐름
```
원본 TIFF
│
├─ 1. tif 정보 확인
│
├─ 2. JPEG 압축 GeoTIFF 생성 (용량 최적화)
│
├─ 3. 좌표계 변환 (5187 → 3857)
│
└─ 4. TMS 타일 생성
```
---
# 1. TIFF 정보 확인
먼저 원본 TIFF의 메타데이터를 확인한다.
```bash
gdalinfo "E:\UJ_2025_10.tif"
```
확인해야 할 주요 정보
| 항목 | 확인 이유 |
| ----------------- | -------------- |
| Coordinate System | 좌표변환 필요 여부 확인 |
| Pixel Size | 영상 해상도 확인 |
| Band Count | RGB인지 확인 |
| Image Size | 처리시간 예측 |
| Compression | 이미 압축된 파일인지 확인 |
### 주의사항
대용량 TIFF의 경우 아래 정보가 중요하다.
* **Band 수**
RGB 영상이라면 보통 **3 bands**
* **Block Size**
타일 생성 시 성능과 관련됨
* **BigTIFF 여부**
4GB 이상 파일은 BigTIFF 필요
---
# 2. 원본 TIFF 압축 저장 (JPEG 압축)
외장하드의 대용량 TIFF를 **로컬 SSD로 이동하면서 JPEG 압축 GeoTIFF 생성**.
```bash
gdal_translate -of GTiff ^
-b 1 -b 2 -b 3 ^
-co COMPRESS=JPEG ^
-co JPEG_QUALITY=70 ^
-co PHOTOMETRIC=YCBCR ^
-co TILED=YES ^
-co BLOCKXSIZE=512 ^
-co BLOCKYSIZE=512 ^
-co BIGTIFF=YES ^
-co NUM_THREADS=ALL_CPUS ^
--config GDAL_CACHEMAX 8192 ^
E:\UJ_2025_10.tif D:\tiffs\UJ_2025_10_extreme.tif
```
## 옵션 설명
| 옵션 | 설명 |
| -------------------- | ---------------- |
| -of GTiff | 출력 포맷 GeoTIFF |
| -b 1 -b 2 -b 3 | RGB 밴드 선택 |
| COMPRESS=JPEG | JPEG 압축 사용 |
| JPEG_QUALITY=70 | 압축 품질 (50~80 권장) |
| PHOTOMETRIC=YCBCR | JPEG 압축 효율 증가 |
| TILED=YES | 타일 구조 TIFF 생성 |
| BLOCKXSIZE=512 | 타일 크기 |
| BLOCKYSIZE=512 | 타일 크기 |
| BIGTIFF=YES | 4GB 이상 파일 지원 |
| NUM_THREADS=ALL_CPUS | CPU 멀티코어 사용 |
| GDAL_CACHEMAX | 메모리 캐시 (MB) |
---
## 성능 팁
### JPEG_QUALITY
| 값 | 용도 |
| -- | ------- |
| 90 | 고품질 |
| 70 | 일반 항공영상 |
| 50 | 최대 압축 |
항공영상 배경지도 용도라면
**70 추천**
---
### BLOCK SIZE
512x512 추천 이유
* GDAL 내부 처리 효율
* 타일 생성 속도 개선
* 디스크 IO 감소
---
### GDAL_CACHEMAX
메모리 캐시 설정
예시
```
--config GDAL_CACHEMAX 8192
```
의미
```
8GB 메모리 사용
```
---
# 3. 좌표변환 (EPSG:5187 → EPSG:3857)
OpenLayers에서 사용하려면 **Web Mercator(3857)** 좌표계로 변환한다.
```bash
gdalwarp -s_srs EPSG:5187 -t_srs EPSG:3857 ^
-r bilinear ^
-of GTiff ^
-co COMPRESS=JPEG -co JPEG_QUALITY=70 -co PHOTOMETRIC=YCBCR ^
-co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 ^
-co BIGTIFF=YES ^
-wm 8192 ^
--config GDAL_NUM_THREADS ALL_CPUS ^
D:\tiffs\UJ_2025_10_extreme.tif D:\tiffs\UJ_2025_10_3857_final.tif
```
---
## 옵션 설명
| 옵션 | 설명 |
| ---------------- | ---------------- |
| -s_srs | 원본 좌표계 |
| -t_srs | 목표 좌표계 |
| -r bilinear | 보간법 |
| -wm | warp memory (MB) |
| GDAL_NUM_THREADS | 멀티코어 사용 |
---
## 보간법 선택
| 옵션 | 용도 |
| -------- | ---------- |
| nearest | 범주형 데이터 |
| bilinear | 일반 영상 (추천) |
| cubic | 고품질 영상 |
항공영상은
**bilinear 추천**
---
# 4. TMS 타일 생성
최종적으로 **OpenLayers용 TMS 타일 생성**
```bash
gdal2tiles ^
--zoom=16-20 ^
--processes=8 ^
-w openlayers ^
--tmscompatible ^
--tiledriver=JPEG ^
D:\tiffs\UJ_2025_10_3857_final.tif D:\tiles\UJ_2025
```
---
## 옵션 설명
| 옵션 | 설명 |
| --------------- | ---------------- |
| --zoom | 생성 타일 레벨 |
| --processes | 멀티프로세스 수 |
| -w openlayers | OpenLayers 뷰어 생성 |
| --tmscompatible | TMS 방식 타일 |
| --tiledriver | JPEG 타일 |
---
## zoom 레벨 선택
일반적인 지도 기준
| Zoom | 용도 |
| ----- | ---- |
| 12~14 | 광역지도 |
| 15~17 | 도시 |
| 18~20 | 항공영상 |
항공영상은
```
16~20
```
추천
---
## processes 옵션
멀티코어 처리
예시
```
--processes=8
```
주의
CPU 코어보다 많으면 오히려 느려질 수 있음
---
# 최종 결과
| 항목 | 결과 |
| ------ | ------- |
| 원본파일 | 약 1TB |
| 압축파일 | 약 1.8GB |
| 압축시간 | 2시간 49분 |
| 좌표변환 | 28분 |
| TMS 생성 | 14시간 |
| TMS 파일 | 약 24GB |
---
# 추가 최적화 팁 (매우 중요)
### 1TB 영상 처리 권장 환경
| 항목 | 권장 |
| --- | -------- |
| RAM | 32GB 이상 |
| SSD | NVMe |
| CPU | 8core 이상 |
---
### 디스크 IO 병목 방지
가능하면
```
외장 HDD → SSD
```
로 복사 후 작업
---
### GDAL 병렬 처리
환경변수 추가 가능
```
set GDAL_NUM_THREADS=ALL_CPUS
```
---
# OpenLayers 사용 예시
```javascript
new ol.layer.Tile({
source: new ol.source.XYZ({
url: '/tiles/UJ_2025/{z}/{x}/{y}.jpg'
})
});
```
항공영상 TIF → TMS 타일 변환 가이드
대용량 항공영상(약 1TB GeoTIFF)을 OpenLayers에서 사용할 TMS 타일로 변환하는 절차를 정리한다.
본 가이드는 GDAL 기반 처리를 기준으로 작성되었으며 다음 환경을 기준으로 한다.
- GDAL (OSGeo4W)
- OpenLayers 3.x
- 좌표계: EPSG:5187 → EPSG:3857
- 타일 포맷: JPEG
- 타일 레벨: 16 ~ 20
전체 작업 흐름
원본 TIFF
│
├─ 1. tif 정보 확인
│
├─ 2. JPEG 압축 GeoTIFF 생성 (용량 최적화)
│
├─ 3. 좌표계 변환 (5187 → 3857)
│
└─ 4. TMS 타일 생성
1. TIFF 정보 확인
먼저 원본 TIFF의 메타데이터를 확인한다.
gdalinfo "E:\UJ_2025_10.tif"
확인해야 할 주요 정보
| 항목 | 확인 이유 |
|---|---|
| Coordinate System | 좌표변환 필요 여부 확인 |
| Pixel Size | 영상 해상도 확인 |
| Band Count | RGB인지 확인 |
| Image Size | 처리시간 예측 |
| Compression | 이미 압축된 파일인지 확인 |
주의사항
대용량 TIFF의 경우 아래 정보가 중요하다.
-
Band 수 RGB 영상이라면 보통 3 bands
-
Block Size 타일 생성 시 성능과 관련됨
-
BigTIFF 여부 4GB 이상 파일은 BigTIFF 필요
2. 원본 TIFF 압축 저장 (JPEG 압축)
외장하드의 대용량 TIFF를 로컬 SSD로 이동하면서 JPEG 압축 GeoTIFF 생성.
gdal_translate -of GTiff ^
-b 1 -b 2 -b 3 ^
-co COMPRESS=JPEG ^
-co JPEG_QUALITY=70 ^
-co PHOTOMETRIC=YCBCR ^
-co TILED=YES ^
-co BLOCKXSIZE=512 ^
-co BLOCKYSIZE=512 ^
-co BIGTIFF=YES ^
-co NUM_THREADS=ALL_CPUS ^
--config GDAL_CACHEMAX 8192 ^
E:\UJ_2025_10.tif D:\tiffs\UJ_2025_10_extreme.tif
옵션 설명
| 옵션 | 설명 |
|---|---|
| -of GTiff | 출력 포맷 GeoTIFF |
| -b 1 -b 2 -b 3 | RGB 밴드 선택 |
| COMPRESS=JPEG | JPEG 압축 사용 |
| JPEG_QUALITY=70 | 압축 품질 (50~80 권장) |
| PHOTOMETRIC=YCBCR | JPEG 압축 효율 증가 |
| TILED=YES | 타일 구조 TIFF 생성 |
| BLOCKXSIZE=512 | 타일 크기 |
| BLOCKYSIZE=512 | 타일 크기 |
| BIGTIFF=YES | 4GB 이상 파일 지원 |
| NUM_THREADS=ALL_CPUS | CPU 멀티코어 사용 |
| GDAL_CACHEMAX | 메모리 캐시 (MB) |
성능 팁
JPEG_QUALITY
| 값 | 용도 |
|---|---|
| 90 | 고품질 |
| 70 | 일반 항공영상 |
| 50 | 최대 압축 |
항공영상 배경지도 용도라면
70 추천
BLOCK SIZE
512x512 추천 이유
- GDAL 내부 처리 효율
- 타일 생성 속도 개선
- 디스크 IO 감소
GDAL_CACHEMAX
메모리 캐시 설정
예시
--config GDAL_CACHEMAX 8192
의미
8GB 메모리 사용
3. 좌표변환 (EPSG:5187 → EPSG:3857)
OpenLayers에서 사용하려면 Web Mercator(3857) 좌표계로 변환한다.
gdalwarp -s_srs EPSG:5187 -t_srs EPSG:3857 ^
-r bilinear ^
-of GTiff ^
-co COMPRESS=JPEG -co JPEG_QUALITY=70 -co PHOTOMETRIC=YCBCR ^
-co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 ^
-co BIGTIFF=YES ^
-wm 8192 ^
--config GDAL_NUM_THREADS ALL_CPUS ^
D:\tiffs\UJ_2025_10_extreme.tif D:\tiffs\UJ_2025_10_3857_final.tif
옵션 설명
| 옵션 | 설명 |
|---|---|
| -s_srs | 원본 좌표계 |
| -t_srs | 목표 좌표계 |
| -r bilinear | 보간법 |
| -wm | warp memory (MB) |
| GDAL_NUM_THREADS | 멀티코어 사용 |
보간법 선택
| 옵션 | 용도 |
|---|---|
| nearest | 범주형 데이터 |
| bilinear | 일반 영상 (추천) |
| cubic | 고품질 영상 |
항공영상은
bilinear 추천
4. TMS 타일 생성
최종적으로 OpenLayers용 TMS 타일 생성
gdal2tiles ^
--zoom=16-20 ^
--processes=8 ^
-w openlayers ^
--tmscompatible ^
--tiledriver=JPEG ^
D:\tiffs\UJ_2025_10_3857_final.tif D:\tiles\UJ_2025
옵션 설명
| 옵션 | 설명 |
|---|---|
| --zoom | 생성 타일 레벨 |
| --processes | 멀티프로세스 수 |
| -w openlayers | OpenLayers 뷰어 생성 |
| --tmscompatible | TMS 방식 타일 |
| --tiledriver | JPEG 타일 |
zoom 레벨 선택
일반적인 지도 기준
| Zoom | 용도 |
|---|---|
| 12~14 | 광역지도 |
| 15~17 | 도시 |
| 18~20 | 항공영상 |
항공영상은
16~20
추천
processes 옵션
멀티코어 처리
예시
--processes=8
주의
CPU 코어보다 많으면 오히려 느려질 수 있음
최종 결과
| 항목 | 결과 |
|---|---|
| 원본파일 | 약 1TB |
| 압축파일 | 약 1.8GB |
| 압축시간 | 2시간 49분 |
| 좌표변환 | 28분 |
| TMS 생성 | 14시간 |
| TMS 파일 | 약 24GB |
추가 최적화 팁 (매우 중요)
1TB 영상 처리 권장 환경
| 항목 | 권장 |
|---|---|
| RAM | 32GB 이상 |
| SSD | NVMe |
| CPU | 8core 이상 |
디스크 IO 병목 방지
가능하면
외장 HDD → SSD
로 복사 후 작업
GDAL 병렬 처리
환경변수 추가 가능
set GDAL_NUM_THREADS=ALL_CPUS
OpenLayers 사용 예시
new ol.layer.Tile({
source: new ol.source.XYZ({
url: '/tiles/UJ_2025/{z}/{x}/{y}.jpg'
})
});