| 
    QGIS API Documentation
    3.26.3-Buenos Aires (65e4edfdad)
    
   | 
 
 
 
 
Go to the documentation of this file.
   31 #include <QRegularExpression> 
   35   const QMap<QString, QgsMapLayer *> mapLayers = project->
mapLayers();
 
   39   for ( 
auto it = mapLayers.constBegin(); it != mapLayers.constEnd(); ++it )
 
   47     if ( layerRange.begin().isValid() && ( !minDate.isValid() ||  layerRange.begin() < minDate ) )
 
   48       minDate = layerRange.begin();
 
   49     if ( layerRange.end().isValid() && ( !maxDate.isValid() ||  layerRange.end() > maxDate ) )
 
   50       maxDate = layerRange.end();
 
   53   return QgsDateTimeRange( minDate, maxDate );
 
   58   const QMap<QString, QgsMapLayer *> mapLayers = project->
mapLayers();
 
   60   QList< QgsDateTimeRange > ranges;
 
   61   for ( 
auto it = mapLayers.constBegin(); it != mapLayers.constEnd(); ++it )
 
   71   return QgsDateTimeRange::mergeRanges( ranges );
 
   78     error = QObject::tr( 
"Filename template is empty" );
 
   81   const int numberOfDigits = settings.
fileNameTemplate.count( QLatin1Char( 
'#' ) );
 
   82   if ( numberOfDigits < 0 )
 
   84     error = QObject::tr( 
"Wrong filename template format (must contain #)" );
 
   87   const QString token( numberOfDigits, QLatin1Char( 
'#' ) );
 
   90     error = QObject::tr( 
"Filename template must contain all # placeholders in one continuous group." );
 
   95     error = QObject::tr( 
"Output directory creation failure." );
 
  107   long long currentFrame = 0;
 
  109   while ( currentFrame < totalFrames )
 
  115         error = QObject::tr( 
"Export canceled" );
 
  118       feedback->
setProgress( currentFrame / 
static_cast<double>( totalFrames ) * 100 );
 
  133     const QString frameNoPaddedLeft( QStringLiteral( 
"%1" ).arg( currentFrame, numberOfDigits, 10, QChar( 
'0' ) ) ); 
 
  134     fileName.replace( token, frameNoPaddedLeft );
 
  135     const QString path = QDir( settings.
outputDirectory ).filePath( fileName );
 
  138     img.setDotsPerMeterX( 1000 * ms.
outputDpi() / 25.4 );
 
  139     img.setDotsPerMeterY( 1000 * ms.
outputDpi() / 25.4 );
 
  150     const auto constMDecorations = settings.
decorations;
 
  153       decoration->render( ms, context );
 
  173   if ( isFractional || interval.
originalUnit() == QgsUnitTypes::TemporalUnit::TemporalUnknownUnit )
 
  175     const double duration = interval.
