RFC 59.1 : GDAL/OGR 유틸리티를 라이브러리로
저자: 파자 마하무드, 이벤 루올
연락처: fazamhd@gmail.com, even.rouault@spatialys.com
상태: 승인, GDAL 2.1버전에 구현
요약
이 RFC는 GDAL/OGR C/C++ 유틸리티를 C 호출 가능 함수로 노출시키는 방법을 정의합니다. 유틸리티 코드가 새 함수를 호출할 수 있도록 수정합니다. 이 RFC는 몇몇 유틸리티를 통해 시연되지만, 다른 유틸리티들로 확장되는 것을 목표로 하는 일반 프레임과 원칙을 제공합니다.
근거
인메모리 데이터셋에 대해 작업할 수 있고 진행 상황/취소 콜백 함수를 이용할 수 있도록, 시스템 호출 사용을 수반하지 않고 코드로부터 GDAL 유틸리티를 호출해야 할 필요가 있습니다.
변경 사항
GDAL 유틸리티의 공개 선언을 담고 있는 gdal_utils.h
공개 헤더 파일을 생성합니다. (아직 진행 중인) 현재 헤더는 여기 에서 찾아볼 수 있습니다.
각 유틸리티는 문자열 배열로 지정되는 인자들로부터 옵션 구조를 생성하는 함수(XXXXOptionsNew)를 가지고 있습니다. 이 함수는 명령줄 유틸리티 자체의 코드와 협력하기 위해 사용되는 추가적인 반공개(semi-private) 구조도 인자로 받아들입니다.
GDALInfo()의 경우:
/*! GDALInfo() 용 옵션. 불투명 유형입니다. */
typedef struct GDALInfoOptions GDALInfoOptions;
typedef struct GDALInfoOptionsForBinary GDALInfoOptionsForBinary;
/**
* GDALInfoOptions 구조를 할당합니다.
*
* @param papszArgv NULL로 종료되는 옵션 목록입니다. (파일명 및 열기 옵션도 포함할 수 있습니다.)
* gdalinfo 유틸리티의 옵션을 받아들입니다.
* @param psOptionsForBinary (산출물) NULL일 수 있으며 (일반적으로 NULL이어야 합니다)
* 그렇지 않은 경우 (gdalinfo_bin.cpp 사용례) 이 함수 이전에
* GDALInfoOptionsForBinaryNew()로 할당해야만 합니다. 존재할 수 있는
* 파일명, 열기 옵션, 하위 데이터셋 번호 등등으로 채워질 것입니다.
* @return 할당된 GDALInfoOptions 구조를 가리키는 포인터를 반환합니다.
*
* @since GDAL 2.1
*/
GDALInfoOptions CPL_DLL *GDALInfoOptionsNew(char** papszArgv, GDALInfoOptionsForBinary* psOptionsForBinary);
void CPL_DLL GDALInfoOptionsFree( GDALInfoOptions *psOptions );
/**
* GDAL 지원 래스터 데이터셋에 관한 다양한 정보를 목록화합니다.
*
* GDALInfoOptionsNew()로 GDALInfoOptions* 를 할당하고
* GDALInfoOptionsFree()로 할당 해제해야만 합니다.
*
* @param hDataset 데이터셋 핸들입니다.
* @param psOptions GDALInfoOptionsNew()가 반환하는 옵션 구조 또는 NULL입니다.
* @return 래스터 데이터셋에 관한 정보에 해당하는 문자열을 반환합니다.
* CPLFree()로 해제해야만 합니다.
*
* @since GDAL 2.1
*/
char CPL_DLL *GDALInfo( GDALDatasetH hDataset, const GDALInfoOptions *psOptions );
GDALTranslate()의 경우도 마찬가지입니다:
/*! GDALTranslate() 용 옵션. 불투명 유형입니다. */
typedef struct GDALTranslateOptions GDALTranslateOptions;
typedef struct GDALTranslateOptionsForBinary GDALTranslateOptionsForBinary;
GDALTranslateOptions CPL_DLL *GDALTranslateOptionsNew(char** papszArgv,
GDALTranslateOptionsForBinary* psOptionsForBinary);
void CPL_DLL GDALTranslateOptionsFree( GDALTranslateOptions *psOptions );
void CPL_DLL GDALTranslateOptionsSetProgress( GDALTranslateOptions *psOptions,
GDALProgressFunc pfnProgress,
void *pProgressData );
GDALDatasetH CPL_DLL GDALTranslate(const char *pszDestFilename,
GDALDatasetH hSrcDataset,
const GDALTranslateOptions *psOptions,
int *pbUsageError);
GDALWarp()의 경우도 마찬가지입니다:
/*! GDALWarp() 용 옵션. 불투명 유형입니다. */
typedef struct GDALWarpAppOptions GDALWarpAppOptions;
typedef struct GDALWarpAppOptionsForBinary GDALWarpAppOptionsForBinary;
GDALWarpAppOptions CPL_DLL *GDALWarpAppOptionsNew(char** papszArgv,
GDALWarpAppOptionsForBinary* psOptionsForBinary);
void CPL_DLL GDALWarpAppOptionsFree( GDALWarpAppOptions *psOptions );
void CPL_DLL GDALWarpAppOptionsSetProgress( GDALWarpAppOptions *psOptions,
GDALProgressFunc pfnProgress,
void *pProgressData );
void CPL_DLL GDALWarpAppOptionsSetWarpOption( GDALWarpAppOptions *psOptions,
const char* pszKey,
const char* pszValue );
GDALDatasetH CPL_DLL GDALWarp( const char *pszDest, GDALDatasetH hDstDS, int nSrcCount,
GDALDatasetH *pahSrcDS,
const GDALWarpAppOptions *psOptions, int *pbUsageError );
GDALVectorTranslate()의 경우도 마찬가지입니다(ogr2ogr와 동등합니다):
/*! GDALVectorTranslate() 용 옵션. 불투명 유형입니다. */
typedef struct GDALVectorTranslateOptions GDALVectorTranslateOptions;
typedef struct GDALVectorTranslateOptionsForBinary GDALVectorTranslateOptionsForBinary;
GDALVectorTranslateOptions CPL_DLL *GDALVectorTranslateOptionsNew(char** papszArgv,
GDALVectorTranslateOptionsForBinary* psOptionsForBinary);
void CPL_DLL GDALVectorTranslateOptionsFree( GDALVectorTranslateOptions *psOptions );
void CPL_DLL GDALVectorTranslateOptionsSetProgress( GDALVectorTranslateOptions *psOptions,
GDALProgressFunc pfnProgress,
void *pProgressData );
GDALDatasetH CPL_DLL GDALVectorTranslate( const char *pszDest, GDALDatasetH hDstDS, int nSrcCount,
GDALDatasetH *pahSrcDS,
const GDALVectorTranslateOptions *psOptions, int *pbUsageError );
다른 유틸리티에 대해서는 gdal_utils.h 를 참조하십시오.
SWIG 바인딩 (파이썬 / 자바 / C# / 펄) 변경 사항
모든 바인딩
모든 바인딩에 대해, SWIG에 앞의 함수들을 다음과 같이 매핑합니다:
struct GDALInfoOptions {
%extend {
GDALInfoOptions(char** options) {
return GDALInfoOptionsNew(options, NULL);
}
~GDALInfoOptions() {
GDALInfoOptionsFree( self );
}
}
};
%rename (InfoInternal) GDALInfo;
char *GDALInfo( GDALDatasetShadow *hDataset, GDALInfoOptions *infoOptions );
struct GDALTranslateOptions {
%extend {
GDALTranslateOptions(char** options) {
return GDALTranslateOptionsNew(options, NULL);
}
~GDALTranslateOptions() {
GDALTranslateOptionsFree( self );
}
}
};
%rename (TranslateInternal) wrapper_GDALTranslate;
%newobject wrapper_GDALTranslate;
%inline %{
GDALDatasetShadow* wrapper_GDALTranslate( const char* dest,
GDALDatasetShadow* dataset,
GDALTranslateOptions* translateOptions,
GDALProgressFunc callback=NULL,
void* callback_data=NULL);
struct GDALWarpAppOptions {
%extend {
GDALWarpAppOptions(char** options) {
return GDALWarpAppOptionsNew(options, NULL);
}
~GDALWarpAppOptions() {
GDALWarpAppOptionsFree( self );
}
}
};
/* 주의: SWIG에 "int object_list_count, GDALDatasetShadow** poObjects" 입력 유형 매핑과 잘 */
/* 동작하지 않는 버그/기능이 있기 때문에 2개의 개별 이름을 사용해야만 합니다 */
%inline %{
int wrapper_GDALWarpDestDS( GDALDatasetShadow* dstDS,
int object_list_count, GDALDatasetShadow** poObjects,
GDALWarpAppOptions* warpAppOptions,
GDALProgressFunc callback=NULL,
void* callback_data=NULL),
%}
%newobject wrapper_GDALWarpDestName;
%inline %{
GDALDatasetShadow* wrapper_GDALWarpDestName( const char* dest,
int object_list_count, GDALDatasetShadow** poObjects,
GDALWarpAppOptions* warpAppOptions,
GDALProgressFunc callback=NULL,
void* callback_data=NULL),
%}
struct GDALVectorTranslateOptions {
%extend {
GDALVectorTranslateOptions(char** options) {
return GDALVectorTranslateOptionsNew(options, NULL);
}
~GDALVectorTranslateOptions() {
GDALVectorTranslateOptionsFree( self );
}
}
};
/* 주의: SWIG에 "int object_list_count, GDALDatasetShadow** poObjects" 입력 유형 매핑과 잘 */
/* 동작하지 않는 버그/기능이 있기 때문에 2개의 개별 이름을 사용해야만 합니다 */
%inline %{
int wrapper_GDALVectorTranslateDestDS( GDALDatasetShadow* dstDS,
GDALDatasetShadow* srcDS,
GDALVectorTranslateOptions* options,
GDALProgressFunc callback=NULL,
void* callback_data=NULL);
%}
%newobject wrapper_GDALVectorTranslateDestName;
%inline %{
GDALDatasetShadow* wrapper_GDALVectorTranslateDestName( const char* dest,
GDALDatasetShadow* srcDS,
GDALVectorTranslateOptions* options,
GDALProgressFunc callback=NULL,
void* callback_data=NULL);
%}
다른 유틸리티에 대해서는 gdal.i 를 참조하십시오.
파이썬 바인딩
파이썬 바인딩의 경우, 좀 더 사용자 친화적인 방법으로 옵션을 지정할 수 있게 해주는 편이 래퍼(convenience wrapper)를 생성합니다.
def InfoOptions(options = [], format = 'text', deserialize = True,
computeMinMax = False, reportHistograms = False, reportProj4 = False,
stats = False, approxStats = False, computeChecksum = False,
showGCPs = True, showMetadata = True, showRAT = True, showColorTable = True,
listMDD = False, showFileList = True, allMetadata = False,
extraMDDomains = None):
""" gdal.Info() 옵션으로 전송할 수 있는 InfoOptions() 객체를 생성합니다. 이 객체는
문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다."""
def Info(ds, **kwargs):
""" 데이터셋에 대한 정보를 반환합니다.
인자:
ds --- 데이터셋 객체 또는 파일명
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.InfoOptions()의 다른 키워드 인자들
옵션을 gdal.InfoOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
gdal.InfoOptions()의 속성을 설정하는 데 또는 gdal.Info()의 그때 그때 즉석에서 처리되는(inline) 인자로 gdal.Info()를 사용할 수 있습니다. 인자를 문자열 배열, 명령줄 문법 또는 전용 키워드로 지정할 수 있기 때문에, 다양하게 조합할 수 있습니다:
options = gdal.InfoOptions(format = 'json', computeChecksum = True)
gdal.Info(ds, options)
options = gdal.InfoOptions(options = ['-json', '-checksum'])
gdal.Info(ds, options)
options = gdal.InfoOptions(options = '-json -checksum')
gdal.Info(ds, options)
gdal.Info(ds, format = 'json', computeChecksum = True)
gdal.Info(ds, options = ['-json', '-checksum'])
gdal.Info(ds, options = '-json -checksum')
def TranslateOptions(options = [], format = 'GTiff',
outputType = GDT_Unknown, bandList = None, maskBand = None,
width = 0, height = 0, widthPct = 0.0, heightPct = 0.0,
xRes = 0.0, yRes = 0.0,
creationOptions = None, srcWin = None, projWin = None, projWinSRS = None, strict = False,
unscale = False, scaleParams = None, exponents = None,
outputBounds = None, metadataOptions = None,
outputSRS = None, GCPs = None,
noData = None, rgbExpand = None,
stats = False, rat = True, resampleAlg = None,
callback = None, callback_data = None):
""" gdal.Translate()로 전송할 수 있는 TranslateOptions() 객체를 생성합니다.
키워드 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
format --- 산출물 포맷 ("GTiff" 등등)
outputType --- 산출물 유형 (gdal.GDT_Byte 등등)
bandList --- 밴드 번호 배열 (1에서 시작하는 색인)
maskBand --- 생성하거나 생성하지 않을 마스크 밴드 ("none", "auto", "mask", 1, ...)
width --- 산출 래스터의 픽셀 단위 너비
height --- 산출 래스터의 픽셀 단위 높이
widthPct --- 산출 래스터의 백분율 너비 (100 = 원래 너비)
heightPct --- 산출 래스터의 백분율 높이 (100 = 원래 높이)
xRes --- 산출물의 수평 해상도
yRes --- 산출물의 수직 해상도
creationOptions --- 생성 옵션 목록
srcWin --- 추출할 픽셀 단위 하위 창: [left_x, top_y, width, height]
projWin --- 추출할 투영 좌표 단위 하위 창: [ulx, uly, lrx, lry]
projWinSRS --- projWin을 표현하는 공간 좌표계
strict --- 엄격 모드
unscale --- 척도 및 오프셋 메타데이터를 가진 비척도(unscale) 값
scaleParams --- 각각 [src_min,src_max] 또는 [src_min,src_max,dst_min,dst_max] 형식의 척도 파라미터 목록
exponents --- 지수(exponentiation) 파라미터 목록
outputBounds ---할당된 산출물 경계: [ulx, uly, lrx, lry]
metadataOptions --- 메타데이터 옵션 목록
outputSRS --- 할당된 산출 공간 좌표계
GCPs --- GCP 목록
noData --- NODATA 값 (또는 설정 해제하려면 "none")
rgbExpand --- 색상표 확장 모드: "gray", "rgb", "rgba"
stats --- 통계 계산 여부
rat --- 소스 RAT 작성 여부
resampleAlg --- 리샘플링 모드
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def Translate(destName, srcDS, **kwargs):
""" 데이터셋을 변환합니다.
인자:
destName --- 산출 데이터셋 이름
srcDS --- 데이터셋 객체 또는 파일명
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.TranslateOptions()의 다른 키워드 인자들
옵션을 gdal.TranslateOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def WarpOptions(options = [], format = 'GTiff',
outputBounds = None,
outputBoundsSRS = None,
xRes = None, yRes = None, targetAlignedPixels = False,
width = 0, height = 0,
srcSRS = None, dstSRS = None,
srcAlpha = False, dstAlpha = False,
warpOptions = None, errorThreshold = None,
warpMemoryLimit = None, creationOptions = None, outputType = GDT_Unknown,
workingType = GDT_Unknown, resampleAlg = None,
srcNodata = None, dstNodata = None, multithread = False,
tps = False, rpc = False, geoloc = False, polynomialOrder = None,
transformerOptions = None, cutlineDSName = None,
cutlineLayer = None, cutlineWhere = None, cutlineSQL = None, cutlineBlend = None, cropToCutline = False,
copyMetadata = True, metadataConflictValue = None,
setColorInterpretation = False,
callback = None, callback_data = None):
""" gdal.Warp()로 전송할 수 있는 WarpOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
format --- 산출물 포맷 ("GTiff" 등등)
outputBounds --- 대상 공간 좌표계 단위 (minX, minY, maxX, maxY)의 산출물 경계
outputBoundsSRS --- dstSRS에 표현되지 않은 경우 산출물 경계를 표현하는 공간 좌표계
xRes, yRes --- 대상 공간 좌표계 단위 산출물 해상도
targetAlignedPixels --- 산출물 경계를 산출물 해상도의 배수로 강제할지 여부
width --- 산출 래스터의 픽셀 단위 너비
height --- 산출 래스터의 픽셀 단위 높이
srcSRS --- 소스 공간 좌표계
dstSRS --- 산출 공간 좌표계
srcAlpha --- 입력 데이터셋의 마지막 밴드를 강제로 알파 밴드로 간주할지 여부
dstAlpha --- 산출물에 알파 밴드를 강제 생성할지 여부
outputType --- 산출물 유형 (gdal.GDT_Byte 등등)
workingType --- 작업 유형 (gdal.GDT_Byte 등등)
warpOptions --- 왜곡 옵션 목록
errorThreshold --- 근사치 변환기 용 오류 한계값 (픽셀 단위)
warpMemoryLimit --- 작업 버퍼의 바이트 단위 용량
resampleAlg --- 리샘플링 모드
creationOptions --- 생성 옵션 목록
srcNodata --- 소스 NODATA 값(들)
dstNodata --- 산출 NODATA 값(들)
multithread --- 멀티스레드 계산 및 I/O 작업 여부
tps --- 박막 스플라인 GCP 변환 사용 여부
rpc --- RPC 변환기 사용 여부
geoloc --- 지리위치(GeoLocation) 배열 변환기 사용 여부
polynomialOrder --- 다항 GCP 보간 순서
transformerOptions --- 변환기 옵션 목록
cutlineDSName --- 설명문(cutline) 데이터셋 이름
cutlineLayer --- 설명문 레이어 이름
cutlineWhere --- 설명문 WHERE 절
cutlineSQL --- 설명문 SQL 선언문
cutlineBlend --- 픽셀 단위 설명문 혼합(blend) 거리
cropToCutline --- 산출 밴드에 설명문 범위를 사용할지 여부
copyMetadata --- 소스 메타데이터를 복사할지 여부
metadataConflictValue --- 메타데이터 데이터 충돌 값
setColorInterpretation --- 입력 밴드의 색상 해석을 산출 밴드에 강제할지 여부
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def Warp(destNameOrDestDS, srcDSOrSrcDSTab, **kwargs):
""" 하나 이상의 데이터셋을 왜곡합니다.
인자:
destNameOrDestDS --- 산출 데이터셋 이름 또는 객체
srcDSOrSrcDSTab --- 데이터셋 객체 또는 파일명 배열, 또는 데이터셋 객체 또는 파일명
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.WarpOptions()의 다른 키워드 인자들
옵션을 gdal.WarpOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def VectorTranslateOptions(options = [], format = 'ESRI Shapefile',
accessMode = None,
srcSRS = None, dstSRS = None, reproject = True,
SQLStatement = None, SQLDialect = None, where = None, selectFields = None, spatFilter = None,
datasetCreationOptions = None,
layerCreationOptions = None,
layers = None,
layerName = None,
geometryType = None,
segmentizeMaxDist= None,
callback = None, callback_data = None):
""" gdal.VectorTranslate()로 전송할 수 있는 VectorTranslateOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
format --- 산출물 포맷 ("ESRI Shapefile" 등등)
accessMode --- 생성 시 설정하지 않음, 'update', 'append', 'overwrite'
srcSRS --- 소스 공간 좌표계
dstSRS --- 산출 공간 좌표계 (reproject = True이면 재투영)
reproject --- 재투영할지 여부
SQLStatement --- 소스 데이터셋에 적용할 SQL 선언문
SQLDialect --- SQL 방언 ('OGRSQL', 'SQLITE', ...)
where --- 소스 레이어(들)에 적용할 WHERE 절
selectFields --- 선택할 필드 목록
spatFilter --- (minX, minY, maxX, maxY) 경계 상자 형식의 공간 필터
datasetCreationOptions --- 데이터셋 생성 옵션 목록
layerCreationOptions --- 레이어 생성 옵션 목록
layers --- 변환할 레이어 목록
layerName --- 산출 레이어 이름
geometryType --- 산출 레이어 도형 유형 ('POINT', ....)
segmentizeMaxDist --- 라인 도형의 연속하는 노드들 사이의 최대 거리
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def VectorTranslate(destNameOrDestDS, srcDS, **kwargs):
""" 벡터 데이터셋 하나를 변환합니다.
인자:
destNameOrDestDS --- 산출 데이터셋 이름 또는 객체
srcDS --- 데이터셋 객체 하나 또는 파일명 하나
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.VectorTranslateOptions()의 다른 키워드 인자들
옵션을 gdal.VectorTranslateOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def DEMProcessingOptions(options = [], colorFilename = None, format = 'GTiff',
creationOptions = None, computeEdges = False, alg = 'Horn', band = 1,
zFactor = None, scale = None, azimuth = None, altitude = None, combined = False,
slopeFormat = None, trigonometric = False, zeroForFlat = False,
callback = None, callback_data = None):
""" gdal.DEMProcessing()으로 전송할 수 있는 DEMProcessingOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
colorFilename --- ("color-relief"의 경우 필수) "color-relief" 처리를 위한 색상표 정의를 담고 있는 파일의 이름
format --- 산출물 포맷 ("GTiff" 등등)
creationOptions --- 생성 옵션 목록
computeEdges --- 래스터 경계에 있는 값을 계산할지 여부
alg --- 'ZevenbergenThorne' 또는 'Horn'
band --- 사용할 소스 밴드 번호
zFactor --- (음영기복 전용) 표고를 사전에 곱하기 위해 사용하는 수직 과장
scale --- 수직 단위와 수평 단위의 비율
azimuth --- (음영기복 전용) 광원의 도 단위 방위각입니다. 래스터 위에서 수직으로 빛이 내리쬐는 경우 0, 동쪽인 경우 90, ... 기본값은 315로, 음영도 생성 시 일반적으로 쓰이는 값이기 때문에 변경할 필요가 거의 없습니다.
altitude ---(음영기복 전용) 광원의 도 단위 고도입니다. DEM 위에서 수직으로 빛이 내리쬐는 경우 90, 지평선(수평선)인 경우 0입니다.
combined --- (음영기복 전용) 경사와 비스듬한 음영을 조합하는 결합 음영을 계산할지 여부
slopeformat --- (경사 전용) "degree" 또는 "percent"
trigonometric --- (경사방향 전용) 방위각 대신 삼각법 각도(trigonometric angle)를 반환할지 여부를 설정합니다. 즉 0deg는 동쪽, 90deg는 북쪽, 180deg는 서쪽, 270deg는 남쪽입니다.
zeroForFlat --- (경사방향 전용) 평지 지역에 대해 slope=-9999가 아니라 slope=0으로 반환할지 여부
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def DEMProcessing(destName, srcDS, processing, **kwargs):
""" DEM 처리를 적용합니다.
인자:
destName --- 산출 데이터셋 이름
srcDS --- 데이터셋 객체 하나 또는 파일명 하나
processing --- "hillshade", "slope", "aspect", "color-relief", "TRI", "TPI", "Roughness" 가운데 하나
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.DEMProcessingOptions()의 다른 키워드 인자들
옵션을 gdal.DEMProcessingOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def NearblackOptions(options = [], format = 'GTiff',
creationOptions = None, white = False, colors = None,
maxNonBlack = None, nearDist = None, setAlpha = False, setMask = False,
callback = None, callback_data = None):
""" gdal.Nearblack()으로 전송할 수 있는 NearblackOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
format --- 산출물 포맷 ("GTiff" 등등)
creationOptions --- 생성 옵션 목록
white --- 근사 검은색 픽셀 대신 근사 하얀색(255) 픽셀을 검색할지 여부
colors --- 예를 들면 ((0,0,0),(255,255,255)) 같은 형식의 검색할 색상 목록입니다. 색상으로 간주하는 픽셀은 0으로 설정됩니다.
maxNonBlack --- 안쪽으로의 검색을 포기하기 전에 발견할 수 있는 검은색이 아닌 (또는 white, colors로 지정한 다른 검색 색상이 아닌) 픽셀의 최대 개수입니다. 기본값은 2입니다.
nearDist --- 픽셀값이 검은색/하얀색/사용자 지정 색상으로 간주되려면 검은색/하얀색/사용자 지정 색상과 얼마나 다를 수 있는지 선택합니다. 기본값은 15입니다.
setAlpha --- 산출 파일이 지원하는 경우 알파 밴드를 추가합니다.
setMask --- 산출 파일에 마스크 밴드를 추가합니다.
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def Nearblack(destNameOrDestDS, srcDS, **kwargs):
""" 근사 검은색/하얀색 경계를 정확한 값으로 변환합니다.
인자:
destNameOrDestDS --- 산출 데이터셋 이름 또는 객체
srcDS --- 데이터셋 객체 하나 또는 파일명 하나
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.NearblackOptions()의 다른 키워드 인자들
옵션을 gdal.NearblackOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def GridOptions(options = [], format = 'GTiff',
outputType = GDT_Unknown,
width = 0, height = 0,
creationOptions = None,
outputBounds = None,
outputSRS = None,
noData = None,
algorithm = None,
layers = None,
SQLStatement = None,
where = None,
spatFilter = None,
zfield = None,
z_increase = None,
z_multiply = None,
callback = None, callback_data = None):
""" gdal.Grid()로 전송할 수 있는 GridOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
format --- 산출물 포맷 ("GTiff" 등등)
outputType --- 산출물 유형 (gdal.GDT_Byte 등등)
width --- 산출 래스터의 픽셀 단위 너비
height --- 산출 래스터의 픽셀 단위 높이
creationOptions --- 생성 옵션 목록
outputBounds ---할당된 산출물 경계: [ulx, uly, lrx, lry]
outputSRS --- 할당된 산출 공간 좌표계
noData --- NODATA 값
algorithm --- 예: "invdist:power=2.0:smoothing=0.0:radius1=0.0:radius2=0.0:angle=0.0:max_points=0:min_points=0:nodata=0.0"
layers --- 변환할 레이어 목록
SQLStatement --- 소스 데이터셋에 적용할 SQL 선언문
where --- 소스 레이어(들)에 적용할 WHERE 절
spatFilter --- (minX, minY, maxX, maxY) 경계 상자 형식의 공간 필터
zfield --- Z 값을 가져오기 위해 사용할 피처에 있는 속성 필드를 식별합니다. 이 값은 피처 도형 레코드에서 읽어온 Z 값을 대체합니다.
z_increase --- Z 값을 가져오기 위해 사용할 피처에 있는 속성 필드에 추가할 값입니다. 이 값의 단위는 Z 값의 단위와 동일해야 합니다. 결과값은 Z 값 + Z 증가 값입니다. 기본값은 0입니다.
z_multiply --- Z 필드에 대한 곱셈 비율입니다. 예를 들어 피트 단위를 미터 단위로 또는 표고 값을 심도 값으로 변환하기 위해 사용할 수 있습니다. 결과값은 (Z 값 + Z 증가 값) * Z 곱셈 값이 됩니다. 기본값은 1입니다.
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def Grid(destName, srcDS, **kwargs):
""" 분산 데이터로부터 래스터를 생성합니다.
인자:
destName --- 산출 데이터셋 이름
srcDS --- 데이터셋 객체 하나 또는 파일명 하나
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.GridOptions()의 다른 키워드 인자들
옵션을 gdal.GridOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def RasterizeOptions(options = [], format = None,
creationOptions = None, noData = None, initValues = None,
outputBounds = None, outputSRS = None,
width = None, height = None,
xRes = None, yRes = None, targetAlignedPixels = False,
bands = None, inverse = False, allTouched = False,
burnValues = None, attribute = None, useZ = False, layers = None,
SQLStatement = None, SQLDialect = None, where = None,
callback = None, callback_data = None):
""" gdal.Rasterize()로 전송할 수 있는 RasterizeOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
format --- 산출물 포맷 ("GTiff" 등등)
creationOptions --- 생성 옵션 목록
outputBounds ---할당된 산출물 경계: [minx, miny, maxx, maxy]
outputSRS --- 할당된 산출 공간 좌표계
width --- 산출 래스터의 픽셀 단위 너비
height --- 산출 래스터의 픽셀 단위 높이
xRes, yRes --- 대상 공간 좌표계 단위 산출물 해상도
targetAlignedPixels --- 산출물 경계를 산출물 해상도의 배수로 강제할지 여부
noData --- NODATA 값
initValues --- 산출 이미지 밴드를 사전 초기화하기 위해 사용할 값 또는 값 목록입니다. 하지만, 산출 파일에서 NODATA 값으로 표시되지는 않습니다. 값을 하나만 지정하는 경우, 모든 밴드에 동일한 값을 사용합니다.
bands --- 값을 작성할 산출 밴드 목록입니다.
inverse --- 역 래스터화할지 여부. 예를 들어 고정 작성값을 작성할지 또는 지정한 폴리곤의 내부가 아니라 이미지의 모든 부분에 첫 번째 피처와 연결된 값을 작성할지 여부를 설정합니다.
allTouched --- ALL_TOUCHED 래스터화 옵션을 활성화해서, 라인을 렌더링한 경로 상에 있는 또는 중심 포인트가 폴리곤 내부에 떨어지는 픽셀만이 아니라 라인 또는 폴리곤에 접하는 모든 픽셀을 업데이트할지 여부
burnValues --- 모든 객체의 각 밴드에 작성할 고정 값 목록입니다. attribute와 함께 사용할 수 없습니다.
attribute --- 작성할 값을 위해 사용할 피처에 있는 속성 필드를 식별합니다. 모든 산출 밴드에 값을 작성할 것입니다. burnValues와 함께 사용할 수 없습니다.
useZ --- 작성 값을 피처의 "Z" 값으로부터 추출해야 할지 여부를 나타냅니다. burnValues 또는 attribute를 지정한 경우 burnValues 또는 attribute로 설정한 작성 값에 이 값을 추가합니다. 현재로서는 포인트 및 라인만 3차원으로 그립니다.
layers --- 입력 피처에 대해 사용할 데이터소스의 레이어 목록입니다.
SQLStatement --- 소스 데이터셋에 적용할 SQL 선언문
SQLDialect --- SQL 방언 ('OGRSQL', 'SQLITE', ...)
where --- 소스 레이어(들)에 적용할 WHERE 절
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def Rasterize(destNameOrDestDS, srcDS, **kwargs):
""" 래스터에 벡터 도형을 작성합니다.
인자:
destNameOrDestDS --- 산출 데이터셋 이름 또는 객체
srcDS --- 데이터셋 객체 하나 또는 파일명 하나
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.RasterizeOptions()의 다른 키워드 인자들
옵션을 gdal.RasterizeOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
def BuildVRTOptions(options = [],
resolution = None,
outputBounds = None,
xRes = None, yRes = None,
targetAlignedPixels = None,
separate = None,
bandList = None,
addAlpha = None,
resampleAlg = None,
outputSRS = None,
allowProjectionDifference = None,
srcNodata = None,
VRTNodata = None,
hideNodata = None,
callback = None, callback_data = None):
""" gdal.BuildVRT()로 전송할 수 있는 BuildVRTOptions() 객체를 생성합니다.
Keyword 인자:
options --- 문자열 배열, 문자열이 될 수 있고 또는 비워둔 채 다른 키워드들로 채울 수도 있습니다.
resolution --- 'highest', 'lowest', 'average', 'user'
outputBounds --- 대상 공간 좌표계 단위 (minX, minY, maxX, maxY)의 산출물 경계
xRes, yRes --- 대상 공간 좌표계 단위 산출물 해상도
targetAlignedPixels --- 산출물 경계를 산출물 해상도의 배수로 강제할지 여부
separate --- 각 소스 파일을 VRT 밴드에 있는 개별 스택 밴드로 넣을지 여부
bandList --- 밴드 번호 배열 (1에서 시작하는 색인)
addAlpha --- 소스 래스터에 알파 마스크 밴드가 없는 경우 VRT에 추가할지 여부
resampleAlg --- 리샘플링 모드
outputSRS --- 할당된 산출 공간 좌표계
allowProjectionDifference --- 동일한 투영법을 가지지 않은 입력 데이터셋들을 입력받을지 여부. 주의: 재투영하지 '않을' 것입니다.
srcNodata --- 소스 NODATA 값(들)
VRTNodata --- VRT 밴드 수준의 NODATA 값들
hideNodata --- VRT 밴드가 NODATA 값을 리포트하지 않게 할지 여부
callback --- 콜백 메소드
callback_data --- 콜백 용 사용자 데이터
"""
def BuildVRT(destName, srcDSOrSrcDSTab, **kwargs):
""" 데이터셋 목록으로부터 VRT를 작성합니다.
인자:
destName --- 산출 데이터셋 이름
srcDSOrSrcDSTab --- 데이터셋 객체 또는 파일명 목록, 또는 데이터셋 객체 또는 파일명
키워드 인자:
options --- gdal.InfoOptions()의 반환, 문자열 또는 문자열 배열,
gdal.BuildVRTOptions()의 다른 키워드 인자들
옵션을 gdal.BuildVRTOptions() 객체로 제공하는 경우, 다른 키워드를 무시합니다. """
유틸리티
유틸리티들이 각각 대응하는 함수를 호출하도록 수정합니다.
문서화
새 메소드/함수를 모두 문서화합니다.
Test Suite
test_gdalinfo_lib.py 에서 gdal.Info 메소드를 테스트합니다.
test_gdal_translate_lib.py 에서 gdal.Translate 메소드를 테스트합니다.
test_gdalwarp_lib.py 에서 gdal.Warp 메소드를 테스트합니다.
test_ogr2ogr_lib.py 에서 gdal.VectorTranslate 메소드를 테스트합니다.
test_gdaldem_lib.py 에서 gdal.DEMProcessing 메소드를 테스트합니다.
test_nearblack_lib.py 에서 gdal.Nearblack 메소드를 테스트합니다.
test_gdal_grid_lib.py 에서 gdal.Grid 메소드를 테스트합니다.
test_gdal_rasterize_lib.py 에서 gdal.Rasterize 메소드를 테스트합니다.
test_gdalbuildvrt_lib.py 에서 gdal.BuildVRT 메소드를 테스트합니다.
호환성 문제점
예상되는 문제점은 없습니다. 명령줄 유틸리티들은 동일한 인터페이스를 유지할 것입니다. autotest/utilities
에서의 유틸리티 테스트를 여전히 통과하는지 확인할 것입니다.
관련 티켓
구현
파자 마하무드와 이벤 루올이 이 RFC를 구현할 것입니다.
gdalinfo 및 gdal_translate에 대해 제안한 구현은 “”rfc59.1”” 브랜치 에 있습니다.
투표 이력
대니얼 모리셋 +1
이벤 루올 +1