28 const QList<qint64> &datasetTimes = mDatasetTimeSinceGroupReference[group];
29 if ( datasetTimes.isEmpty() )
31 const QDateTime groupReference = mGroupsReferenceDateTime[group];
32 const qint64 timeSinceGroupReference =
33 timeSinceGlobalReference - mGlobalReferenceDateTime.msecsTo( groupReference );
35 if ( timeSinceGroupReference > datasetTimes.last()
36 || timeSinceGroupReference < datasetTimes.first() )
39 for (
int i = 1 ; i < datasetTimes.count(); ++i )
41 const qint64 time1 = datasetTimes.at( i - 1 );
42 const qint64 time2 = datasetTimes.at( i );
43 if ( time1 <= timeSinceGroupReference && timeSinceGroupReference <= time2 )
45 if ( abs( timeSinceGroupReference - time2 ) < abs( timeSinceGroupReference - time1 ) )
58 const QList<qint64> &datasetTimes = mDatasetTimeSinceGroupReference[group];
59 if ( datasetTimes.isEmpty() )
61 const QDateTime groupReference = mGroupsReferenceDateTime[group];
62 const qint64 timeSinceGroupReference =
63 timeSinceGlobalReference - mGlobalReferenceDateTime.msecsTo( groupReference );
65 if ( timeSinceGroupReference > datasetTimes.last()
66 || timeSinceGroupReference < datasetTimes.first() )
69 for (
int i = 1; i < datasetTimes.count(); ++i )
71 const qint64 time = datasetTimes.at( i );
72 if ( timeSinceGroupReference < time )
81 if ( ( !mGlobalReferenceDateTime.isValid() && reference.isValid() ) ||
82 ( reference.isValid() && mGlobalReferenceDateTime.isValid() && reference < mGlobalReferenceDateTime ) )
83 mGlobalReferenceDateTime = reference;
85 mGroupsReferenceDateTime[group] = reference;
90 QList<qint64> &datasetTimes = mDatasetTimeSinceGroupReference[group];
91 datasetTimes.append( time );
102 return mGlobalReferenceDateTime.isValid();
107 return mGlobalReferenceDateTime;
113 return timeExtent( mGlobalReferenceDateTime );
120 for ( QHash<int, QDateTime>::const_iterator it = mGroupsReferenceDateTime.constBegin() ;
121 it != mGroupsReferenceDateTime.constEnd(); ++it )
123 QDateTime groupReference = it.value();
124 if ( !groupReference.isValid() )
125 groupReference = mGlobalReferenceDateTime;
127 if ( !groupReference.isValid() )
128 groupReference = reference;
130 const QList<qint64> times = mDatasetTimeSinceGroupReference[it.key()];
131 qint64 durationSinceFirst = groupReference.msecsTo( reference );
132 qint64 durationSinceLast = groupReference.msecsTo( reference );
133 if ( !times.isEmpty() )
135 durationSinceFirst += times.first();
136 durationSinceLast += times.last();
139 if ( !end.isValid() || groupReference.addMSecs( durationSinceLast ) > end )
140 end = groupReference.addMSecs( durationSinceLast );
142 if ( !begin.isValid() || groupReference.addMSecs( durationSinceFirst ) > begin )
143 begin = groupReference.addMSecs( durationSinceFirst );
151 mTemporalUnit = timeUnit;
156 return mTemporalUnit;
164 const QList<qint64> ×List = mDatasetTimeSinceGroupReference[index.
group()];
165 if ( index.
dataset() < timesList.count() )
166 return timesList.at( index.
dataset() );
173 mGlobalReferenceDateTime = QDateTime();
174 mGroupsReferenceDateTime.clear();
175 mDatasetTimeSinceGroupReference.clear();
181 if ( mDatasetTimeSinceGroupReference.contains( group ) )
183 const QList<qint64> times = mDatasetTimeSinceGroupReference[group];
184 if ( times.count() > 1 )
185 ret = times.at( 1 ) - times.at( 0 );
TemporalUnit
Temporal units.
@ Milliseconds
Milliseconds.
QgsDataProviderTemporalCapabilities(bool available=false)
Constructor for QgsDataProviderTemporalCapabilities.
void setTemporalUnit(Qgis::TemporalUnit temporalUnit)
Sets the temporal unit (temporalUnit) used to read data by the data provider.
void addDatasetTime(int group, double time)
Adds a time (in provider unit) from a dataset contained in group.
QDateTime referenceTime() const
Returns the reference time.
QgsMeshDatasetIndex datasetIndexClosestFromRelativeTime(int group, qint64 timeSinceGlobalReference) const
Returns the closest dataset index from the timeSinceGlobalReference.
bool hasReferenceTime() const
Returns whether the reference time is set.
QgsMeshDataProviderTemporalCapabilities()
Constructor for QgsMeshDataProviderTemporalCapabilities.
QgsDateTimeRange timeExtent() const
Returns the time extent using the internal reference time and the first and last times available from...
Qgis::TemporalUnit temporalUnit() const
Returns the temporal unit used to read data by the data provider.
QgsMeshDatasetIndex datasetIndexClosestBeforeRelativeTime(int group, qint64 timeSinceGlobalReference) const
Returns the last dataset with time less than or equal to timeSinceGlobalReference.
void addDatasetTimeInMilliseconds(int group, qint64 time)
Adds a time (in milliseconds) from a dataset contained in group.
void clear()
Clears all stored reference times and dataset times.
qint64 datasetTime(const QgsMeshDatasetIndex &index) const
Returns the relative time in milliseconds of the dataset.
void addGroupReferenceDateTime(int group, const QDateTime &reference)
Adds a reference date/time from a dataset group.
qint64 firstTimeStepDuration(int group) const
Returns the duration of the first time step of the dataset group with index group.
An index that identifies the dataset group (e.g.
bool isValid() const
Returns whether index is valid, ie at least groups is set.
int group() const
Returns a group index.
int dataset() const
Returns a dataset index within group().
static Q_INVOKABLE double fromUnitToUnitFactor(Qgis::DistanceUnit fromUnit, Qgis::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
#define INVALID_MESHLAYER_TIME
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.