seconds();
 
  176     return start.addMSecs( frame * duration * 1000 );
 
  182       case QgsUnitTypes::TemporalUnit::TemporalMilliseconds:
 
  184       case QgsUnitTypes::TemporalUnit::TemporalSeconds:
 
  186       case QgsUnitTypes::TemporalUnit::TemporalMinutes:
 
  188       case QgsUnitTypes::TemporalUnit::TemporalHours:
 
  190       case QgsUnitTypes::TemporalUnit::TemporalDays:
 
  192       case QgsUnitTypes::TemporalUnit::TemporalWeeks:
 
  194       case QgsUnitTypes::TemporalUnit::TemporalMonths:
 
  196       case QgsUnitTypes::TemporalUnit::TemporalYears:
 
  198       case QgsUnitTypes::TemporalUnit::TemporalDecades:
 
  200       case QgsUnitTypes::TemporalUnit::TemporalCenturies:
 
  202       case QgsUnitTypes::TemporalUnit::TemporalUnknownUnit:
 
  205       case QgsUnitTypes::TemporalUnit::TemporalIrregularStep:
 
  220   if ( timeDuration.
years == 0 && timeDuration.
months == 0 && timeDuration.
weeks == 0 && timeDuration.
days == 0
 
  231   QList<QDateTime> res;
 
  232   QDateTime current = start;
 
  233   maxValuesExceeded = 
false;
 
  234   while ( current <= end )
 
  238     if ( maxValues >= 0 && res.size() > maxValues )
 
  240       maxValuesExceeded = 
true;
 
  244     if ( timeDuration.
years )
 
  245       current = current.addYears( timeDuration.
years );
 
  246     if ( timeDuration.
months )
 
  247       current = current.addMonths( timeDuration.
months );
 
  248     if ( timeDuration.
weeks || timeDuration.
days )
 
  249       current = current.addDays( timeDuration.
weeks * 7 + timeDuration.
days );
 
  251       current = current.addSecs( timeDuration.
hours * 60LL * 60 + timeDuration.
minutes * 60 + timeDuration.
seconds );
 
  259   maxValuesExceeded = 
false;
 
  260   const QStringList parts = 
string.split( 
'/' );
 
  261   if ( parts.length() != 3 )
 
  266   const QDateTime start = QDateTime::fromString( parts.at( 0 ), Qt::ISODate );
 
  267   if ( !start.isValid() )
 
  269   const QDateTime end = QDateTime::fromString( parts.at( 1 ), Qt::ISODate );
 
  270   if ( !end.isValid() )
 
  291     text.append( QString::number( 
years ) );
 
  296     text.append( QString::number( 
months ) );
 
  301     text.append( QString::number( 
days ) );
 
  307     if ( !text.contains( 
'T' ) )
 
  309     text.append( QString::number( 
hours ) );
 
  314     if ( !text.contains( 
'T' ) )
 
  316     text.append( QString::number( 
minutes ) );
 
  321     if ( !text.contains( 
'T' ) )
 
  323     text.append( QString::number( 
seconds ) );
 
  331   long long secs = 0.0;
 
  351   QDateTime resultDateTime = dateTime;
 
  354     resultDateTime = resultDateTime.addYears( 
years );
 
  356     resultDateTime = resultDateTime.addMonths( 
months );
 
  358     resultDateTime = resultDateTime.addDays( 
weeks * 7 + 
days );
 
  362   return resultDateTime;
 
  368   thread_local 
const QRegularExpression sRx( QStringLiteral( R
"(P(?:([\d]+)Y)?(?:([\d]+)M)?(?:([\d]+)W)?(?:([\d]+)D)?(?:T(?:([\d]+)H)?(?:([\d]+)M)?(?:([\d\.]+)S)?)?$)" ) ); 
  370   const QRegularExpressionMatch match = sRx.match( 
string );
 
  372   if ( match.hasMatch() )
 
  375     duration.
years = match.captured( 1 ).toInt();
 
  376     duration.
months = match.captured( 2 ).toInt();
 
  377     duration.
weeks = match.captured( 3 ).toInt();
 
  378     duration.
days = match.captured( 4 ).toInt();
 
  379     duration.
hours = match.captured( 5 ).toInt();
 
  380     duration.
minutes = match.captured( 6 ).toInt();
 
  381     duration.
seconds = match.captured( 7 ).toDouble();
 
  
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
void setProgress(double progress)
Sets the current progress for the feedback object.
 
long long toSeconds() const
Returns the total duration in seconds.
 
double seconds() const
Returns the interval duration in seconds.
 
static bool exportAnimation(const QgsMapSettings &mapSettings, const AnimationExportSettings &settings, QString &error, QgsFeedback *feedback=nullptr)
Exports animation frames by rendering the map to multiple destination images.
 
long long totalFrameCount() const
Returns the total number of frames for the navigation.
 
virtual QList< QgsDateTimeRange > allTemporalRanges(QgsMapLayer *layer) const
Attempts to calculate the overall list of all temporal extents which are contained in the specified l...
 
void waitForFinished() override
Block until the job has finished.
 
QSize outputSize() const
Returns the size of the resulting map image, in pixels.
 
static QgsRenderContext fromMapSettings(const QgsMapSettings &mapSettings)
create initialized QgsRenderContext instance from given QgsMapSettings
 
double originalDuration() const
Returns the original interval duration.
 
Contains settings relating to exporting animations.
 
static QList< QgsDateTimeRange > usedTemporalRangesForProject(QgsProject *project)
Calculates all temporal ranges which are in use for a project.
 
QMap< QString, QgsMapLayer * > mapLayers(const bool validOnly=false) const
Returns a map of all registered layers by layer ID.
 
void setIsTemporal(bool enabled)
Sets whether the temporal range is enabled (i.e.
 
void setPainter(QPainter *p)
Sets the destination QPainter for the render operation.
 
static QgsTimeDuration fromString(const QString &string, bool &ok)
Creates a QgsTimeDuration from a string value.
 
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
 
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
 
QString toString() const
Converts the duration to an ISO8601 duration string.
 
Contains information about the context of a rendering operation.
 
void setFrameRate(double rate)
Sets the frame rate of the map (in frames per second), for maps which are part of an animation.
 
QgsDateTimeRange dateTimeRangeForFrameNumber(long long frame) const
Calculates the temporal range associated with a particular animation frame.
 
virtual QgsDateTimeRange calculateTemporalExtent(QgsMapLayer *layer) const
Attempts to calculate the overall temporal extent for the specified layer, using the settings defined...
 
QImage::Format outputImageFormat() const
format of internal QImage, default QImage::Format_ARGB32_Premultiplied
 
QgsDateTimeRange animationRange
Dictates the overall temporal range of the animation.
 
void setCurrentFrame(long long frame)
Sets the current frame of the map, for maps which are part of an animation.
 
static const int MONTHS
Seconds per month, based on 30 day month.
 
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
 
QString outputDirectory
Destination directory for created image files.
 
void start()
Start the rendering job and immediately return.
 
bool isActive() const
Returns true if the temporal property is active.
 
void setCurrentFrameNumber(long long frame)
Sets the current animation frame number.
 
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
 
Base class for feedback objects to be used for cancellation of something running in a worker thread.
 
void setTemporalExtents(const QgsDateTimeRange &extents)
Sets the navigation temporal extents, which dictate the earliest and latest date time possible in the...
 
static const int DAY
Seconds per day.
 
QString fileNameTemplate
The filename template for exporting the frames.
 
static const int HOUR
Seconds per hour.
 
QColor backgroundColor() const
Returns the background color of the map.
 
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
 
static QList< QDateTime > calculateDateTimesUsingDuration(const QDateTime &start, const QDateTime &end, const QString &duration, bool &ok, bool &maxValuesExceeded, int maxValues=-1)
Calculates a complete list of datetimes between start and end, using the specified ISO8601 duration s...
 
QgsInterval toInterval() const
Converts the duration to an interval value.
 
QgsExpressionContextScope * createExpressionContextScope() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
 
static const int MINUTE
Seconds per minute.
 
void setFrameDuration(const QgsInterval &duration)
Sets the frame duration, which dictates the temporal length of each frame in the animation.
 
double frameRate
Target animation frame rate in frames per second.
 
const QgsExpressionContext & expressionContext() const
Gets the expression context.
 
Implements a temporal controller based on a frame by frame navigation and animation.
 
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
 
Job implementation that renders everything sequentially using a custom painter.
 
QgsInterval frameDuration
Duration of individual export frames.
 
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
 
static QList< QDateTime > calculateDateTimesFromISO8601(const QString &string, bool &ok, bool &maxValuesExceeded, int maxValues=-1)
Calculates a complete list of datetimes from a ISO8601 string containing a duration (eg "2021-03-23T0...
 
static QDateTime calculateFrameTime(const QDateTime &start, const long long frame, const QgsInterval &interval)
Calculates the frame time for an animation.
 
Contains utility methods for working with temporal layers and projects.
 
Base class for all map layer types. This is the base class for all map layer types (vector,...
 
A representation of the interval between two datetime values.
 
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
 
Interface for map decorations.
 
double outputDpi() const
Returns the DPI (dots per inch) used for conversion between real world units (e.g.
 
The QgsMapSettings class contains configuration for rendering of the map. The rendering itself is don...
 
QList< QgsMapDecoration * > decorations
List of decorations to draw onto exported frames.
 
QgsUnitTypes::TemporalUnit originalUnit() const
Returns the original interval temporal unit.
 
static const int YEARS
Seconds per year (average)
 
static QgsDateTimeRange calculateTemporalRangeForProject(QgsProject *project)
Calculates the temporal range for a project.
 
QDateTime addToDateTime(const QDateTime &dateTime)
Adds this duration to a starting dateTime value.