Click or drag to resize
XDL

XRasterIODumpFile Method

영상 파일의 이미지와 메타데이터를 다른 영상 파일 형식과 xml 파일로 각각 저장한다.
출력 파일 경로를 "C:\abc.tif"로 설정시 abc.tif와 abc.xml로 영상과 메타정보가 저장된다.
입력 영상 파일 포맷이 HDF5일 경우, 각 DataSet별로 영상 파일로 저장되고 메타정보는 하나의 xml 파일로 저장된다.

Namespace: Pixoneer.NXDL.NIO
Assembly: NXDLio (in NXDLio.dll) Version: 3.0.0.2
Syntax
C#
public bool DumpFile(
	string strFileName,
	string strSaveFileName,
	string strFormatKey,
	XRSMetaData openOption,
	XRSMetaData creationOption,
	out string strError,
	XThread thd
)

Parameters

strFileName  String
[In] 입력 파일 경로
strSaveFileName  String
[In] 출력 파일 경로
strFormatKey  String
[In] 파일 형식 키워드. ( 예: XDM, BIP, BIL, BSQ 또는 GDAL Raster drivers의 short name(GTiff, NITF, JPEG, BMP...) )
BIP(Band Interleaved by Pixel), BIL(Band Interleaved by Line), BSQ(Band Sequential)
openOption  XRSMetaData
[In] Open Option을 설정한다.
* Open Option
- HDF_XSIZE_INDEX : HDF5의 DataSet dimension 중에서 가로 방향 사이즈로 사용할 값 인덱스를 설정한다.
- HDF_YSIZE_INDEX : HDF5의 DataSet dimension 중에서 세로 방향 사이즈로 사용할 값 인덱스를 설정한다.
- HDF_BAND_INDEX : HDF5의 DataSet dimension 중에서 밴드 개수로 사용할 값 인덱스를 설정한다.
- HDF_XSIZE_INDEX, HDF_YSIZE_INDEX, HDF_BAND_INDEX는 HDF5 dataset의 dimension 이 3 이상이고 dimension[2]가 2일 경우에만 적용된다.
creationOption  XRSMetaData
[In] Creation Option을 설정한다.
* Creation Option
- HDF_APPLY_HALFFLOAT : 입력 파일이 HDF5이고 DataSet(예:Kompsat5 L1A 영상)이 half float data type일 경우, dump할 때 half float 적용한 데이타 값으로 저장할 것인지 여부를 설정한다. half float 적용한 data의 data type은 REAL32 로 저장된다.
- IBAND_INDEX : 입력 파일의 band가 두개일 경우, complex data type으로 파일을 dump하고자 할 때 IBand로 사용할 band index를 설정한다. 저장하고자 하는 complex data type을 dump할 파일 포맷이 지원하는 경우 정상 적용된다.
- QBAND_INDEX : 입력 파일의 band가 두개일 경우, complex data type으로 파일을 dump하고자 할 때 QBand로 사용할 band index를 설정한다. 저장하고자 하는 complex data type을 dump할 파일 포맷이 지원하는 경우 정상 적용된다.
strError  String
[Out] 에러 발생시 오류 메시지
thd  XThread
[In] Thread

Return Value

Boolean
성공이면 true, 실패이면 false를 반환
Example
아래는 tif 파일을 ntf 파일 포맷으로 dump하는 예제이다.
C#
using Pixoneer.NXDL;
using Pixoneer.NXDL.NIO;
using Pixoneer.NXDL.NRS;

XRasterIO rasterIO = new XRasterIO();
string strError = "";
if (!rasterIO.Initialize(out strError))
    MessageBox.Show(strError);

string strInputPath = @"F:\SAMPLE_IMAGE\test01.tif";
string strOutputPath = @"F:\SAMPLE_IMAGE\dump02.ntf";

bool bRes = rasterIO.DumpFile(strInputPath, strOutputPath, "NITF", null, null, out strError, null);
// 영상 data는 dump02.ntf의 영상 파일로 저장되고 메타정보는 dump02.xml에 저장된다.
아래는 HDF5 파일을 tif 파일 포맷으로 dump하는 예제이다.
C#
using Pixoneer.NXDL;
using Pixoneer.NXDL.NIO;
using Pixoneer.NXDL.NRS;

XRasterIO rasterIO = new XRasterIO();
string strError = "";
if (!rasterIO.Initialize(out strError))
    MessageBox.Show(strError);

