mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-08 00:05:09 -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;
|
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::Unknown:
|
||||||
case Qgis::CrsType::Geodetic:
|
case Qgis::CrsType::Geodetic:
|
||||||
case Qgis::CrsType::Geocentric:
|
|
||||||
case Qgis::CrsType::Geographic2d:
|
case Qgis::CrsType::Geographic2d:
|
||||||
case Qgis::CrsType::Geographic3d:
|
|
||||||
case Qgis::CrsType::Vertical:
|
case Qgis::CrsType::Vertical:
|
||||||
case Qgis::CrsType::Projected:
|
case Qgis::CrsType::Projected:
|
||||||
case Qgis::CrsType::Temporal:
|
case Qgis::CrsType::Temporal:
|
||||||
|
@ -1079,11 +1079,27 @@ bool QgsProject::setVerticalCrs( const QgsCoordinateReferenceSystem &crs, QStrin
|
|||||||
}
|
}
|
||||||
break;
|
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::Unknown:
|
||||||
case Qgis::CrsType::Geodetic:
|
case Qgis::CrsType::Geodetic:
|
||||||
case Qgis::CrsType::Geocentric:
|
|
||||||
case Qgis::CrsType::Geographic2d:
|
case Qgis::CrsType::Geographic2d:
|
||||||
case Qgis::CrsType::Geographic3d:
|
|
||||||
case Qgis::CrsType::Projected:
|
case Qgis::CrsType::Projected:
|
||||||
case Qgis::CrsType::Temporal:
|
case Qgis::CrsType::Temporal:
|
||||||
case Qgis::CrsType::Engineering:
|
case Qgis::CrsType::Engineering:
|
||||||
@ -1597,6 +1613,8 @@ bool QgsProject::rebuildCrs3D( QString *error )
|
|||||||
switch ( mCrs.type() )
|
switch ( mCrs.type() )
|
||||||
{
|
{
|
||||||
case Qgis::CrsType::Compound:
|
case Qgis::CrsType::Compound:
|
||||||
|
case Qgis::CrsType::Geographic3d:
|
||||||
|
case Qgis::CrsType::Geocentric:
|
||||||
mCrs3D = mCrs;
|
mCrs3D = mCrs;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1608,9 +1626,7 @@ bool QgsProject::rebuildCrs3D( QString *error )
|
|||||||
|
|
||||||
case Qgis::CrsType::Unknown:
|
case Qgis::CrsType::Unknown:
|
||||||
case Qgis::CrsType::Geodetic:
|
case Qgis::CrsType::Geodetic:
|
||||||
case Qgis::CrsType::Geocentric:
|
|
||||||
case Qgis::CrsType::Geographic2d:
|
case Qgis::CrsType::Geographic2d:
|
||||||
case Qgis::CrsType::Geographic3d:
|
|
||||||
case Qgis::CrsType::Projected:
|
case Qgis::CrsType::Projected:
|
||||||
case Qgis::CrsType::Temporal:
|
case Qgis::CrsType::Temporal:
|
||||||
case Qgis::CrsType::Engineering:
|
case Qgis::CrsType::Engineering:
|
||||||
|
@ -256,13 +256,19 @@ class TestQgsProject(QgisTestCase):
|
|||||||
self.assertEqual(project.verticalCrs().authid(), 'EPSG:5703')
|
self.assertEqual(project.verticalCrs().authid(), 'EPSG:5703')
|
||||||
self.assertEqual(len(spy), 1)
|
self.assertEqual(len(spy), 1)
|
||||||
|
|
||||||
# invalid combination
|
# invalid combinations
|
||||||
project.setCrs(QgsCoordinateReferenceSystem('EPSG:4979'))
|
project.setCrs(QgsCoordinateReferenceSystem('EPSG:4979'))
|
||||||
ok, err = project.setVerticalCrs(QgsCoordinateReferenceSystem('EPSG:5711'))
|
ok, err = project.setVerticalCrs(QgsCoordinateReferenceSystem('EPSG:5711'))
|
||||||
self.assertFalse(ok)
|
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')
|
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):
|
def test_crs_3d(self):
|
||||||
project = QgsProject()
|
project = QgsProject()
|
||||||
self.assertFalse(project.crs3D().isValid())
|
self.assertFalse(project.crs3D().isValid())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user