GDALのMEMメモリファイルを使用して一時ファイルを保存


GDALを使用してアルゴリズムを記述する場合、計算された中間結果を一時的な画像ファイルに存在させ、使用してから削除することがよくあります.一時的なファイルが1つであれば、1つ作成しても構いません.しかし、複雑なアルゴリズムに複数の一時ファイルが現れる可能性がある場合(Harissコーナー自動マッチングアルゴリズムを作成しているときに4つのテンポラリファイルがあります)この場合は何となくテンポラリファイルが不快で、また1つ目が不快な場所です.2つ目の画像が大きすぎると、テンポラリファイルも大きなスペースを占有し、スペースが不足したり、指定されたテンポラリファイルのパスが書けないなどの問題が頭を悩ませます.3つ目は、テンポラリファイルの作成特にディスクのIOでは時間がかかります.
上記のいくつかの理由に基づいて、いつも一時ファイルを使わないで、GDALの中で1つのVRTの仮想ファイルを提供していることを発見します(参考http://www.gdal.org/gdal_vrttut.html)、GDALのAppのgdalenhanceを表示します.cppファイルでは、VRTが複雑に使われているか、よく知らないだけなので、しばらく詳しく検討してみましょう.VRTのほか、GDALにはMEMというメモリファイルがあります.概要はこのページを参照してください.http://gdal.org/frmt_mem.html.MEMファイルの使用については、通常のファイルと同様に、次のコードを参照してください.
#include "gdal_priv.h"

int main()
{
    GDALAllRegister();

	//      
    GDALDataset  *poSrcDS;
    poSrcDS = (GDALDataset *) GDALOpen( "C:\\test.img", GA_ReadOnly );
    if( poSrcDS == NULL )
        return -1;
	
	//  MEM     
    GDALDriver *poDriver;
    poDriver = GetGDALDriverManager()->GetDriverByName("MEM");
    if( poDriver == NULL )
        return -1;
        
	//      Create      MEM  ,            
    GDALDataset *poDstDS;
    poDstDS = poDriver->CreateCopy( "", poSrcDS, FALSE, NULL, NULL, NULL );
	
	{
	//do something
	}
	
    //     Close    ,         
    GDALClose( (GDALDatasetH) poDstDS );
    
    GDALClose( (GDALDatasetH) poSrcDS );
	
	return 0;
}