You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.7 KiB
110 lines
3.7 KiB
/******************************************************************************
|
|
*
|
|
* Project: GDAL Core
|
|
* Purpose: Declaration of GDALPamMDArray class
|
|
* Author: Even Rouault <even.rouault at spatialys.com>
|
|
*
|
|
******************************************************************************
|
|
* Copyright (c) 2019, Even Rouault <even.rouault at spatialys.com>
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
****************************************************************************/
|
|
|
|
#ifndef GDAL_PAM_MULTIDIM_H_INCLUDED
|
|
#define GDAL_PAM_MULTIDIM_H_INCLUDED
|
|
|
|
#include "cpl_port.h"
|
|
|
|
#include "gdal_multidim.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
//! @cond Doxygen_Suppress
|
|
|
|
/* ******************************************************************** */
|
|
/* GDALPamMultiDim */
|
|
/* ******************************************************************** */
|
|
|
|
/** Class that serializes/deserializes metadata on multidimensional objects.
|
|
* Currently SRS on GDALMDArray.
|
|
*/
|
|
class CPL_DLL GDALPamMultiDim final
|
|
{
|
|
struct Private;
|
|
std::unique_ptr<Private> d;
|
|
|
|
void Load();
|
|
void Save();
|
|
|
|
public:
|
|
explicit GDALPamMultiDim(const std::string &osFilename);
|
|
~GDALPamMultiDim();
|
|
|
|
std::shared_ptr<OGRSpatialReference>
|
|
GetSpatialRef(const std::string &osArrayFullName,
|
|
const std::string &osContext);
|
|
|
|
void SetSpatialRef(const std::string &osArrayFullName,
|
|
const std::string &osContext,
|
|
const OGRSpatialReference *poSRS);
|
|
|
|
CPLErr GetStatistics(const std::string &osArrayFullName,
|
|
const std::string &osContext, bool bApproxOK,
|
|
double *pdfMin, double *pdfMax, double *pdfMean,
|
|
double *pdfStdDev, GUInt64 *pnValidCount);
|
|
|
|
void SetStatistics(const std::string &osArrayFullName,
|
|
const std::string &osContext, bool bApproxStats,
|
|
double dfMin, double dfMax, double dfMean,
|
|
double dfStdDev, GUInt64 nValidCount);
|
|
|
|
void ClearStatistics();
|
|
|
|
void ClearStatistics(const std::string &osArrayFullName,
|
|
const std::string &osContext);
|
|
|
|
static std::shared_ptr<GDALPamMultiDim>
|
|
GetPAM(const std::shared_ptr<GDALMDArray> &poParent);
|
|
};
|
|
|
|
/* ******************************************************************** */
|
|
/* GDALPamMDArray */
|
|
/* ******************************************************************** */
|
|
|
|
/** Class that relies on GDALPamMultiDim to serializes/deserializes metadata. */
|
|
class CPL_DLL GDALPamMDArray : public GDALMDArray
|
|
{
|
|
std::shared_ptr<GDALPamMultiDim> m_poPam;
|
|
|
|
protected:
|
|
GDALPamMDArray(const std::string &osParentName, const std::string &osName,
|
|
const std::shared_ptr<GDALPamMultiDim> &poPam,
|
|
const std::string &osContext = std::string());
|
|
|
|
bool SetStatistics(bool bApproxStats, double dfMin, double dfMax,
|
|
double dfMean, double dfStdDev, GUInt64 nValidCount,
|
|
CSLConstList papszOptions) override;
|
|
|
|
public:
|
|
const std::shared_ptr<GDALPamMultiDim> &GetPAM() const
|
|
{
|
|
return m_poPam;
|
|
}
|
|
|
|
CPLErr GetStatistics(bool bApproxOK, bool bForce, double *pdfMin,
|
|
double *pdfMax, double *pdfMean, double *padfStdDev,
|
|
GUInt64 *pnValidCount, GDALProgressFunc pfnProgress,
|
|
void *pProgressData) override;
|
|
|
|
void ClearStatistics() override;
|
|
|
|
bool SetSpatialRef(const OGRSpatialReference *poSRS) override;
|
|
|
|
std::shared_ptr<OGRSpatialReference> GetSpatialRef() const override;
|
|
};
|
|
|
|
//! @endcond
|
|
|
|
#endif
|