gdal2tile로 슈퍼 오버레이 만들기

Mano Marks, Google Geo API팀
2009년 9월

목표

이 튜토리얼에서는 오픈소스 지리정보 데이터 추상화 라이브러리 유틸리티를 사용하여 지역 기반 네트워크 링크를 사용하는 지면 오버레이 모음인 수퍼 오버레이를 만드는 기본사항을 설명합니다.

소개

Google 어스 및 Google 지도와 같은 지오브라우저는 위성 이미지와 지도 타일을 제공합니다. 그러나 경우에 따라 자체 태그를 사용할 수도 있습니다. 이미지 또는 래스터 데이터는 다양한 형태로 제공되며 용도가 다양합니다.

  • 지리정보 브라우저에 자체 위성 또는 항공 이미지 배치
  • Google 어스의 럼지 지도 레이어와 같은 기존 이미지 위에 역사 지도 배치
  • 래스터 형식의 GIS 데이터 가져오기
  • 지리 정보 브라우저에 LIDAR 또는 적외선 이미지를 배치

그러나 고해상도 래스터 데이터의 문제 중 하나는 데이터를 표시하는 데 많은 메모리가 필요하다는 점입니다. 네트워크 너머로 밀려나게 되면 대역폭도 우려됩니다. 이 문제를 해결하려면 카드를 만들어야 합니다.

타일을 사용하면 이미지 파일이 표시될 때 로드되는 여러 다른 이미지로 분할됩니다. 사용자가 화면을 축소하는 동안 화면에 표시할 저해상도 이미지를 하나 만듭니다. 같은 영역에서 더 가까이에서 볼 수 있도록 고해상도 이미지 4개를 만듭니다. 이미지가 오버레이된 영역별로 확대/축소 등을 위해 고해상도 이미지를 4개 더 만듭니다. 이를 쿼드트리 메서드라고 하며 Google 어스 및 Google 지도에서 이미지를 타일하는 방법입니다. 이 절차는 지역에 관한 KML 개발자 가이드 도움말에서 자세히 설명합니다.

Adobe의 PhotosShop 또는 GIMP와 같은 그래픽 편집 애플리케이션을 사용하여 이 작업을 수동으로 수행할 수 있지만, 이 과정은 복잡하고 지루하며 오류가 발생하기 쉽습니다. Windows용 SuperOverlay, Arc2Earth, MapCruncher와 같이 CrunchUp2KML을 비롯하여 좋은 애플리케이션이 많이 있습니다.

프로세스를 자동화하거나 자체 애플리케이션에 기능을 추가하려는 경우 GDAL은 래스터 및 벡터 데이터 작업을 위한 다양한 도구 모음을 제공합니다. 이 도움말에서는 명령줄 옵션을 다룹니다. 그러나 라이브러리는 자체 애플리케이션에 쉽게 통합할 수도 있습니다. 이 튜토리얼에서는 gdalinfo, gdal_translate, gdalwarp, gdal2tiles 유틸리티를 사용합니다. 최종 출력은 슈퍼 오버레이(Super-Overlay)입니다.

명령줄 단계

명령줄에서 GDAL을 사용하려면 6단계를 거쳐야 합니다.

  1. GDAL 다운로드 및 설치하기
  2. 이미지 다운로드하기
  3. gdalinfo를 사용하여 이미지 정보 확인하기
  4. gdal_translate를 사용하여 이미지의 위치정보 참조
  5. gdalwarp를 사용하여 이미지의 프로젝션 변경
  6. gdal2tiles를 사용하여 이미지를 타일로 나누고 연결된 KML 코드를 만듭니다.

1단계: GDAL 다운로드 및 설치하기

먼저 여기에 설명된 대로 GDAL을 다운로드하고 설치합니다.

2단계: 이미지 다운로드하기

모든 이미지를 사용할 수 있습니다. 웹에는 다양한 지리 데이터 소스가 있습니다. 이를 사용할 수는 있지만 이미지의 경계(이미지의 각 모서리의 위도 및 경도)를 알아야 합니다. 이 튜토리얼에서는 NASA 웹사이트에서 다운로드할 수 있는 NASA Blue Marble 이미지를 사용합니다. 2004년에 촬영한 이미지로, 우주에서 본 지구의 아름다운 이미지를 담고 있습니다. 오른쪽 탐색 메뉴의 오른쪽 하단에 있는 파일 중 하나를 선택합니다.

자체 이미지를 사용 중이며 이미 위치정보가 정해져 있는 경우 5단계로 건너뛸 수 있습니다. 그렇지 않으면 3단계로 진행합니다.

3단계: 이미지 정보 가져오기

GDAL 라이브러리를 설치하고 이미지를 선택한 후 위치정보를 참조할 수 있도록 이미지에 관한 정보를 가져와야 합니다. 특히 이미지의 각 모서리에 픽셀과 선 위치가 필요합니다. 이미지를 열과 행으로 표로 만든 경우 픽셀은 열이고 줄은 행입니다.