// test.h5 는 S01/SBI, S01/QLK 두개의 dataset을 가지고 있다.
string strInputPath = @"F:\SAMPLE_IMAGE\test.h5";
string strOutputPath = @"F:\SAMPLE_IMAGE\dump.tif";

// "HDF_XSIZE_INDEX", "HDF_YSIZE_INDEX", "HDF_BAND_INDEX", "OpenOption"은 고정 문자열이다.
XRSMetaData openOption = new XRSMetaData();

// HDF5 영상의 경우 "HDF_XSIZE_INDEX", "HDF_YSIZE_INDEX", "HDF_BAND_INDEX" 의 기본값은 "1", "0", "2" 이다.
// HDF5 dataset의 dimension 중 두번째 index의 값을 가로 크기로 설정하여 영상 데이터 로드
openOption.SetValue("HDF_XSIZE_INDEX", "1", "OpenOption");

// HDF5 dataset의 dimension 중 첫번째 index의 값을 세로 크기로 설정하여 영상 데이터 로드
openOption.SetValue("HDF_YSIZE_INDEX", "0", "OpenOption");

// HDF5 dataset의 dimension 중 세번째 index의 값을 영상의 밴드 개수로 설정하여 영상 데이터 로드
openOption.SetValue("HDF_BAND_INDEX", "2", "OpenOption");

// "HDF_APPLY_HALFFLOAT", "IBAND_INDEX", "QBAND_INDEX", "CreationOption"은 고정 문자열이다.
XRSMetaData creationOption = new XRSMetaData();

// 입력 영상의 data type이 half float일 경우, half float 값으로 변경하여 저장
creationOption.SetValue("HDF_APPLY_HALFFLOAT", "Yes", "CreationOption");

// 입력 영상의 첫번째 밴드를 Complex data의 I값으로 저장
creationOption.SetValue("IBAND_INDEX", "0", "CreationOption");

// 입력 영상의 두번째 밴드를 Complex data의 Q값으로 저장
creationOption.SetValue("QBAND_INDEX", "1", "CreationOption");

