Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: Hierarchical Data Format Release 4 (HDF4) 4 : * Purpose: Header file for HDF4 datasets reader. 5 : * Author: Andrey Kiselev, dron@ak4719.spb.edu 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2002, Andrey Kiselev <dron@ak4719.spb.edu> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef HDF4DATASET_H_INCLUDED_ 14 : #define HDF4DATASET_H_INCLUDED_ 15 : 16 : #include "hdf.h" 17 : #include "mfhdf.h" 18 : 19 : #include "cpl_list.h" 20 : #include "gdal_pam.h" 21 : 22 : typedef enum // Types of dataset: 23 : { 24 : HDF4_SDS, // Scientific Dataset 25 : HDF4_GR, // General Raster Image 26 : HDF4_EOS, // HDF EOS 27 : HDF4_UNKNOWN 28 : } HDF4DatasetType; 29 : 30 : typedef enum // Types of data products: 31 : { 32 : H4ST_GDAL, // HDF written by GDAL 33 : H4ST_EOS_GRID, // HDF-EOS Grid 34 : H4ST_EOS_SWATH, // HDF-EOS Swath 35 : H4ST_EOS_SWATH_GEOL, // HDF-EOS Swath Geolocation Array 36 : H4ST_SEAWIFS_L1A, // SeaWiFS Level-1A Data 37 : H4ST_SEAWIFS_L2, // SeaWiFS Level-2 Data 38 : H4ST_SEAWIFS_L3, // SeaWiFS Level-3 Standard Mapped Image 39 : H4ST_HYPERION_L1, // Hyperion L1 Data Product 40 : H4ST_UNKNOWN 41 : } HDF4SubdatasetType; 42 : 43 : /************************************************************************/ 44 : /* ==================================================================== */ 45 : /* HDF4Dataset */ 46 : /* ==================================================================== */ 47 : /************************************************************************/ 48 : 49 : class HDF4Dataset CPL_NON_FINAL : public GDALPamDataset 50 : { 51 : 52 : private: 53 : bool bIsHDFEOS; 54 : std::shared_ptr<GDALGroup> m_poRootGroup{}; 55 : 56 : static char **HDF4EOSTokenizeAttrs(const char *pszString); 57 : static char **HDF4EOSGetObject(char **papszAttrList, char **ppszAttrName, 58 : char **ppszAttrClass, char **ppszAttrValue); 59 : 60 : void OpenMultiDim(const char *pszFilename, CSLConstList papszOpenOptionsIn); 61 : 62 : protected: 63 : int32 hGR; 64 : int32 hSD; 65 : int32 nImages; 66 : HDF4SubdatasetType iSubdatasetType; 67 : const char *pszSubdatasetType; 68 : 69 : char **papszGlobalMetadata; 70 : char **papszSubDatasets; 71 : 72 : CPLErr ReadGlobalAttributes(int32); 73 : 74 : public: 75 : static GDALDataType GetDataType(int32); 76 : static const char *GetDataTypeName(int32); 77 : static int GetDataTypeSize(int32); 78 : static double AnyTypeToDouble(int32, void *); 79 : static char **TranslateHDF4Attributes(int32, int32, char *, int32, int32, 80 : char **); 81 : static char **TranslateHDF4EOSAttributes(int32, int32, int32, char **); 82 : 83 : public: 84 : HDF4Dataset(); 85 : virtual ~HDF4Dataset(); 86 : 87 6 : std::shared_ptr<GDALGroup> GetRootGroup() const override 88 : { 89 6 : return m_poRootGroup; 90 : } 91 : 92 : virtual char **GetMetadataDomainList() override; 93 : virtual char **GetMetadata(const char *pszDomain = "") override; 94 : static GDALDataset *Open(GDALOpenInfo *); 95 : }; 96 : 97 : char *SPrintArray(GDALDataType eDataType, const void *paDataArray, int nValues, 98 : const char *pszDelimiter); 99 : 100 : #endif /* HDF4DATASET_H_INCLUDED_ */