GDAL은 이 정보를 캡처하는 편리한 유틸리티인 gdalinfo를 제공합니다. 명령줄에서 gdalinfo filename을 입력하고 filename을 파일 경로로 바꿉니다. 다음과 같은 출력이 표시됩니다.

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

이 튜토리얼에서 중요한 정보는 왼쪽 상단, 왼쪽 하단, 오른쪽 상단, 오른쪽 하단 선입니다. 각 모서리의 픽셀 및 선 값을 알 수 있습니다. 이 경우 왼쪽 상단은 0,0이고 오른쪽 하단은 21600,10800입니다.

4단계: 이미지 위치정보 참조

이 경우 지리적 참조는 이미지의 각 모서리의 지리적 위치를 설명하는 메타데이터를 만드는 것을 의미합니다. 3단계와 gdal_translate에서 얻은 정보를 사용하여 위치정보 참조 정보를 파일에 할당할 수 있습니다. 그러면 world_200401.jpg 이미지 bluemarble1.vrt에서 VRT 파일이 생성됩니다. VRT 파일은 특정 변환(이 경우 gdal_translate 단계)에 관한 정보가 포함된 XML 파일입니다. 다음 단계에서 다시 사용하여 최종 타일 집합을 만듭니다. gdal_translate를 사용하면 주요 이미지 파일 형식을 비롯한 여러 파일 출력 유형을 실행할 수 있습니다. VRT 출력을 사용하면 기본적으로 마지막 단계까지 출력 파일 생성을 보류할 수 있습니다. 명령줄을 사용하면 효율성이 향상되고 개별 단계의 대기 시간이 줄어듭니다. 실행하는 명령어는 다음과 같습니다.

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

이 줄에는 많은 정보가 있기 때문에 구분되어 있습니다.

  • -of은 출력 형식입니다(이 경우 VRT).
  • -a_srs는 공간 참조 시스템을 파일에 할당합니다. 이는 이를 사용하는 모든 애플리케이션에 사용 중인 좌표계를 알려줍니다. 이 경우에는 Google 어스에서 사용하는 좌표계인 WGS84와 동일한 EPSG:4326을 사용합니다.
  • -gcp(지면 제어 지점)는 파일의 위치에 좌표를 할당합니다. 이 경우에는 이미지가 직사각형이기 때문에 실제로 세 개의 점만 필요합니다. 따라서 네 번째 점은 쉽게 식별할 수 있습니다. -gcp의 경우 픽셀, 줄 번호, 경도 및 위도를 설정하여 gcp를 정의합니다. 각 항목은 공백으로 구분됩니다.
  • 마지막 두 매개변수는 원본 파일과 타겟 파일입니다.

5단계: 이미지 왜곡

원본 이미지는 둥근 지구에서 만들어지지 않았으며 평평하게 보이게 만들어졌습니다. GIS 용어에서 이는 프로젝션입니다. 즉, 3차원 객체의 2차원 표현입니다. 투영을 사용하려면 이미지가 왜곡되어야 합니다. 그래야 지구의 평평한 이미지가 어떻게 표시될지 예상할 수 있습니다.

올바르게 표시되도록 하려면 지구본에 맞추어 이미지를 왜곡해야 합니다. 다행히도, GDAL은 이를 위한 훌륭한 도구를 제공합니다. gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt만 입력하면 됩니다. 이렇게 하면 워핑 절차에 대한 메타데이터를 제공하는 새 파일 Bluemarble2.vrt가 생성됩니다.

6단계: 카드 만들기

거의 완료되었습니다. 하지만 이 부분은 시간이 더 오래 걸립니다. 타일을 만들려면 gdal2tiles.py -p geodetic -k bluemarble2.vrt를 입력합니다. -k는 KML 출력을 강제로 생성합니다. 그러면 슈퍼 오버레이가 포함된 디렉터리 구조가 생성됩니다. 각 이미지 파일을 별도로 만들어야 하므로 실행하는 데 다소 시간이 걸립니다. 이미지가 큰 경우 이제 커피를 마시고 낮잠을 자거나 간단한 식사를 할 수 있습니다. 완료되면 doc.kml를 열고 결과를 관찰합니다.

마무리

이 튜토리얼에서는 GDAL이 할 수 있는 작업을 간략하게만 설명하지만 카드를 생성하는 편리한 메커니즘이 제공됩니다. 핵심 GDAL 라이브러리는 C++로 작성되지만 Perl, Python, VB6, R, Ruby, 자바, C#/.NET의 결합이 제공되므로 GDAL을 자체 애플리케이션에 쉽게 통합할 수 있습니다. 또한 gdal2tiles를 비롯한 많은 유틸리티가 Python으로 작성되어 Python 애플리케이션에 쉽게 통합할 수 있습니다. gdal2tiles에는 Google Maps APIOpenLayers 페이지도 생성할 수 있습니다.