Skip to content

Commit

Permalink
Fix a few more places we try to load crs as a layer
Browse files Browse the repository at this point in the history
And fix tests which use an invalid EPSG code

Refs #57494
  • Loading branch information
nyalldawson committed Jun 19, 2024
1 parent be9a7ce commit d4ebe26
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
41 changes: 39 additions & 2 deletions src/core/processing/qgsprocessingparameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3077,6 +3077,17 @@ bool QgsProcessingParameterCrs::checkValueIsAcceptable( const QVariant &v, QgsPr
return true;
}

if ( input.type() == QVariant::String )
{
const QString string = input.toString();
if ( string.compare( QLatin1String( "ProjectCrs" ), Qt::CaseInsensitive ) == 0 )
return true;

const QgsCoordinateReferenceSystem crs( string );
if ( crs.isValid() )
return true;
}

// direct map layer value
if ( qobject_cast< QgsMapLayer * >( qvariant_cast<QObject *>( input ) ) )
return true;
Expand All @@ -3103,6 +3114,17 @@ QString QgsProcessingParameterCrs::valueAsPythonString( const QVariant &value, Q
if ( value.userType() == QMetaType::type( "QgsProperty" ) )
return QStringLiteral( "QgsProperty.fromExpression('%1')" ).arg( value.value< QgsProperty >().asExpression() );

if ( value.type() == QVariant::String )
{
const QString string = value.toString();
if ( string.compare( QLatin1String( "ProjectCrs" ), Qt::CaseInsensitive ) == 0 )
return QgsProcessingUtils::stringToPythonLiteral( string );

const QgsCoordinateReferenceSystem crs( string );
if ( crs.isValid() )
return QgsProcessingUtils::stringToPythonLiteral( string );
}

QVariantMap p;
p.insert( name(), value );
QgsMapLayer *layer = QgsProcessingParameters::parameterAsLayer( this, p, context );
Expand All @@ -3116,16 +3138,31 @@ QString QgsProcessingParameterCrs::valueAsString( const QVariant &value, QgsProc
{
if ( value.type() == QVariant::String )
{
const QgsCoordinateReferenceSystem crs( value.toString() );
const QString string = value.toString();
if ( string.compare( QLatin1String( "ProjectCrs" ), Qt::CaseInsensitive ) == 0 )
return string;

const QgsCoordinateReferenceSystem crs( string );
if ( crs.isValid() )
return value.toString();
return string;
}

return valueAsStringPrivate( value, context, ok, ValueAsStringFlag::AllowMapLayerValues );
}

QVariant QgsProcessingParameterCrs::valueAsJsonObject( const QVariant &value, QgsProcessingContext &context ) const
{
if ( value.type() == QVariant::String )
{
const QString string = value.toString();
if ( string.compare( QLatin1String( "ProjectCrs" ), Qt::CaseInsensitive ) == 0 )
return string;

const QgsCoordinateReferenceSystem crs( string );
if ( crs.isValid() )
return string;
}

return valueAsJsonObjectPrivate( value, context, ValueAsStringFlag::AllowMapLayerValues );
}

Expand Down
7 changes: 3 additions & 4 deletions tests/src/analysis/testqgsprocessing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3145,7 +3145,6 @@ void TestQgsProcessing::parameterCrs()
QVERIFY( !def->checkValueIsAcceptable( false ) );
QVERIFY( !def->checkValueIsAcceptable( true ) );
QVERIFY( !def->checkValueIsAcceptable( 5 ) );
QVERIFY( def->checkValueIsAcceptable( "EPSG:12003" ) );
QVERIFY( def->checkValueIsAcceptable( "EPSG:3111" ) );
QVERIFY( def->checkValueIsAcceptable( QVariant::fromValue( r1 ) ) );
QVERIFY( def->checkValueIsAcceptable( QgsCoordinateReferenceSystem() ) );
Expand Down Expand Up @@ -3206,7 +3205,7 @@ void TestQgsProcessing::parameterCrs()
QCOMPARE( def->valueAsPythonString( QVariant(), context ), QStringLiteral( "None" ) );
QCOMPARE( def->valueAsPythonString( QgsCoordinateReferenceSystem( "EPSG:3111" ), context ), QStringLiteral( "QgsCoordinateReferenceSystem('EPSG:3111')" ) );
QCOMPARE( def->valueAsPythonString( QgsCoordinateReferenceSystem(), context ), QStringLiteral( "QgsCoordinateReferenceSystem()" ) );
QCOMPARE( def->valueAsPythonString( "EPSG:12003", context ), QStringLiteral( "'EPSG:12003'" ) );
QCOMPARE( def->valueAsPythonString( "EPSG:3857", context ), QStringLiteral( "'EPSG:3857'" ) );
QCOMPARE( def->valueAsPythonString( "ProjectCrs", context ), QStringLiteral( "'ProjectCrs'" ) );
QCOMPARE( def->valueAsPythonString( QStringLiteral( "c:\\test\\new data\\test.dat" ), context ), QStringLiteral( "'c:\\\\test\\\\new data\\\\test.dat'" ) );
QCOMPARE( def->valueAsPythonString( raster1, context ), QString( QString( "'" ) + testDataDir + QStringLiteral( "landsat_4326.tif'" ) ) );
Expand All @@ -3217,7 +3216,7 @@ void TestQgsProcessing::parameterCrs()
QCOMPARE( def->valueAsJsonObject( QVariant(), context ), QVariant() );
QCOMPARE( def->valueAsJsonObject( QgsCoordinateReferenceSystem( "EPSG:3111" ), context ), QVariant( QStringLiteral( "EPSG:3111" ) ) );
QCOMPARE( def->valueAsJsonObject( QgsCoordinateReferenceSystem(), context ), QVariant( QString() ) );
QCOMPARE( def->valueAsJsonObject( "EPSG:12003", context ), QVariant( QStringLiteral( "EPSG:12003" ) ) );
QCOMPARE( def->valueAsJsonObject( "EPSG:3857", context ), QVariant( QStringLiteral( "EPSG:3857" ) ) );
QCOMPARE( def->valueAsJsonObject( "ProjectCrs", context ), QVariant( QStringLiteral( "ProjectCrs" ) ) );
QCOMPARE( def->valueAsJsonObject( QStringLiteral( "c:\\test\\new data\\test.dat" ), context ), QVariant( QStringLiteral( "c:\\test\\new data\\test.dat" ) ) );
QCOMPARE( def->valueAsJsonObject( raster1, context ), QVariant( QString( testDataDir + QStringLiteral( "landsat_4326.tif" ) ) ) );
Expand All @@ -3231,7 +3230,7 @@ void TestQgsProcessing::parameterCrs()
QVERIFY( ok );
QCOMPARE( def->valueAsString( QgsCoordinateReferenceSystem(), context, ok ), QString() );
QVERIFY( ok );
QCOMPARE( def->valueAsString( "EPSG:12003", context, ok ), QStringLiteral( "EPSG:12003" ) );
QCOMPARE( def->valueAsString( "EPSG:3857", context, ok ), QStringLiteral( "EPSG:3857" ) );
QVERIFY( ok );
QCOMPARE( def->valueAsString( "ProjectCrs", context, ok ), QStringLiteral( "ProjectCrs" ) );
QVERIFY( ok );
Expand Down

0 comments on commit d4ebe26

Please sign in to comment.