Пример #1
0
bool ossimHdfGridModel::setGridNodes( H5::H5File* h5File,
                                      const std::string& latDataSetName,
                                      const std::string& lonDataSetName,
                                      ossim_uint32 imageRows,
                                      ossim_uint32 imageCols )

{
    bool status = false;

    if ( h5File )
    {
        H5::DataSet latDataSet = h5File->openDataSet( latDataSetName );
        H5::DataSet lonDataSet = h5File->openDataSet( lonDataSetName );

        try
        {
            status = setGridNodes( &latDataSet, &lonDataSet, imageRows, imageCols );
        }
        catch ( const ossimException& e )
        {
            if ( traceDebug() )
            {
                ossimNotify(ossimNotifyLevel_WARN)
                        << "ossimHdfGridModel::setGridNodes caught exception\n"
                        << e.what() << std::endl;
            }
        }

        latDataSet.close();
        lonDataSet.close();
    }

    return status;
}
//*****************************************************************************
//  CONSTRUCTOR: ossimHdfGridModel(filename)
//  
//  Constructs model from geometry file
//  
//*****************************************************************************
ossimHdfGridModel::ossimHdfGridModel(const ossimFilename& file,
                                     const ossimDrect& imageRect,
                                     ossimString latGridIndexOrName,
                                     ossimString lonGridIndexOrName,
                                     const ossimIpt& gridSpacing)
   :  ossimCoarseGridModel(),
   m_isHdf4(true)
{
   theLatGrid.setDomainType(ossimDblGrid::SAWTOOTH_90);
   theLonGrid.setDomainType(ossimDblGrid::WRAP_180);

   if (latGridIndexOrName.contains("/Latitude") == false && 
       lonGridIndexOrName.contains("/Longitude") == false)//hdf4
   {
      ossim_int32 latGridIndex = ossimString::toInt(latGridIndexOrName);
      ossim_int32 lonGridIndex = ossimString::toInt(lonGridIndexOrName);
      int32 sd_id = SDstart(file.c_str(), DFACC_READ);
      if (sd_id > 0)
      {
         int32 sds_id = SDselect(sd_id, latGridIndex);
         if (sds_id > 0)
         {
            setGridNodes(theLatGrid, sds_id, gridSpacing);
         }
         SDendaccess (sds_id); 

         sds_id = SDselect(sd_id, lonGridIndex);
         if (sds_id > 0)
         {
            setGridNodes(theLonGrid, sds_id, gridSpacing);
         }
         SDendaccess (sds_id); 
      }
      SDend(sd_id);
   }
   else //hdf5
   {
      m_isHdf4 = false;
      ossim_int32 file_id = H5Fopen(file.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);

      // Depreciated, need to fix... (drb)
      // ossim_int32 dataset_id = H5Dopen(file_id, latGridIndexOrName);
      ossim_int32 dataset_id = H5Dopen1(file_id, latGridIndexOrName);
      if (dataset_id >= 0)
      {
         setGridNodes(theLatGrid, dataset_id, gridSpacing);
      }
      H5Dclose(dataset_id);

      // Depreciated, need to fix... (drb)
      // dataset_id = H5Dopen(file_id, lonGridIndexOrName);
      dataset_id = H5Dopen1(file_id, lonGridIndexOrName);      
      if (dataset_id > 0)
      {
         setGridNodes(theLatGrid, dataset_id, gridSpacing);
      }
      H5Dclose(dataset_id);

      H5Fclose(file_id);
   }
   

   // Filter this HDF data as it is often very noisy:
   double filter_kernel[81];
   double weight = 1.0/81.0;
   for (int i=0; i<81; i++)
      filter_kernel[i] = weight;
   theLatGrid.filter(9,9, filter_kernel);
   theLonGrid.filter(9,9, filter_kernel);

   theLatGrid.enableExtrapolation();
   theLonGrid.enableExtrapolation();
   theHeightEnabledFlag = false;
   initializeModelParams(imageRect);
   
   //debugDump(); //###
}