29 const QList<qint64> &datasetTimes = mDatasetTimeSinceGroupReference[group];
30 if ( datasetTimes.isEmpty() )
32 const QDateTime groupReference = mGroupsReferenceDateTime[group];
33 const qint64 timeSinceGroupReference = 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 = timeSinceGlobalReference - mGlobalReferenceDateTime.msecsTo( groupReference );
64 if ( timeSinceGroupReference > datasetTimes.last()
65 || timeSinceGroupReference < datasetTimes.first() )
68 for (
int i = 1; i < datasetTimes.count(); ++i )
70 const qint64 time = datasetTimes.at( i );
71 if ( timeSinceGroupReference < time )
80 if ( ( !mGlobalReferenceDateTime.isValid() && reference.isValid() ) || ( reference.isValid() && mGlobalReferenceDateTime.isValid() && reference < mGlobalReferenceDateTime ) )
81 mGlobalReferenceDateTime = reference;
83 mGroupsReferenceDateTime[group] = reference;
88 QList<qint64> &datasetTimes = mDatasetTimeSinceGroupReference[group];
89 datasetTimes.append( time );
100 return mGlobalReferenceDateTime.isValid();
105 return mGlobalReferenceDateTime;
110 return timeExtent( mGlobalReferenceDateTime );
117 for ( QHash<int, QDateTime>::const_iterator it = mGroupsReferenceDateTime.constBegin(); it != mGroupsReferenceDateTime.constEnd(); ++it )
119 QDateTime groupReference = it.value();
120 if ( !groupReference.isValid() )
121 groupReference = mGlobalReferenceDateTime;
123 if ( !groupReference.isValid() )
124 groupReference = reference;
126 const QList<qint64> times = mDatasetTimeSinceGroupReference[it.key()];
127 qint64 durationSinceFirst = groupReference.msecsTo( reference );
128 qint64 durationSinceLast = groupReference.msecsTo( reference );
129 if ( !times.isEmpty() )
131 durationSinceFirst += times.first();
132 durationSinceLast += times.last();
135 if ( !end.isValid() || groupReference.addMSecs( durationSinceLast ) > end )
136 end = groupReference.addMSecs( durationSinceLast );
138 if ( !begin.isValid() || groupReference.addMSecs( durationSinceFirst ) > begin )
139 begin = groupReference.addMSecs( durationSinceFirst );
147 mTemporalUnit = timeUnit;
152 return mTemporalUnit;
160 const QList<qint64> ×List = mDatasetTimeSinceGroupReference[index.
group()];
161 if ( index.
dataset() < timesList.count() )
162 return timesList.at( index.
dataset() );
169 mGlobalReferenceDateTime = QDateTime();
170 mGroupsReferenceDateTime.clear();
171 mDatasetTimeSinceGroupReference.clear();
177 if ( mDatasetTimeSinceGroupReference.contains( group ) )
179 const QList<qint64> times = mDatasetTimeSinceGroupReference[group];
180 if ( times.count() > 1 )
181 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.