다중차원 래스터 데이터 모델

이 문서에서는 GDAL 3.1버전에서 추가된 GDAL 다중차원 데이터 모델을 설명하려 합니다. GDAL 다중차원 데이터 저장소가 담을 수 있는 정보의 유형 및 그 의미를 서술합니다.

다중차원 래스터 API는 3차원, 4차원 또는 그 이상의 차원 데이터셋을 처리하기 위해 전통적인 래스터 데이터 모델 을 일반화한 것입니다. 현재 기본적인 읽기/쓰기 API로 제한되어 있으며, 다른 고급 수준 유틸리티의 플러그인으로 제대로 구현되지 않았습니다.

이 모델은 netCDF 및 HDF5의 API와 데이터 모델로부터 크게 영향을 받았습니다. HDF5 포맷 및 데이터 모델 을 참조하십시오.

다중차원 콘텐츠를 가진 GDALDataset 클래스는 루트 GDALGroup 클래스를 담고 있습니다.

그룹

(HDF5 그룹 을 모델링한) GDALGroup 클래스는 GDALAttribute, GDALMDArray 또는 다른 GDALGroup의 명명 컨테이너입니다. 즉 GDALGroup이 객체의 계층(hierarchy)을 서술할 수 있습니다.

속성

(HDF5 속성 을 모델링한) GDALAttribute 클래스는 이름과 값을 가지며, 일반적으로 메타데이터 항목을 서술하는 데 쓰입니다. (HDF5 포맷의 경우) 이 값은 일반적으로 “모든” 유형의 다중차원 배열이 될 수 있습니다. (대부분의 경우, 문자열 또는 숫자 유형의 단일값일 것입니다.)

다중차원 배열

(HDF5 데이터셋 을 모델링한) GDALMDArray 클래스는 이름, 다중차원 배열 및 GDALAttribute 목록을 가지며 GDALDimension 여러 개를 참조합니다.

대부분의 드라이버는 차원에 행 우선(row-major) 규범을 사용합니다. 다시 말하자면 메모리에 배열 요소들을 연속해서 저장한다고 할 때, 첫 번째 차원이 가장 느린 가변 차원(2차원 이미지에서의 행)이고 마지막 차원이 가장 빠른 가변 차원(2차원 이미지에서의 열)이라는 뜻입니다. 이 규범이 NumPy 배열, MEM 드라이버와 HDF5 및 netCDF API에 사용되는 기본 규범입니다. GDALAbstractMDArray::Read()GDALAbstractMDArray::Write() 메소드에 NULL 배열을 ‘stride’ 파라미터로 전송하는 경우를 제외하고, 대부분의 경우 GDAL API는 이 규범을 이해하지 못 하더라도 기능을 수행할 수 있습니다. 다중차원 배열 색인 작업 순서 문제점에 관한 NumPy 문서 를 참조하십시오.

GDALMDArray는 선택적인 속성도 가지고 있습니다:

  • 좌표계: OGRSpatialReference

  • NODATA 값

  • 단위

  • 오프셋: unscaled_value = offset + scale * raw_value

  • 척도: unscaled_value = offset + scale * raw_value

배열에 GDALMDArray::Transpose(), GDALMDArray::GetView() 등등의 여러 작업을 적용해서 배열의 수정된 뷰를 얻을 수 있습니다.

GDALMDArray::Cache() 메소드를 사용해서 사이드카 파일에 뷰 배열의 값을 캐시할 수 있습니다.

차원

GDALDimension 클래스는 다중차원 배열을 색인하기 위해 사용되는 차원/축을 서술합니다. 이 클래스는 다음 속성들을 가집니다:

  • 이름

  • 크기: 차원을 따라 색인할 수 있는 값의 개수입니다.

  • 유형: 차원의 본질을 나타내는 문자열로, HORIZONTAL_X, HORIZONTAL_Y, VERTICAL, TEMPORAL, 그리고 PARAMETRIC 값이 사전 정의되어 있습니다. 다른 값을 사용할 수도 있습니다. 비어 있는 값은 알 수 없다는 의미입니다.

  • 방향: EAST, WEST, SOUTH, NORTH, UP, DOWN, FUTURE, 그리고 PAST 값이 사전 정의되어 있습니다. 다른 값을 사용할 수도 있습니다. 비어 있는 값은 알 수 없다는 의미입니다.

  • 참조: 차원이 취하는 값을 설명하는, 일반적으로 1차원인 GDALMDArray를 가리킵니다. 지리참조된 GDALMDArray와 그 X 차원의 경우, 일반적으로 각 그리드 포인트에 대한 편동/경도의 값일 것입니다.

데이터 유형

(HDF5 데이터 유형 을 모델링한) GDALExtendedDataType 클래스는 GDALAttribute 또는 GDALMDArray의 개별 값이 취하는 유형을 서술합니다. NUMERIC, STRING 또는 COMPOUND 클래스 가운데 하나일 수 있습니다. NUMERIC 클래스의 경우, 기존 GDALDataType 값들의 목록을 지원합니다. COMPOUND 클래스의 데이터 유형은 복합 구조(compound structure) 및 GDALExtendedDataType에 있는 바이트 단위 오프셋인 각 멤버를 이름으로 설명하는 멤버 목록입니다.

Note

HDF5 모델화는 더 복잡한 데이터 유형을 사용할 수 있게 해줍니다.

Note

HDF5는 복소수형 값에 대한 네이티브 데이터 유형을 가지고 있지 않은 반면 GDALDataType은 가지고 있습니다. 따라서 드라이버가 복소수 값을 표현하는 HDF5 복합 데이터 유형으로부터 GDT_Cxxxx 데이터유형을 노출시키도록 결정할 수도 있습니다.

GDAL 2차원 래스터 데이터 모델과의 차이점

  • 다중차원 데이터에 대해 GDALRasterBand 개념을 더 이상 사용하지 않습니다. 다른 GDALMDArray로 모델링하거나, 또는 복합 데이터 유형을 사용해서 모델링할 수 있습니다.

전통적인 GDAL 2차원 래스터 데이터 모델과 다중차원 데이터 모델 사이의 가교

GDALRasterBand::AsMDArray()GDALMDArray::AsClassicDataset() 함수를 사용해서 각각 래스터 밴드를 다중차원 배열로 또는 2차원 데이터셋을 다중차원 배열로 변환할 수 있습니다.

응용 프로그램

다음 응용 프로그램들을 사용해서 다중차원 데이터셋을 조사하고 조정할 수 있습니다: