mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Don't permit user set vertical crs for project when crs is geographic 3d
or geocentric Following https://docs.ogc.org/as/18-005r5/18-005r5.html#34 it is not a valid combination to create a compound crs from these types
This commit is contained in:
parent
87907a5448
commit
7107f85f13
@ -178,11 +178,23 @@ void QgsProjectElevationSettingsWidget::updateVerticalCrsOptions()
|
||||
) );
|
||||
break;
|
||||
|
||||
case Qgis::CrsType::Geographic3d:
|
||||
mVerticalCrsStackedWidget->setCurrentWidget( mCrsPageDisabled );
|
||||
mCrsDisabledLabel->setText( tr( "Project coordinate reference system is set to a geographic 3D CRS (%1), so the vertical CRS cannot be manually specified." ).arg(
|
||||
QgsProject::instance()->crs().userFriendlyIdentifier()
|
||||
) );
|
||||
break;
|
||||
|
||||
case Qgis::CrsType::Geocentric:
|
||||
mVerticalCrsStackedWidget->setCurrentWidget( mCrsPageDisabled );
|
||||
mCrsDisabledLabel->setText( tr( "Project coordinate reference system is set to a geocentric CRS (%1), so the vertical CRS cannot be manually specified." ).arg(
|
||||
QgsProject::instance()->crs().userFriendlyIdentifier()
|
||||
) );
|
||||
break;
|
||||
|
||||
case Qgis::CrsType::Unknown:
|
||||
case Qgis::CrsType::Geodetic:
|
||||
case Qgis::CrsType::Geocentric:
|
||||
case Qgis::CrsType::Geographic2d:
|
||||
case Qgis::CrsType::Geographic3d:
|
||||
case Qgis::CrsType::Vertical:
|
||||
case Qgis::CrsType::Projected:
|
||||
case Qgis::CrsType::Temporal:
|
||||
|
@ -1079,11 +1079,27 @@ bool QgsProject::setVerticalCrs( const QgsCoordinateReferenceSystem &crs, QStrin
|
||||
}
|
||||
break;
|
||||
|
||||
case Qgis::CrsType::Geographic3d:
|
||||
if ( crs != oldVerticalCrs )
|
||||
{
|
||||
if ( errorMessage )
|
||||
*errorMessage = QObject::tr( "Project CRS is a Geographic 3D CRS, specified Vertical CRS will be ignored" );
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case Qgis::CrsType::Geocentric:
|
||||
if ( crs != oldVerticalCrs )
|
||||
{
|
||||
if ( errorMessage )
|
||||
*errorMessage = QObject::tr( "Project CRS is a Geocentric CRS, specified Vertical CRS will be ignored" );
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case Qgis::CrsType::Unknown:
|
||||
case Qgis::CrsType::Geodetic:
|
||||
case Qgis::CrsType::Geocentric:
|
||||
case Qgis::CrsType::Geographic2d:
|
||||
case Qgis::CrsType::Geographic3d:
|
||||
case Qgis::CrsType::Projected:
|
||||
case Qgis::CrsType::Temporal:
|
||||
case Qgis::CrsType::Engineering:
|
||||
@ -1597,6 +1613,8 @@ bool QgsProject::rebuildCrs3D( QString *error )
|
||||
switch ( mCrs.type() )
|
||||
{
|
||||
case Qgis::CrsType::Compound:
|
||||
case Qgis::CrsType::Geographic3d:
|
||||
case Qgis::CrsType::Geocentric:
|
||||
mCrs3D = mCrs;
|
||||
break;
|
||||
|
||||
@ -1608,9 +1626,7 @@ bool QgsProject::rebuildCrs3D( QString *error )
|
||||
|
||||
case Qgis::CrsType::Unknown:
|
||||
case Qgis::CrsType::Geodetic:
|
||||
case Qgis::CrsType::Geocentric:
|
||||
case Qgis::CrsType::Geographic2d:
|
||||
case Qgis::CrsType::Geographic3d:
|
||||
case Qgis::CrsType::Projected:
|
||||
case Qgis::CrsType::Temporal:
|
||||
case Qgis::CrsType::Engineering:
|
||||
|
@ -256,13 +256,19 @@ class TestQgsProject(QgisTestCase):
|
||||
self.assertEqual(project.verticalCrs().authid(), 'EPSG:5703')
|
||||
self.assertEqual(len(spy), 1)
|
||||
|
||||
# invalid combination
|
||||
# invalid combinations
|
||||
project.setCrs(QgsCoordinateReferenceSystem('EPSG:4979'))
|
||||
ok, err = project.setVerticalCrs(QgsCoordinateReferenceSystem('EPSG:5711'))
|
||||
self.assertFalse(ok)
|
||||
self.assertEqual(err, 'components of the compound CRS do not belong to one of the allowed combinations of http://docs.opengeospatial.org/as/18-005r5/18-005r5.html#34')
|
||||
self.assertEqual(err, 'Project CRS is a Geographic 3D CRS, specified Vertical CRS will be ignored')
|
||||
self.assertEqual(project.crs3D().authid(), 'EPSG:4979')
|
||||
|
||||
project.setCrs(QgsCoordinateReferenceSystem('EPSG:4978'))
|
||||
ok, err = project.setVerticalCrs(QgsCoordinateReferenceSystem('EPSG:5711'))
|
||||
self.assertFalse(ok)
|
||||
self.assertEqual(err, 'Project CRS is a Geocentric CRS, specified Vertical CRS will be ignored')
|
||||
self.assertEqual(project.crs3D().authid(), 'EPSG:4978')
|
||||
|
||||
def test_crs_3d(self):
|
||||
project = QgsProject()
|
||||
self.assertFalse(project.crs3D().isValid())
|
||||
|
Loading…
x
Reference in New Issue
Block a user