FITS – 유연한 이미지 전송 시스템(Flexible Image Transport System)
드라이버 단축 이름
FITS
빌드 의존성
libcfitsio
FITS는 주로 우주비행사들이 사용하는 포맷이지만, 임의의 이미지 유형들 및 다중 스펙트럼 이미지를 지원하는 상대적으로 단순한 포맷이기 때문에 GDAL이 지원합니다. 표준 CFITSIO 라이브러리 로 FITS 지원을 구현했기 때문에, 사용자 시스템에서 FITS 지원을 활성화하려면 사용자 시스템에 이 라이브러리가 설치되어 있어야만 합니다. (CFITSIO 링크 작업에 대한 메모 를 참조하십시오.) FITS 파일 읽기 및 쓰기 둘 다 지원합니다.
표준 3.0버전부터, WCS(World Coordinate System) 키워드 변환을 통해 지리참조 좌표계를 구현했습니다. 원격 탐사 처리 과정에서 흔히 쓰이는 위도-경도 좌표계들만 (FITS 표준 문서 참조) 구현되었습니다. FITS/WCS 표준에 3차원 원점(datum)이 누락되었기 때문에, 여기 에서 제안하는 행성 확장 프로그램을 이용해서 반경 및 대상 천체를 변환합니다.
파일을 열 때 GDAL 메소드를 통한 접근을 위해 데이터셋의 메타데이터에 FITS 파일에 존재하는 비표준 헤더 키워드를 복사할 것입니다. 마찬가지로, GDAL 처리를 종료할 때 FITS 파일에 사용자가 데이터셋의 메타데이터에 정의한 비표준 헤더 키워드를 작성할 것입니다.
CFITSIO 라이브러리에 친숙한 사용자에게: GDAL 3.0 미만 버전에서는 FITS 파일에 BSCALE 및 BZERO 헤더 키워드가 존재하는 경우 촉발되는 데이터 값의 자동 크기 조정이 비활성화됩니다. 다른 모든 헤더 키워드와 마찬가지로 이 헤더 키워드들도 데이터셋 메타데이터를 통해 접근 및 업데이트할 수 있지만, 이 키워드들이 파일로부터 데이터 값 읽기 또는 파일에 데이터 값을 쓰기에 영향을 미치지는 않습니다. GDAL 3.0버전부터, BZERO 및 BSCALE 키워드를 더 이상 메타데이터로 참조하지 않고서도 표준 GDALRasterBand::GetOffset()
/ GDALRasterBand::SetOffset()
및 GDALRasterBand::GetScale()
/ GDALRasterBand::SetScale()
GDAL 함수를 통해 관리할 수 있습니다.
다중 이미지 지원
GDAL 3.2버전부터, 제1 HDU 뒤에 하나 이상의 확장자를 담고 있는 MEF(Multi-Extension FITS) 파일을 지원합니다. 2개 이상의 이미지 HDU가 검색된 경우, 이 이미지들을 하위 데이터셋으로 리포트합니다.
입력 데이터셋/HDU를 위한 연결 문자열은 FITS:"filename.fits":hdu_number
입니다.
바이너리 테이블 지원
GDAL 3.2버전부터, 바이너리 테이블을 벡터 레이어로 노출시킬 것입니다. (업데이트 및 생성은 GDAL 3.2.1부터 지원합니다.)
FITS 데이터 유형은 OGR 데이터 유형에 다음과 같이 매핑됩니다:
TFORM 값 |
TSCAL, TOFFSET 값 |
발생 횟수 |
OGR 필드 유형 |
OGR 필드 하위 유형 |
---|---|---|---|---|
‘L’ (진릿값) |
무시됨 |
1 |
OFTInteger |
OFSTBoolean |
‘L’ (진릿값) |
무시됨 |
1 초과 |
OFTIntegerList |
OFSTBoolean |
‘X’ (비트) |
무시됨 |
OGR 필드에 각 비트를 매핑 |
OFTInteger |
OFSTNone |
‘B’ (부호 없는 바이트) |
1, 0 (부호 없는 바이트) 또는 1, -128 (부호 있는 바이트) |
1 |
OFTInteger |
OFSTNone |
‘B’ (부호 없는 바이트) |
1, 0 (부호 없는 바이트) 또는 1, -128 (부호 있는 바이트) |
1 초과 |
OFTIntegerList |
OFSTNone |
‘I’ (16비트 부호 있는 정수) |
1, 0 |
1 |
OFTInteger |
OFSTInt16 |
‘I’ (16비트 정수, 부호 없는 것으로 해석) |
1, 32768 |
1 |
OFTInteger |
OFSTNone |
‘I’ (16비트 부호 있는 정수) |
(1,0) 및 (1,32768) 이외 |
1 |
OFTReal |
OFSTNone |
‘I’ (16비트 정수) |
1, 0 |
1 초과 |
OFTIntegerList |
OFSTInt16 |
‘I’ (16비트 정수, 부호 없는 것으로 해석) |
1, 32768 |
1 초과 |
OFTIntegerList |
OFSTNone |
‘I’ (16비트 부호 있는 정수) |
(1,0) 및 (1,32768) 이외 |
1 초과 |
OFTRealList |
OFSTNone |
‘J’ (32비트 부호 있는 정수) |
1, 0 |
1 |
OFTInteger |
OFSTNone |
‘J’ (32비트 정수, 부호 없는 것으로 해석) |
1, 2147483648 |
1 |
OFTInteger |
OFSTNone |
‘J’ (32비트 부호 있는 정수) |
(1,0) 및 (1,2147483648) 이외 |
1 |
OFTReal |
OFSTNone |
‘J’ (32비트 정수) |
1, 0 |
1 초과 |
OFTIntegerList |
OFSTNone |
‘J’ (32비트 정수, 부호 없는 것으로 해석) |
1, 2147483648 |
1 초과 |
OFTIntegerList |
OFSTNone |
‘J’ (32비트 부호 있는 정수) |
(1,0) 및 (1,2147483648) 이외 |
1 초과 |
OFTRealList |
OFSTNone |
‘K’ (64비트 부호 있는 정수) |
1, 0 |
1 |
OFTInteger64 |
OFSTNone |
‘K’ (64비트 부호 있는 정수) |
(1,0) 이외 |
1 |
OFTReal |
OFSTNone |
‘K’ (64비트 부호 있는 정수) |
1, 0 |
1 초과 |
OFTInteger64 |
OFSTNone |
‘K’ (64비트 부호 있는 정수) |
(1,0) 이외 |
1 초과 |
OFTRealList |
OFSTNone |
‘A’ (문자) |
무시됨 |
TFORM=’Axxx’이면 TDIM 헤더 없음 |
OFTString |
OFSTNone |
‘A’ (문자) |
무시됨 |
2차원 필드에 대한 TDIM, 또는 변수 길이(‘PA’) |
OFTStringList |
OFSTNone |
‘E’ (단정밀도 부동소수점) |
1, 0 |
1 |
OFTReal |
OFSTFloat32 |
‘E’ (단정밀도 부동소수점) |
(1,0) 이외 |
1 |
OFTReal |
OFSTNone |
‘E’ (단정밀도 부동소수점) |
1, 0 |
1 초과 |
OFTRealList |
OFSTFloat32 |
‘E’ (단정밀도 부동소수점) |
(1,0) 이외 |
1 초과 |
OFTRealList |
OFSTNone |
‘D’ (배정밀도 부동소수점) |
모든 값 가능 |
1 |
OFTReal |
OFSTNone |
‘D’ (배정밀도 부동소수점) |
모든 값 가능 |
1 초과 |
OFTRealList |
OFSTNone |
‘C’ (단정밀도 복소수) |
모든 값 가능 |
1 |
값이 “x + yj” 형태인 OFTString |
OFSTNone |
‘C’ (단정밀도 복소수) |
모든 값 가능 |
1 초과 |
값이 “x + yj” 형태인 OFTStringList |
OFSTNone |
‘M’ (배정밀도 복소수) |
모든 값 가능 |
1 |
값이 “x + yj” 형태인 OFTString |
OFSTNone |
‘M’ (배정밀도 복소수) |
모든 값 가능 |
1 초과 |
값이 “x + yj” 형태인 OFTStringList |
OFSTNone |
고정 크기 배열을 표현하는, 반복 횟수가 1을 초과하는 필드 또는 변수 길이 배열에 배열 서술자(descriptor) ‘P’와 ‘Q’를 사용하는 필드를 OGR OFTxxxxxList 데이터 유형과 매핑합니다. OGR이 이런 필드의 잠재적인 2차원 구조에 직접 대응하지 못 하기 때문에, OGR은 선형 구조를 노출시킬 것입니다. 고정 크기 배열의 경우, 사용자가 레이어 메타데이터에 있는 TDIMxx 헤더의 값을 가져와서 필드의 차원수(dimensionality)를 복구할 수 있습니다.
(숫자 데이터 유형에 대해서만) TSCAL 그리고/또는 TZERO 헤더를 가진 필드를 자동적으로 크기 조정하고 실제 값(physical value)으로 오프셋합니다.
정수 숫자 데이터 유형과 단일 발생 필드에 쓰이는 TNULL 헤더를 사용해서 OGR 필드를 NULL로 설정할 수 있습니다.
레이어 생성 옵션
다음과 같은 레이어 생성 옵션을 사용할 수 있습니다:
REPEAT_{fieldname}=number. 지정한 (자신의 이름으로 {fieldname}을 대체하는) IntegerList, Integer64List 또는 RealList 유형의 필드에 대해, 고정된 개수의 요소들을 지정합니다. 이렇게 하지 않으면 이런 필드들을 변수 길이의 FITS 열로 생성할 것인데, 생성 작업 속도에 영향을 미칠 수도 있습니다.
COMPUTE_REPEAT=AT_FIELD_CREATION/AT_FIRST_FEATURE_CREATION. IntegerList, Integer64List 또는 RealList 유형의 필드들이 FITS 열 유형에 매핑될 시점을 지정합니다. 기본값은 AT_FIELD_CREATION으로, REPEAT_{fieldname} 옵션을 지정하지 않는 한 이런 필드들을 변수 길이의 FITS 열로 생성할 것이라는 사실을 의미합니다. AT_FIRST_FEATURE_CREATION으로 지정하면, 첫 번째 객체의 요소 개수를 연산에 넣어서 고정 크기 FITS 열을 생성합니다.
FITS 소스를 ogr2ogr 또는 GDALVectorTranslate()
와 사용 시, FITS 헤더를 연산에 넣을 것입니다. 특히 대상 열의 FITS 데이터 유형을 결정하기 위해서 말입니다.
예시
하위 데이터셋들을 MEF .fits로 목록화:
$ gdalinfo ../autotest/gdrivers/data/fits/image_in_first_and_second_hdu.fits Driver: FITS/Flexible Image Transport System Files: ../autotest/gdrivers/data/fits/image_in_first_and_second_hdu.fits Size is 512, 512 Metadata: EXTNAME=FIRST_IMAGE Subdatasets: SUBDATASET_1_NAME=FITS:"../autotest/gdrivers/data/fits/image_in_first_and_second_hdu.fits":1 SUBDATASET_1_DESC=HDU 1 (1x2, 1 band), FIRST_IMAGE SUBDATASET_2_NAME=FITS:"../autotest/gdrivers/data/fits/image_in_first_and_second_hdu.fits":2 SUBDATASET_2_DESC=HDU 2 (1x3, 1 band) Corner Coordinates: Upper Left ( 0.0, 0.0) Lower Left ( 0.0, 512.0) Upper Right ( 512.0, 0.0) Lower Right ( 512.0, 512.0) Center ( 256.0, 256.0)
지정한 래스터의 HDU 열기:
$ gdalinfo FITS:"../autotest/gdrivers/data/fits/image_in_first_and_second_hdu.fits":1 Driver: FITS/Flexible Image Transport System Files: none associated Size is 1, 2 Metadata: EXTNAME=FIRST_IMAGE Corner Coordinates: Upper Left ( 0.0, 0.0) Lower Left ( 0.0, 2.0) Upper Right ( 1.0, 0.0) Lower Right ( 1.0, 2.0) Center ( 0.5, 1.0) Band 1 Block=1x1 Type=Byte, ColorInterp=Undefined
FITS 파일에 있는 잠재적 바이너리 테이블 목록화:
$ ogrinfo my.fits
GeoPackage 레이어를 FITS 바이너리 테이블로 변환:
$ ogr2ogr out.fits my.gpkg my_table
기타
주의: gdal/frmts/fits/fitsdataset.cpp
로 구현되었습니다.
GDAL에서의 CFITSIO 링크 작업에 대한 메모
리눅스
소스로부터
사용자의 배포판으로부터 CFITSIO 헤더를 (예를 들면 페도라에서는 cfitsio-devel, 데비안-우분투에서는 libcfitsio-dev) 설치한 다음, 평소대로 GDAL을 컴파일하십시오. CFITSIO를 자동으로 탐지해서 링크시킬 것입니다.
배포판으로부터
페도라/CentOS에서 dnf(yum)로 CFITSIO를 그 다음에 GDAL을 설치하십시오: CFITSIO를 자동으로 링크시킬 것입니다.
맥OS
맥OS X 패키지 최신 버전은 CFITSIO를 대상으로 링크되지 않습니다. 공식 문서 에 설명된 대로 CFITSIO를 설치하십시오.
드라이버 케이퍼빌리티
CreateCopy() 지원
이 드라이버는 GDALDriver::CreateCopy()
작업을 지원합니다.
Create() 지원
이 드라이버는 GDALDriver::Create()
작업을 지원합니다.
지리참조 작업 지원
이 드라이버는 지리참조 작업을 지원합니다.
VirtualIO 지원
이 드라이버는 virtual I/O operations (/vsimem/, etc.) 를 지원합니다.