bool bRes = rasterIO.DumpFile(strInputPath, strOutputPath, "GTiff", openOption, creationOption, out strError, null);
// dataset은 dump_S01_SBI.tif, dump_S01_QLK.tif의 영상 파일로 저장되고 메타정보는 dump.xml에 저장된다.
아래는 h5의 attribtue와 dataset 정보를 저장한 xml파일과 영상 데이타 tif를 h5 파일 포맷으로 dump하는 예제이다. CreationOption의 "IBAND_INDEX", "QBAND_INDEX" 옵션 설정만 가능하다(한 영상 파일의 밴드가 2개이고 complex data일 경우에 사용된다). xml의 대략적인 형식은 아래와 같다. <? xml version = "1.0" encoding = "UTF-8" ?> <PixMetaData version = "1"> <PixDumpFileInfo> <SourceFile> <Attr key = "FileName">test.h5</Attr> <Attr key = "DataSet0">[763x661] //S01/QLK (8-bit unsigned character)</Attr> <Attr key = "DataSet1">[7638x6615x2] //S01/SBI (16-bit integer)</Attr> </SourceFile> <DumpFile> <File0> <Attr key = "FileName">dump_S01_QLK.tif</Attr> <Band0> <Attr key = "Name">Channel 1 </Attr> <Attr key = "XSize">661 </Attr> <Attr key = "YSize">763 </Attr> <Attr key = "DataType">UINT08</Attr> </Band0> </File0> <File1> <Attr key = "FileName">dump_S01_SBI.tif</Attr> <Band0> <Attr key = "Name">Channel 1 </Attr> <Attr key = "XSize">6615 </Attr> <Attr key = "YSize">7638 </Attr> <Attr key = "DataType">SINT16</Attr> </Band0> <Band1> <Attr key = "Name">Channel 2 </Attr> <Attr key = "XSize">6615 </Attr> <Attr key = "YSize">7638 </Attr> <Attr key = "DataType">SINT16</Attr> </Band1> </File1> </DumpFile> <OpenOption> <Attr key = "HDF_BAND_INDEX">2 </Attr> <Attr key = "HDF_XSIZE_INDEX">1 </Attr> <Attr key = "HDF_YSIZE_INDEX">0 </Attr> </OpenOption> </PixDumpFileInfo> <Root filename = "test.h5"> <Attr key = "Attr1" datatype = "REAL64" arraysize = "3*2">-0.25 - 0.25 - 0.24 - 0.24 - 0.24 - 0.24 </Attr> <Attr key = "Attr2" datatype = "UINT08" arraysize = "Scalar">0 </Attr > <Attr key = "Attr3" datatype = "String" length = "24" padding = "H5T_STR_NULLTERM" cset = "H5T_CSET_ASCII" arraysize = "Scalar">HIGH RESOLUTION</Attr> <!--고정길이 String--> <!--<Attr key = "Attr33" datatype = "String" length = "variable" padding = "H5T_STR_NULLTERM" cset = "H5T_CSET_ASCII" arraysize = "Scalar">HH</Attr>--> <!--가변길이 String--> <Attr key = "Attr4" datatype = "REAL64" arraysize = "16">2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 </Attr > <Group name = "S01" path = "/S01"> <Attr key = "Attr5" datatype = "REAL64" arraysize = "10">0 0 0 0 0 0 0 0 0 0 </Attr> <Group name = "B001" path = "/S01/B001"> <Attr key = "Attr6" datatype = "REAL64" arraysize = "Scalar">2858.72116518021 </Attr> </Group> <DataSet name = "QLK" path = "/S01/QLK" num_of_dimension = "2" dimension_size = "[0,1] : [763,661]" max_dimension_size = "Unlimited*Unlimited" storage_layout = "CHUNKED:8*128" datatype = "UINT08" filename = "dump_S01_QLK.tif" file_num_of_band = "1" file_datatype = "UINT08"> < !--storage_layout = "CHUNKED --> <!--<DataSet name = "QLK" path = "/QLK" num_of_dimension = "2" dimension_size = "[0,1] : [2300,2564]" max_dimension_size = "2300*2564" storage_layout = "CONTIGUOUS" datatype = "UINT08" filename = "dump_S01_QLK.tif" file_num_of_band = "1" file_datatype = "UINT08">-- > <!--storage_layout = "CONTIGUOUS" --> <Attr key = "Attr7" datatype = "REAL64" arraysize = "Scalar">5.47866334064327 </Attr> </DataSet> <DataSet name = "SBI" path = "/S01/SBI" num_of_dimension = "3" dimension_size = "[0,1,2] : [7638,6615,2]" max_dimension_size = "Unlimited*Unlimited*2" storage_layout = "CHUNKED:8*128*2" datatype = "SINT16" filename = "dump_S01_SBI.tif" file_num_of_band = "2" file_datatype = "SINT16"> <Attr key = "Attr8" datatype = "REAL64" arraysize = "Scalar">2.25235195351238e-08 </Attr> </DataSet> </Group> </Root> </PixMetaData>
C#
using Pixoneer.NXDL;
using Pixoneer.NXDL.NIO;
using Pixoneer.NXDL.NRS;

XRasterIO rasterIO = new XRasterIO();
string strError = "";
if (!rasterIO.Initialize(out strError))
    MessageBox.Show(strError);

// dump.xml은 "Example 2" 예제에서 h5를 dump한 파일이다. 
// dump.xml과 같은 경로상에 xml의 dataset으로 명시된 영상 파일도 함께 있어야 한다.
string strInputPath = @"F:\SAMPLE_IMAGE\dump.xml";
string strOutputPath = @"F:\SAMPLE_IMAGE\saveHDF.h5";

// "IBAND_INDEX", "QBAND_INDEX", "CreationOption"은 고정 문자열이다.
// 영상 밴드가 2개일 경우, Complex data의 I, Q 값 저장을 위한 밴드 index를 설정한다.
// 설정하지 않을 경우, 기본값은 IBAND_INDEX = "0", QBAND_INDEX = "1" 이다.
XRSMetaData creationOption = new XRSMetaData();

// 입력 영상의 첫번째 밴드를 Complex data의 I값으로 저장
creationOption.SetValue("IBAND_INDEX", "0", "CreationOption");

// 입력 영상의 두번째 밴드를 Complex data의 Q값으로 저장
creationOption.SetValue("QBAND_INDEX", "1", "CreationOption");

bool bRes = rasterIO.DumpFile(strInputPath, strOutputPath, "HDF5", null, creationOption, out strError, null);
// xml의 attribute와 dataset(dump_S01_SBI.tif, dump_S01_QLK.tif) 정보를 parsing해서 saveHDF.h5에 저장한다.
See Also