zoukankan      html  css  js  c++  java
  • 去年写的测试GDAL用法的一些函数

      1 /*
      2 =========================================================================================
      3                     以下是一些测试GDAL用法的函数
      4 =========================================================================================
      5 */
      6 
      7 //描述:测试某类型是否支持CreateCopy和Create
      8 //参数:pszFormat-驱动格式,比如“GTIFF”
      9 //输出:结果打印到命令行
     10 void ISCanCreate(const char *pszFormat)
     11 {
     12     //determine if a particular format supports Create or CreateCopy it is possible to check the 
     13     //DCAP_CREATE and DCAP_CREATECOPY metadata on the format driver object.
     14 
     15     GDALDriver *poDriver;
     16     char **papszMetadata;
     17     GDALAllRegister();
     18     poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);
     19 
     20     if( poDriver == NULL )
     21         exit( 1 );
     22 
     23     char message[100];
     24     papszMetadata = poDriver->GetMetadata();
     25     if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ) )
     26         sprintf(message, "Driver %s supports Create() method.\n", pszFormat );
     27     if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATECOPY, FALSE ) )
     28         sprintf(message, "Driver %s supports CreateCopy() method.\n", pszFormat );
     29 
     30     AfxMessageBox(message);
     31 }
     32 
     33 //描述:测试读取到DataSet并输出图像的基本信息
     34 //参数:pszFilename-文件名称
     35 //输出:信息打印到命令行
     36 bool OpenFileToDataSet(char* pszFilename)
     37 {    
     38     GDALDataset  *poDataset;
     39 
     40     poDataset = (GDALDataset *) GDALOpen( pszFilename, GA_ReadOnly );
     41     if( poDataset != NULL )
     42     {
     43         double  adfGeoTransform[6];
     44         char message[100];
     45         
     46         sprintf(message, "Driver: %s/%s\n",
     47                 poDataset->GetDriver()->GetDescription(), 
     48                 poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) );
     49 
     50         sprintf(message, "Size is %dx%dx%d\n"
     51                 poDataset->GetRasterXSize(), poDataset->GetRasterYSize(),
     52                 poDataset->GetRasterCount() );
     53 
     54         if( poDataset->GetProjectionRef()  != NULL )
     55             sprintf(message, "Projection is `%s'\n", poDataset->GetProjectionRef());
     56 
     57         if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None )
     58         {
     59             sprintf(message, "Origin = (%.6f,%.6f)\n",
     60                     adfGeoTransform[0], adfGeoTransform[3] );
     61 
     62             sprintf(message, "Pixel Size = (%.6f,%.6f)\n",
     63                     adfGeoTransform[1], adfGeoTransform[5] );
     64         }
     65         
     66         AfxMessageBox(message);
     67         return true;
     68     }else
     69         return false;
     70 }
     71 
     72 //描述:测试读取一个BAND并输出基本信息
     73 //参数:poDataset-数据集
     74 //输出:信息打印到命令行
     75 void ReadBandInf(GDALDataset* poDataset)
     76 {
     77     GDALRasterBand  *poBand;
     78     int             nBlockXSize, nBlockYSize;
     79     int             bGotMin, bGotMax;
     80     double          adfMinMax[2];
     81     char message[100];
     82     
     83      poBand = poDataset->GetRasterBand( 1 );
     84     poBand->GetBlockSize( &nBlockXSize, &nBlockYSize );
     85     sprintf(message,  "Block=%dx%d Type=%s, ColorInterp=%s\n",
     86             nBlockXSize, nBlockYSize,
     87             GDALGetDataTypeName(poBand->GetRasterDataType()),
     88             GDALGetColorInterpretationName(
     89                 poBand->GetColorInterpretation()) );
     90 
     91     adfMinMax[0= poBand->GetMinimum( &bGotMin );
     92     adfMinMax[1= poBand->GetMaximum( &bGotMax );
     93     if! (bGotMin && bGotMax) )
     94         GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);
     95 
     96     sprintf(message, "Min=%.3fd, Max=%.3f\n", adfMinMax[0], adfMinMax[1] );
     97     
     98     if( poBand->GetOverviewCount() > 0 )
     99         sprintf(message, "Band has %d overviews.\n", poBand->GetOverviewCount() );
    100 
    101     if( poBand->GetColorTable() != NULL )
    102         sprintf(message, "Band has a color table with %d entries.\n"
    103                  poBand->GetColorTable()->GetColorEntryCount() );
    104     
    105     AfxMessageBox(message);
    106 }
    107 
    108 //描述:测试读取一个BAND中的数据块并输出
    109 //参数:poBand-数据集的一个波段
    110 //输出:信息打印到命令行
    111 void PrintBandData(GDALRasterBand  *poBand)
    112 {
    113     double *pafScanline;
    114     int  nXSize = poBand->GetXSize();
    115     int  nYSize = poBand->GetYSize();
    116     char message[100];
    117 
    118     //从总行数的中间开始读取,边缘部分数据往往相同
    119     for (int j=nYSize/2;j<nYSize;j++)
    120     {        
    121         pafScanline = (double *) CPLMalloc(sizeof(double)*nXSize);
    122         poBand->RasterIO( GF_Read, 0, j, nXSize, 1,  pafScanline, nXSize, 1, GDT_Float32, 00 );    
    123         for (int i=0;i<nXSize;i++)
    124         {
    125             sprintf(message,"[%.6f]",*(pafScanline+i));
    126             AfxMessageBox(message);
    127         }
    128         CPLFree(pafScanline);
    129     }
    130 }

  • 相关阅读:
    解决 Mac launchpad 启动台 Gitter 图标无法删除的问题
    React 与 React-Native 使用同一个 meteor 后台
    解决 React-Native mac 运行报错 error Failed to build iOS project. We ran "xcodebuild" command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by ope
    一行命令更新所有 npm 依赖包
    swift学习笔记
    IOS语言总结
    focusSNS学习笔记
    别小看锤子,老罗真的很认真
    windowsphone开发页面跳转到另一个dll中的页面
    【令人振奋】【转】微软潘正磊谈DevOps、Visual Studio 2013新功能、.NET未来
  • 原文地址:https://www.cnblogs.com/flyingfish/p/741465.html
Copyright © 2011-2022 走看看