6 #ifndef MDAL_DATA_MODEL_HPP
7 #define MDAL_DATA_MODEL_HPP
16 #include "mdal_datetime.hpp"
26 BBox(
double lx,
double ux,
double ly,
double uy ): minX( lx ), maxX( ux ), minY( ly ), maxY( uy ) {}
28 double minX = std::numeric_limits<double>::max();
29 double maxX = -std::numeric_limits<double>::max();
30 double minY = std::numeric_limits<double>::max();
31 double maxY = -std::numeric_limits<double>::max();
36 double minimum = std::numeric_limits<double>::quiet_NaN();
37 double maximum = std::numeric_limits<double>::quiet_NaN();
40 typedef std::vector< std::pair< std::string, std::string > > Metadata;
41 typedef std::vector<std::pair<double, double>> Classification;
49 size_t valuesCount()
const;
52 virtual size_t scalarData(
size_t indexStart,
size_t count,
double *buffer ) = 0;
54 virtual size_t vectorData(
size_t indexStart,
size_t count,
double *buffer ) = 0;
56 virtual size_t activeData(
size_t indexStart,
size_t count,
int *buffer );
69 virtual size_t volumesCount()
const = 0;
70 virtual size_t maximumVerticalLevelsCount()
const = 0;
73 void setStatistics(
const Statistics &statistics );
80 double time( RelativeTimestamp::Unit unit )
const;
82 void setTime(
double time, RelativeTimestamp::Unit unit = RelativeTimestamp::hours );
85 bool supportsActiveFlag()
const;
86 void setSupportsActiveFlag(
bool value );
91 bool mSupportsActiveFlag =
false;
103 size_t verticalLevelData(
size_t indexStart,
size_t count,
double *buffer )
override;
104 size_t faceToVolumeData(
size_t indexStart,
size_t count,
int *buffer )
override;
105 size_t scalarVolumesData(
size_t indexStart,
size_t count,
double *buffer )
override;
106 size_t vectorVolumesData(
size_t indexStart,
size_t count,
double *buffer )
override;
108 size_t volumesCount()
const override;
109 size_t maximumVerticalLevelsCount()
const override;
118 size_t maxVerticalLevelCount
122 virtual size_t scalarData(
size_t indexStart,
size_t count,
double *buffer )
override;
123 virtual size_t vectorData(
size_t indexStart,
size_t count,
double *buffer )
override;
125 size_t volumesCount()
const override;
126 size_t maximumVerticalLevelsCount()
const override;
129 size_t mVolumesCount = 0;
130 size_t mMaximumVerticalLevelsCount = 0;
134 typedef std::vector<std::shared_ptr<Dataset>> Datasets;
141 const std::string &uri
146 const std::string &uri,
147 const std::string &name );
151 std::string driverName()
const;
153 std::string getMetadata(
const std::string &key );
154 void setMetadata(
const std::string &key,
const std::string &val );
155 void setMetadata(
const Metadata &new_metadata );
158 void setName(
const std::string &name );
163 bool isScalar()
const;
164 void setIsScalar(
bool isScalar );
166 MDAL_DataLocation dataLocation()
const;
167 void setDataLocation( MDAL_DataLocation dataLocation );
169 std::string uri()
const;
170 void replaceUri( std::string uri );
173 void setStatistics(
const Statistics &statistics );
176 void setReferenceTime(
const DateTime &referenceTime );
180 size_t maximumVerticalLevelsCount()
const;
182 bool isInEditMode()
const;
188 std::pair<double, double> referenceAngles()
const;
190 bool isPolar()
const;
191 void setIsPolar(
bool isPolar );
193 bool mInEditMode =
false;
195 const std::string mDriverName;
196 Mesh *mParent =
nullptr;
197 bool mIsScalar =
true;
198 bool mIsPolar =
false;
199 std::pair<double, double> mReferenceAngles = { -360, 0};
200 MDAL_DataLocation mDataLocation = MDAL_DataLocation::DataOnVertices;
206 typedef std::vector<std::shared_ptr<DatasetGroup>> DatasetGroups;
213 virtual size_t next(
size_t vertexCount,
double *coordinates ) = 0;
221 virtual size_t next(
size_t edgeCount,
222 int *startVertexIndices,
223 int *endVertexIndices ) = 0;
231 virtual size_t next(
size_t faceOffsetsBufferLen,
232 int *faceOffsetsBuffer,
233 size_t vertexIndicesBufferLen,
234 int *vertexIndicesBuffer ) = 0;
240 Mesh(
const std::string &driverName,
241 size_t faceVerticesMaximumCount,
242 const std::string &uri );
246 std::string driverName()
const;
248 void setSourceCrs(
const std::string &str );
249 void setSourceCrsFromWKT(
const std::string &wkt );
250 void setSourceCrsFromEPSG(
int code );
251 void setSourceCrsFromPrjFile(
const std::string &filename );
253 virtual std::unique_ptr<MDAL::MeshVertexIterator> readVertices() = 0;
254 virtual std::unique_ptr<MDAL::MeshEdgeIterator> readEdges() = 0;
255 virtual std::unique_ptr<MDAL::MeshFaceIterator> readFaces() = 0;
257 DatasetGroups datasetGroups;
260 std::shared_ptr<DatasetGroup>
group(
const std::string &name );
262 virtual size_t verticesCount()
const = 0;
263 virtual size_t edgesCount()
const = 0;
264 virtual size_t facesCount()
const = 0;
265 virtual BBox extent()
const = 0;
266 std::string uri()
const;
267 std::string crs()
const;
268 size_t faceVerticesMaximumCount()
const;
270 std::string getMetadata(
const std::string &key );
271 void setMetadata(
const std::string &key,
const std::string &val );
272 void setMetadata(
const Metadata &new_metadata );
276 virtual void closeSource() {};
278 virtual bool isEditable()
const {
return false;}
280 virtual void addVertices(
size_t vertexCount,
double *coordinates );
281 virtual void addFaces(
size_t faceCount,
size_t driverMaxVerticesPerFace,
int *faceSizes,
int *vertexIndices );
282 virtual void addEdges(
size_t edgeCount,
int *startVertexIndices,
int *endVertexIndices );
286 void setFaceVerticesMaximumCount(
const size_t &faceVerticesMaximumCount );
289 const std::string mDriverName;
290 size_t mFaceVerticesMaximumCount = 0;
291 const std::string mUri;
Definition: mdal_data_model.hpp:97
size_t vectorVolumesData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_data_model.cpp:114
size_t scalarVolumesData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_data_model.cpp:112
size_t faceToVolumeData(size_t indexStart, size_t count, int *buffer) override
For DataOnVolumes.
Definition: mdal_data_model.cpp:110
size_t verticalLevelCountData(size_t indexStart, size_t count, int *buffer) override
For DataOnVolumes.
Definition: mdal_data_model.cpp:106
size_t verticalLevelData(size_t indexStart, size_t count, double *buffer) override
For DataOnVolumes.
Definition: mdal_data_model.cpp:108
Definition: mdal_data_model.hpp:113
virtual size_t scalarData(size_t indexStart, size_t count, double *buffer) override
For DataOnVertices or DataOnFaces.
Definition: mdal_data_model.cpp:135
virtual size_t vectorData(size_t indexStart, size_t count, double *buffer) override
For DataOnVertices or DataOnFaces.
Definition: mdal_data_model.cpp:137
Definition: mdal_data_model.hpp:137
void setReferenceAngles(const std::pair< double, double > &referenceAngle)
First value is the angle for full rotation and second value is the start angle.
Definition: mdal_data_model.cpp:273
Definition: mdal_data_model.hpp:44
virtual size_t vectorVolumesData(size_t indexStart, size_t count, double *buffer)=0
For DataOnVolumes.
virtual size_t activeData(size_t indexStart, size_t count, int *buffer)
For drivers that supports it, see supportsActiveFlag()
Definition: mdal_data_model.cpp:34
virtual size_t faceToVolumeData(size_t indexStart, size_t count, int *buffer)=0
For DataOnVolumes.
virtual size_t scalarData(size_t indexStart, size_t count, double *buffer)=0
For DataOnVertices or DataOnFaces.
virtual size_t verticalLevelCountData(size_t indexStart, size_t count, int *buffer)=0
For DataOnVolumes.
virtual size_t scalarVolumesData(size_t indexStart, size_t count, double *buffer)=0
For DataOnVolumes.
virtual size_t vectorData(size_t indexStart, size_t count, double *buffer)=0
For DataOnVertices or DataOnFaces.
virtual size_t verticalLevelData(size_t indexStart, size_t count, double *buffer)=0
For DataOnVolumes.
Definition: mdal_datetime.hpp:48
Definition: mdal_data_model.hpp:217
Definition: mdal_data_model.hpp:227
Definition: mdal_data_model.hpp:209
Definition: mdal_data_model.hpp:238
std::shared_ptr< DatasetGroup > group(const std::string &name)
Find a dataset group by name.
Definition: mdal_data_model.cpp:335
Definition: mdal_datetime.hpp:18
Definition: mdal_data_model.hpp:24
Definition: mdal_data_model.hpp:35