Skip to content

Commit

Permalink
Add celestial body name to EllipsoidDefinition
Browse files Browse the repository at this point in the history
Requires proj 8.1+
  • Loading branch information
nyalldawson committed May 10, 2021
1 parent 95ed5ec commit 7e1f9d7
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 0 deletions.
2 changes: 2 additions & 0 deletions python/core/auto_generated/proj/qgsellipsoidutils.sip.in
Expand Up @@ -40,6 +40,8 @@ Contains utility functions for working with ellipsoids and querying the ellipsoi
QString acronym;
QString description;
QgsEllipsoidUtils::EllipsoidParameters parameters;

QString celestialBodyName;
};

static EllipsoidParameters ellipsoidParameters( const QString &ellipsoid );
Expand Down
7 changes: 7 additions & 0 deletions python/core/auto_generated/proj/qgsprojutils.sip.in
Expand Up @@ -27,6 +27,13 @@ Utility functions for working with the proj library.
static int projVersionMajor();
%Docstring
Returns the proj library major version number.
%End

static int projVersionMinor();
%Docstring
Returns the proj library minor version number.

.. versionadded:: 3.20
%End

static QString epsgRegistryVersion();
Expand Down
4 changes: 4 additions & 0 deletions src/core/proj/qgsellipsoidutils.cpp
Expand Up @@ -269,6 +269,10 @@ QList<QgsEllipsoidUtils::EllipsoidDefinition> QgsEllipsoidUtils::definitions()
name.replace( '_', ' ' );
def.description = QStringLiteral( "%1 (%2:%3)" ).arg( name, authority, code );

#if PROJ_VERSION_MAJOR>8 || (PROJ_VERSION_MAJOR==8 && PROJ_VERSION_MINOR>=1)
def.celestialBodyName = proj_get_celestial_body_name( context, ellipsoid.get() );
#endif

double semiMajor, semiMinor, invFlattening;
int semiMinorComputed = 0;
if ( proj_ellipsoid_get_parameters( context, ellipsoid.get(), &semiMajor, &semiMinor, &semiMinorComputed, &invFlattening ) )
Expand Down
9 changes: 9 additions & 0 deletions src/core/proj/qgsellipsoidutils.h
Expand Up @@ -68,6 +68,15 @@ class CORE_EXPORT QgsEllipsoidUtils
QString description;
//! Ellipsoid parameters
QgsEllipsoidUtils::EllipsoidParameters parameters;

/**
* Name of the associated celestial body (e.g. "Earth").
*
* \warning This method requires PROJ 8.1 or later. On earlier PROJ builds the string will always be empty.
*
* \since QGIS 3.20
*/
QString celestialBodyName;
};

/**
Expand Down
5 changes: 5 additions & 0 deletions src/core/proj/qgsprojutils.cpp
Expand Up @@ -359,6 +359,11 @@ int QgsProjUtils::projVersionMajor()
return PROJ_VERSION_MAJOR;
}

int QgsProjUtils::projVersionMinor()
{
return PROJ_VERSION_MINOR;
}

QString QgsProjUtils::epsgRegistryVersion()
{
PJ_CONTEXT *context = QgsProjContext::get();
Expand Down
7 changes: 7 additions & 0 deletions src/core/proj/qgsprojutils.h
Expand Up @@ -50,6 +50,13 @@ class CORE_EXPORT QgsProjUtils
*/
static int projVersionMajor();

/**
* Returns the proj library minor version number.
*
* \since QGIS 3.20
*/
static int projVersionMinor();

/**
* Returns the EPSG registry database version used by the proj library (e.g. "v9.8.6").
*
Expand Down
4 changes: 4 additions & 0 deletions tests/src/python/test_qgsellipsoidutils.py
Expand Up @@ -98,6 +98,10 @@ def testDefinitions(self):
self.assertEqual(gany_defs.acronym, gany_id)
self.assertEqual(gany_defs.description,
'Ganymede 2000 IAU IAG (ESRI:107916)')

if QgsProjUtils.projVersionMajor() > 8 or (QgsProjUtils.projVersionMajor() == 8 and QgsProjUtils.projVersionMinor() >= 1):
self.assertEqual(gany_defs.celestialBodyName, 'Ganymede')

self.assertTrue(gany_defs.parameters.valid)
self.assertEqual(gany_defs.parameters.semiMajor,
2632345.0)
Expand Down

0 comments on commit 7e1f9d7

Please sign in to comment.