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