Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WMS GetFeatureInfo and TIME parameter (3.16 backport) #43774

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ Returns the requested temporal range.
Intended to be used by the provider in fetching data.
%End


};

/************************************************************************
Expand Down
6 changes: 3 additions & 3 deletions src/core/raster/qgsrasterdataprovidertemporalcapabilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,6 @@ class CORE_EXPORT QgsRasterDataProviderTemporalCapabilities : public QgsDataProv
*/
const QgsDateTimeRange &requestedTemporalRange() const;

private:

/**
* Sets the requested temporal \a range to retrieve when
* returning data from the associated data provider.
Expand All @@ -122,7 +120,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
Original file line number Diff line number Diff line change
Expand Up @@ -896,7 +896,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 @@ -908,6 +908,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
Original file line number Diff line number Diff line change
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( new 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