More consistent exception throwing in QgsCoordinateTransform::transformBoundingBox

Depending on the os and proj versions, we weren't always getting an
exception when a bad bounding box transform was made. So now we
explicitly check the result, and if everything was invalid
then we also throw an exception.

This makes the behavior consistent across different platforms,
and fixes running the provider tests on non Travis platforms
(highly likely also fixes various issues encountered while running
QGIS)
This commit is contained in:
Nyall Dawson 2017-11-19 16:17:30 +10:00
parent 957cf652aa
commit 705416c489
2 changed files with 21 additions and 0 deletions

View File

@ -426,6 +426,12 @@ QgsRectangle QgsCoordinateTransform::transformBoundingBox( const QgsRectangle &r
}
}
if ( bb_rect.isNull() )
{
// something bad happened when reprojecting the filter rect... no finite points were left!
throw QgsCsException( QObject::tr( "Could not transform bounding box to target CRS" ) );
}
if ( handle180Crossover )
{
//subtract temporary addition of 360 degrees from longitudes

View File

@ -19,6 +19,7 @@
#include "qgsrectangle.h"
#include <QObject>
#include "qgstest.h"
#include "qgsexception.h"
class TestQgsCoordinateTransform: public QObject
{
@ -204,6 +205,20 @@ void TestQgsCoordinateTransform::transformBoundingBox()
QGSCOMPARENEAR( resultRect.yMinimum(), expectedRect.yMinimum(), 0.001 );
QGSCOMPARENEAR( resultRect.xMaximum(), expectedRect.xMaximum(), 0.001 );
QGSCOMPARENEAR( resultRect.yMaximum(), expectedRect.yMaximum(), 0.001 );
// test transforming a bounding box, resulting in an invalid transform - exception must be thrown
tr = QgsCoordinateTransform( QgsCoordinateReferenceSystem( 4326 ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:28356" ) ) );
QgsRectangle rect( -99999999999, 99999999999, -99999999998, 99999999998 );
bool errorObtained = false;
try
{
resultRect = tr.transformBoundingBox( rect );
}
catch ( QgsCsException & )
{
errorObtained = true;
}
QVERIFY( errorObtained );
}
QGSTEST_MAIN( TestQgsCoordinateTransform )