Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #43599 from pblottiere/fix_wms_time
WMS GetFeatureInfo and TIME parameter
  • Loading branch information
pblottiere committed Jun 18, 2021
2 parents b304e22 + f771dee commit a038a79
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 5 deletions.
Expand Up @@ -142,6 +142,7 @@ datetime values for the provider.
.. versionadded:: 3.20
%End


};

/************************************************************************
Expand Down
6 changes: 3 additions & 3 deletions src/core/raster/qgsrasterdataprovidertemporalcapabilities.h
Expand Up @@ -153,8 +153,6 @@ class CORE_EXPORT QgsRasterDataProviderTemporalCapabilities : public QgsDataProv
*/
void setDefaultInterval( const QgsInterval &interval );

private:

/**
* Sets the requested temporal \a range to retrieve when
* returning data from the associated data provider.
Expand All @@ -165,7 +163,9 @@ class CORE_EXPORT QgsRasterDataProviderTemporalCapabilities : public QgsDataProv
*
* \see requestedTemporalRange()
*/
void setRequestedTemporalRange( const QgsDateTimeRange &range );
void setRequestedTemporalRange( const QgsDateTimeRange &range ) SIP_SKIP;

private:

/**
* Represents available data provider datetime range.
Expand Down
4 changes: 3 additions & 1 deletion src/gui/qgsmaptoolidentify.cpp
Expand Up @@ -944,7 +944,7 @@ bool QgsMapToolIdentify::identifyRasterLayer( QList<IdentifyResult> *results, Qg
if ( !layer )
return false;

QgsRasterDataProvider *dprovider = layer->dataProvider();
std::unique_ptr< QgsRasterDataProvider > dprovider( layer->dataProvider()->clone() );
if ( !dprovider )
return false;

Expand All @@ -956,6 +956,8 @@ bool QgsMapToolIdentify::identifyRasterLayer( QList<IdentifyResult> *results, Qg
{
if ( !layer->temporalProperties()->isVisibleInTemporalRange( identifyContext.temporalRange() ) )
return false;

dprovider->temporalCapabilities()->setRequestedTemporalRange( identifyContext.temporalRange() );
}

QgsPointXY pointInCanvasCrs = point;
Expand Down
36 changes: 35 additions & 1 deletion tests/src/app/testqgsmaptoolidentifyaction.cpp
Expand Up @@ -37,6 +37,7 @@
#include "qgsmapmouseevent.h"
#include "qgsmaplayertemporalproperties.h"
#include "qgsmeshlayertemporalproperties.h"
#include "qgsrasterlayertemporalproperties.h"

#include <QTimer>

Expand All @@ -58,6 +59,7 @@ class TestQgsMapToolIdentifyAction : public QObject
void areaCalculation(); //test calculation of derived area attribute
void identifyRasterFloat32(); // test pixel identification and decimal precision
void identifyRasterFloat64(); // test pixel identification and decimal precision
void identifyRasterTemporal();
void identifyMesh(); // test identification for mesh layer
void identifyVectorTile(); // test identification for vector tile layer
void identifyInvalidPolygons(); // test selecting invalid polygons
Expand Down Expand Up @@ -520,7 +522,12 @@ QString TestQgsMapToolIdentifyAction::testIdentifyRaster( QgsRasterLayer *layer,
{
std::unique_ptr< QgsMapToolIdentifyAction > action( new QgsMapToolIdentifyAction( canvas ) );
QgsPointXY mapPoint = canvas->getCoordinateTransform()->transform( xGeoref, yGeoref );
QList<QgsMapToolIdentify::IdentifyResult> result = action->identify( mapPoint.x(), mapPoint.y(), QList<QgsMapLayer *>() << layer );

QgsIdentifyContext identifyContext;
if ( canvas->mapSettings().isTemporal() )
identifyContext.setTemporalRange( canvas->temporalRange() );

QList<QgsMapToolIdentify::IdentifyResult> result = action->identify( mapPoint.x(), mapPoint.y(), QList<QgsMapLayer *>() << layer, QgsMapToolIdentify::DefaultQgsSetting, identifyContext );
if ( result.length() != 1 )
return QString();
return result[0].mAttributes[QStringLiteral( "Band 1" )];
Expand Down Expand Up @@ -565,6 +572,33 @@ TestQgsMapToolIdentifyAction::testIdentifyVectorTile( QgsVectorTileLayer *layer,
return result;
}

void TestQgsMapToolIdentifyAction::identifyRasterTemporal()
{
//create a temporary layer
QString raster = QStringLiteral( TEST_DATA_DIR ) + "/raster/test.asc";
std::unique_ptr< QgsRasterLayer> tempLayer = std::make_unique< QgsRasterLayer >( raster );
QVERIFY( tempLayer->isValid() );

// activate temporal properties
tempLayer->temporalProperties()->setIsActive( true );

QgsDateTimeRange range = QgsDateTimeRange( QDateTime( QDate( 2020, 1, 1 ), QTime(), Qt::UTC ),
QDateTime( QDate( 2020, 3, 31 ), QTime(), Qt::UTC ) );
qobject_cast< QgsRasterLayerTemporalProperties * >( tempLayer->temporalProperties() )->setFixedTemporalRange( range );

canvas->setExtent( QgsRectangle( 0, 0, 7, 1 ) );

// invalid temporal range on canvas
canvas->setTemporalRange( QgsDateTimeRange( QDateTime( QDate( 1950, 01, 01 ), QTime( 0, 0, 0 ), Qt::UTC ),
QDateTime( QDate( 1950, 01, 01 ), QTime( 1, 0, 0 ), Qt::UTC ) ) );
QCOMPARE( testIdentifyRaster( tempLayer.get(), 0.5, 0.5 ), QString( ) );

// valid temporal range on canvas
canvas->setTemporalRange( QgsDateTimeRange( QDateTime( QDate( 1950, 01, 01 ), QTime( 0, 0, 0 ), Qt::UTC ),
QDateTime( QDate( 2050, 01, 01 ), QTime( 1, 0, 0 ), Qt::UTC ) ) );
QCOMPARE( testIdentifyRaster( tempLayer.get(), 0.5, 0.5 ), QString( "-999.9" ) );
}

void TestQgsMapToolIdentifyAction::identifyRasterFloat32()
{
//create a temporary layer
Expand Down

0 comments on commit a038a79

Please sign in to comment.