Skip to content

Commit 88b324d

Browse files
committed
[processing] Allow CRS parameters to be set to a direct QgsCoordinateReferenceSystem object
1 parent f83b3ec commit 88b324d

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

src/core/processing/qgsprocessingparameters.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,12 @@ QgsCoordinateReferenceSystem QgsProcessingParameters::parameterAsCrs( const QgsP
687687

688688
QVariant val = value;
689689

690-
if ( val.canConvert<QgsProcessingFeatureSourceDefinition>() )
690+
if ( val.canConvert<QgsCoordinateReferenceSystem>() )
691+
{
692+
// input is a QgsCoordinateReferenceSystem - done!
693+
return val.value< QgsCoordinateReferenceSystem >();
694+
}
695+
else if ( val.canConvert<QgsProcessingFeatureSourceDefinition>() )
691696
{
692697
// input is a QgsProcessingFeatureSourceDefinition - get extra properties from it
693698
QgsProcessingFeatureSourceDefinition fromVar = qvariant_cast<QgsProcessingFeatureSourceDefinition>( val );
@@ -1717,7 +1722,11 @@ bool QgsProcessingParameterCrs::checkValueIsAcceptable( const QVariant &input, Q
17171722
if ( !input.isValid() )
17181723
return mFlags & FlagOptional;
17191724

1720-
if ( input.canConvert<QgsProcessingFeatureSourceDefinition>() )
1725+
if ( input.canConvert<QgsCoordinateReferenceSystem>() )
1726+
{
1727+
return true;
1728+
}
1729+
else if ( input.canConvert<QgsProcessingFeatureSourceDefinition>() )
17211730
{
17221731
return true;
17231732
}
@@ -1746,6 +1755,14 @@ QString QgsProcessingParameterCrs::valueAsPythonString( const QVariant &value, Q
17461755
if ( !value.isValid() )
17471756
return QStringLiteral( "None" );
17481757

1758+
if ( value.canConvert<QgsCoordinateReferenceSystem>() )
1759+
{
1760+
if ( !value.value< QgsCoordinateReferenceSystem >().isValid() )
1761+
return QStringLiteral( "QgsCoordinateReferenceSystem()" );
1762+
else
1763+
return QStringLiteral( "QgsCoordinateReferenceSystem('%1')" ).arg( value.value< QgsCoordinateReferenceSystem >().authid() );
1764+
}
1765+
17491766
if ( value.canConvert<QgsProperty>() )
17501767
return QStringLiteral( "QgsProperty.fromExpression('%1')" ).arg( value.value< QgsProperty >().asExpression() );
17511768

src/core/processing/qgsprocessingparametertypeimpl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ class CORE_EXPORT QgsProcessingParameterTypeCrs : public QgsProcessingParameterT
257257
<< QObject::tr( "str: layer ID. CRS of layer is used." )
258258
<< QObject::tr( "str: layer name. CRS of layer is used." )
259259
<< QObject::tr( "str: layer source. CRS of layer is used." )
260+
<< QObject::tr( "QgsCoordinateReferenceSystem" )
260261
<< QObject::tr( "QgsMapLayer: CRS of layer is used" )
261262
<< QObject::tr( "QgsProcessingFeatureSourceDefinition: CRS of source is used" )
262263
<< QStringLiteral( "QgsProperty" );

tests/src/analysis/testqgsprocessing.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2125,6 +2125,8 @@ void TestQgsProcessing::parameterCrs()
21252125
QVERIFY( def->checkValueIsAcceptable( "EPSG:12003" ) );
21262126
QVERIFY( def->checkValueIsAcceptable( "EPSG:3111" ) );
21272127
QVERIFY( def->checkValueIsAcceptable( QVariant::fromValue( r1 ) ) );
2128+
QVERIFY( def->checkValueIsAcceptable( QgsCoordinateReferenceSystem() ) );
2129+
QVERIFY( def->checkValueIsAcceptable( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3111" ) ) ) );
21282130
QVERIFY( !def->checkValueIsAcceptable( "" ) );
21292131
QVERIFY( !def->checkValueIsAcceptable( QVariant() ) );
21302132
QVERIFY( def->checkValueIsAcceptable( QgsProcessingFeatureSourceDefinition( r1->id() ) ) );
@@ -2139,6 +2141,12 @@ void TestQgsProcessing::parameterCrs()
21392141
params.insert( "non_optional", QVariant::fromValue( v1 ) );
21402142
QCOMPARE( QgsProcessingParameters::parameterAsCrs( def.get(), params, context ).authid(), QString( "EPSG:3111" ) );
21412143

2144+
// using QgsCoordinateReferenceSystem
2145+
params.insert( "non_optional", QgsCoordinateReferenceSystem( "EPSG:28356" ) );
2146+
QCOMPARE( QgsProcessingParameters::parameterAsCrs( def.get(), params, context ).authid(), QString( "EPSG:28356" ) );
2147+
params.insert( "non_optional", QgsCoordinateReferenceSystem() );
2148+
QVERIFY( !QgsProcessingParameters::parameterAsCrs( def.get(), params, context ).isValid() );
2149+
21422150
// special ProjectCrs string
21432151
params.insert( "non_optional", QStringLiteral( "ProjectCrs" ) );
21442152
QCOMPARE( QgsProcessingParameters::parameterAsCrs( def.get(), params, context ).authid(), QString( "EPSG:28353" ) );
@@ -2172,6 +2180,8 @@ void TestQgsProcessing::parameterCrs()
21722180
QCOMPARE( QgsProcessingParameters::parameterAsCrs( def.get(), params, context ).authid(), QString( "EPSG:3111" ) );
21732181

21742182
QCOMPARE( def->valueAsPythonString( QVariant(), context ), QStringLiteral( "None" ) );
2183+
QCOMPARE( def->valueAsPythonString( QgsCoordinateReferenceSystem( "EPSG:3111" ), context ), QStringLiteral( "QgsCoordinateReferenceSystem('EPSG:3111')" ) );
2184+
QCOMPARE( def->valueAsPythonString( QgsCoordinateReferenceSystem(), context ), QStringLiteral( "QgsCoordinateReferenceSystem()" ) );
21752185
QCOMPARE( def->valueAsPythonString( "EPSG:12003", context ), QStringLiteral( "'EPSG:12003'" ) );
21762186
QCOMPARE( def->valueAsPythonString( "ProjectCrs", context ), QStringLiteral( "'ProjectCrs'" ) );
21772187
QCOMPARE( def->valueAsPythonString( QStringLiteral( "c:\\test\\new data\\test.dat" ), context ), QStringLiteral( "'c:\\\\test\\\\new data\\\\test.dat'" ) );

0 commit comments

Comments
 (0)