This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 1182c4c724 Change in the type of ProjectedCRS.baseCRS: relaxed from 
GeographicCRS to GeodeticCRS for conformance to ISO 19111.
1182c4c724 is described below

commit 1182c4c724c953cc122cf9fa00d20a046bd9deb6
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Wed Apr 17 18:53:37 2024 +0200

    Change in the type of ProjectedCRS.baseCRS:
    relaxed from GeographicCRS to GeodeticCRS for conformance to ISO 19111.
---
 .../org/apache/sis/buildtools/book/OGC.lst         |  1 -
 .../org/apache/sis/portrayal/CanvasContext.java    |  4 +-
 .../gazetteer/MilitaryGridReferenceSystem.java     |  4 +-
 .../apache/sis/io/wkt/GeodeticObjectParser.java    |  4 +-
 .../main/org/apache/sis/referencing/CRS.java       |  4 +-
 .../referencing/EllipsoidalHeightSeparator.java    |  5 +--
 .../sis/referencing/crs/DefaultProjectedCRS.java   | 44 ++++++++++++----------
 .../{SC_GeographicCRS.java => SC_GeodeticCRS.java} | 37 +++++++++---------
 .../apache/sis/referencing/crs/package-info.java   |  2 +-
 .../factory/CommonAuthorityFactory.java            |  3 +-
 .../referencing/factory/GeodeticObjectFactory.java |  2 +-
 .../factory/MultiAuthoritiesFactory.java           |  4 +-
 .../referencing/factory/sql/EPSGDataAccess.java    |  6 +--
 .../referencing/operation/DefaultConversion.java   |  7 ++--
 .../DefaultCoordinateOperationFactory.java         | 10 ++---
 .../referencing/operation/DefaultProjection.java   | 12 +++---
 .../privy/EllipsoidalHeightCombiner.java           |  4 +-
 .../referencing/privy/GeodeticObjectBuilder.java   |  3 +-
 .../sis/xml/bind/referencing/SC_GeodeticCRS.md     |  2 +
 .../sis/xml/bind/referencing/SC_GeographicCRS.md   |  4 --
 .../org/apache/sis/geometry/TransformTestCase.java | 15 ++++----
 .../sis/io/wkt/GeodeticObjectParserTest.java       |  4 +-
 .../referencing/crs/DefaultProjectedCRSTest.java   |  4 +-
 .../report/CoordinateReferenceSystems.java         |  2 +-
 .../integration/CoordinateReferenceSystemTest.java | 16 ++++----
 .../sis/storage/geotiff/reader/CRSBuilder.java     |  4 +-
 geoapi/snapshot                                    |  2 +-
 27 files changed, 105 insertions(+), 104 deletions(-)

diff --git a/buildSrc/src/main/resources/org/apache/sis/buildtools/book/OGC.lst 
b/buildSrc/src/main/resources/org/apache/sis/buildtools/book/OGC.lst
index 7cc85d7506..f9449cb40b 100644
--- a/buildSrc/src/main/resources/org/apache/sis/buildtools/book/OGC.lst
+++ b/buildSrc/src/main/resources/org/apache/sis/buildtools/book/OGC.lst
@@ -217,7 +217,6 @@ SC_EngineeringCRS
 SC_GeneralDerivedCRS
 SC_GeocentricCRS
 SC_GeodeticCRS
-SC_GeographicCRS
 SC_ImageCRS
 SC_ProjectedCRS
 SC_SingleCRS
diff --git 
a/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/CanvasContext.java
 
b/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/CanvasContext.java
index 38477fde68..aae76518d5 100644
--- 
a/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/CanvasContext.java
+++ 
b/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/portrayal/CanvasContext.java
@@ -19,7 +19,7 @@ package org.apache.sis.portrayal;
 import java.util.Optional;
 import java.util.OptionalDouble;
 import org.opengis.metadata.extent.GeographicBoundingBox;
-import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.datum.Ellipsoid;
 import org.opengis.referencing.operation.Matrix;
@@ -201,7 +201,7 @@ final class CanvasContext extends 
CoordinateOperationContext {
                     }
                     combined[j] = m;
                 }
-                final Ellipsoid ellipsoid = ((GeographicCRS) 
objectiveToGeographic.getTargetCRS()).getDatum().getEllipsoid();
+                final Ellipsoid ellipsoid = ((GeodeticCRS) 
objectiveToGeographic.getTargetCRS()).getDatum().getEllipsoid();
                 double radius = Formulas.radiusOfConformalSphere(ellipsoid, 
combined[1]);
                 radius = 
ellipsoid.getAxisUnit().getConverterTo(Units.METRE).convert(radius);
                 resolution = MathFunctions.magnitude(combined) * radius;
diff --git 
a/endorsed/src/org.apache.sis.referencing.gazetteer/main/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
 
b/endorsed/src/org.apache.sis.referencing.gazetteer/main/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
index 7af3c082e8..50f61b01a4 100644
--- 
a/endorsed/src/org.apache.sis.referencing.gazetteer/main/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
+++ 
b/endorsed/src/org.apache.sis.referencing.gazetteer/main/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
@@ -43,7 +43,7 @@ import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.MathTransform2D;
 import org.opengis.referencing.operation.OperationMethod;
 import org.opengis.referencing.operation.CoordinateOperation;
-import org.opengis.referencing.operation.Projection;
+import org.opengis.referencing.operation.Conversion;
 import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
@@ -1523,7 +1523,7 @@ public class MilitaryGridReferenceSystem extends 
ReferencingByIdentifiers {
             this.datum = datum;
             if (horizontal instanceof ProjectedCRS) {
                 ProjectedCRS  projCRS = (ProjectedCRS) horizontal;
-                Projection projection = projCRS.getConversionFromBase();
+                Conversion projection = projCRS.getConversionFromBase();
                 final OperationMethod method = projection.getMethod();
                 if (IdentifiedObjects.isHeuristicMatchForName(method, 
TransverseMercator.NAME)) {
                     crsZone = ZONER.zone(projection.getParameterValues());
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java
index 4fb5f64603..f0678cf713 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/io/wkt/GeodeticObjectParser.java
@@ -2111,7 +2111,7 @@ class GeodeticObjectParser extends MathTransformParser 
implements Comparator<Coo
         final boolean   isWKT1 = element.getKeywordIndex() == 2;               
 // Index of "ProjCS" above.
         final String    name   = element.pullString("name");
         final SingleCRS geoCRS = parseGeodeticCRS(MANDATORY, element, 2, 
WKTKeywords.ellipsoidal);
-        if (!(geoCRS instanceof GeographicCRS)) {
+        if (!(geoCRS instanceof GeodeticCRS)) {
             throw new UnparsableObjectException(errorLocale, 
Errors.Keys.IllegalCRSType_1,
                     new Object[] {geoCRS.getClass()}, element.offset);
         }
@@ -2154,7 +2154,7 @@ class GeodeticObjectParser extends MathTransformParser 
implements Comparator<Coo
             final Map<String,?> properties = parseMetadataAndClose(element, 
name, conversion);
             if (cs instanceof CartesianCS) {
                 final CRSFactory crsFactory = factories.getCRSFactory();
-                return crsFactory.createProjectedCRS(properties, 
(GeographicCRS) geoCRS, conversion, (CartesianCS) cs);
+                return crsFactory.createProjectedCRS(properties, (GeodeticCRS) 
geoCRS, conversion, (CartesianCS) cs);
             }
         } catch (FactoryException exception) {
             throw element.parseFailed(exception);
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java
index 5cc2248a7b..5e8ac70fa7 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/CRS.java
@@ -1298,8 +1298,8 @@ public final class CRS extends Static {
                  * for letting SIS create or associate new ones, which will be 
two-dimensional now.
                  */
                 if (crs instanceof ProjectedCRS) {
-                    final ProjectedCRS  proj = (ProjectedCRS) crs;
-                    final GeographicCRS base = (GeographicCRS) 
getHorizontalComponent(proj.getBaseCRS());
+                    final ProjectedCRS proj = (ProjectedCRS) crs;
+                    final GeodeticCRS  base = (GeodeticCRS) 
getHorizontalComponent(proj.getBaseCRS());
                     Conversion fromBase = proj.getConversionFromBase();
                     fromBase = new 
DefaultConversion(IdentifiedObjects.getProperties(fromBase),
                             fromBase.getMethod(), null, 
fromBase.getParameterValues());
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java
index 2db54434df..d03a744c4f 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/EllipsoidalHeightSeparator.java
@@ -27,7 +27,6 @@ import org.opengis.referencing.crs.SingleCRS;
 import org.opengis.referencing.crs.VerticalCRS;
 import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.crs.GeodeticCRS;
-import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.referencing.datum.GeodeticDatum;
 import org.opengis.referencing.operation.Conversion;
 import org.apache.sis.referencing.privy.AxisDirections;
@@ -129,9 +128,9 @@ final class EllipsoidalHeightSeparator implements 
AxisFilter {
          * we also need to reduce the number of dimensions in the base CRS and 
in the conversion.
          */
         if (crs instanceof ProjectedCRS) {
-            GeographicCRS baseCRS = ((ProjectedCRS) crs).getBaseCRS();
+            GeodeticCRS baseCRS = ((ProjectedCRS) crs).getBaseCRS();
             if (ReferencingUtilities.getDimension(baseCRS) != 2) {
-                baseCRS = (GeographicCRS) separate(baseCRS);
+                baseCRS = (GeodeticCRS) separate(baseCRS);
             }
             Conversion projection = ((ProjectedCRS) 
crs).getConversionFromBase();
             /*
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java
index 3ffad96664..0a69f68c58 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/DefaultProjectedCRS.java
@@ -23,7 +23,7 @@ import jakarta.xml.bind.annotation.XmlRootElement;
 import javax.measure.Unit;
 import javax.measure.quantity.Angle;
 import org.opengis.referencing.crs.ProjectedCRS;
-import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.cs.CartesianCS;
 import org.opengis.referencing.cs.CoordinateSystem;                 // For 
javadoc
 import org.opengis.referencing.datum.GeodeticDatum;
@@ -68,7 +68,7 @@ import org.apache.sis.util.Workaround;
  * @since 0.6
  */
 @XmlType(name = "ProjectedCRSType", propOrder = {
-    "baseCRS",
+    "baseGeodeticCRS",
     "coordinateSystem"
 })
 @XmlRootElement(name = "ProjectedCRS")
@@ -126,10 +126,10 @@ public class DefaultProjectedCRS extends 
AbstractDerivedCRS<Projection> implemen
      * @throws MismatchedDimensionException if the source and target 
dimensions of {@code baseToDerived}
      *         do not match the dimensions of {@code base} and {@code 
derivedCS} respectively.
      *
-     * @see 
org.apache.sis.referencing.factory.GeodeticObjectFactory#createProjectedCRS(Map,
 GeographicCRS, Conversion, CartesianCS)
+     * @see 
org.apache.sis.referencing.factory.GeodeticObjectFactory#createProjectedCRS(Map,
 GeodeticCRS, Conversion, CartesianCS)
      */
     public DefaultProjectedCRS(final Map<String,?> properties,
-                               final GeographicCRS baseCRS,
+                               final GeodeticCRS   baseCRS,
                                final Conversion    conversion,
                                final CartesianCS   derivedCS)
             throws MismatchedDimensionException
@@ -142,7 +142,7 @@ public class DefaultProjectedCRS extends 
AbstractDerivedCRS<Projection> implemen
      * ("Relax constraint on placement of this()/super() call in 
constructors").
      */
     @Workaround(library="JDK", version="1.7")
-    private static GeographicCRS checkDimensions(final GeographicCRS baseCRS, 
final CartesianCS derivedCS) {
+    private static GeodeticCRS checkDimensions(final GeodeticCRS baseCRS, 
final CartesianCS derivedCS) {
         int n = ReferencingUtilities.getDimension(baseCRS);
         if (derivedCS != null) {
             n = Math.max(n, derivedCS.getDimension());
@@ -235,8 +235,7 @@ public class DefaultProjectedCRS extends 
AbstractDerivedCRS<Projection> implemen
      * @return the base coordinate reference system, which must be geographic.
      */
     @Override
-    @XmlElement(name = "baseGeodeticCRS", required = true)        // Note: 
older GML version used "baseGeographicCRS".
-    public GeographicCRS getBaseCRS() {
+    public GeodeticCRS getBaseCRS() {
         final Projection projection = super.getConversionFromBase();
         return (projection != null) ? projection.getSourceCRS() : null;
     }
@@ -389,14 +388,14 @@ public class DefaultProjectedCRS extends 
AbstractDerivedCRS<Projection> implemen
             return super.formatTo(formatter);
         }
         WKTUtilities.appendName(this, formatter, null);
-        final Convention    convention  = formatter.getConvention();
-        final boolean       isWKT1      = (convention.majorVersion() == 1);
-        final CartesianCS   cs          = getCoordinateSystem();
-        final GeographicCRS baseCRS     = getBaseCRS();
-        final Unit<?>       lengthUnit  = ReferencingUtilities.getUnit(cs);
-        final Unit<Angle>   angularUnit = 
AxisDirections.getAngularUnit(baseCRS.getCoordinateSystem(), null);
-        final Unit<Angle>   oldAngle    = 
formatter.addContextualUnit(angularUnit);
-        final Unit<?>       oldLength   = 
formatter.addContextualUnit(lengthUnit);
+        final Convention  convention  = formatter.getConvention();
+        final boolean     isWKT1      = (convention.majorVersion() == 1);
+        final CartesianCS cs          = getCoordinateSystem();
+        final GeodeticCRS baseCRS     = getBaseCRS();
+        final Unit<?>     lengthUnit  = ReferencingUtilities.getUnit(cs);
+        final Unit<Angle> angularUnit = 
AxisDirections.getAngularUnit(baseCRS.getCoordinateSystem(), null);
+        final Unit<Angle> oldAngle    = 
formatter.addContextualUnit(angularUnit);
+        final Unit<?>     oldLength   = 
formatter.addContextualUnit(lengthUnit);
         /*
          * Format the enclosing base CRS. Note that WKT 1 formats a full 
GeographicCRS while WKT 2 formats only
          * the datum with the prime meridian (no coordinate system) and uses a 
different keyword ("BaseGeodCRS"
@@ -452,13 +451,20 @@ public class DefaultProjectedCRS extends 
AbstractDerivedCRS<Projection> implemen
     private DefaultProjectedCRS() {
     }
 
+    /**
+     * Used by JAXB only (invoked by reflection). We do not use adapter 
because,
+     * for an unknown reason, doing so cause an infinite loop in Glassfish 
JAXB.
+     */
+    @XmlElement(name = "baseGeodeticCRS", required = true)    // Note: older 
GML version used "baseGeographicCRS".
+    private SC_GeodeticCRS getBaseGeodeticCRS() {
+        return new SC_GeodeticCRS(getBaseCRS());
+    }
+
     /**
      * Used by JAXB only (invoked by reflection).
-     *
-     * @see #getBaseCRS()
      */
-    private void setBaseCRS(final GeographicCRS crs) {
-        setBaseCRS("baseGeodeticCRS", crs);
+    private void setBaseGeodeticCRS(final SC_GeodeticCRS crs) {
+        setBaseCRS("baseGeodeticCRS", crs.getElement());
     }
 
     /**
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/SC_GeographicCRS.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/SC_GeodeticCRS.java
similarity index 73%
rename from 
endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/SC_GeographicCRS.java
rename to 
endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/SC_GeodeticCRS.java
index d4d3fc7ab0..cf7567bc8f 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/SC_GeographicCRS.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/SC_GeodeticCRS.java
@@ -17,12 +17,12 @@
 package org.apache.sis.referencing.crs;
 
 import jakarta.xml.bind.annotation.XmlElement;
-import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.apache.sis.xml.bind.gco.PropertyType;
 
 
 /**
- * JAXB adapter for {@link GeographicCRS}, in order to integrate the value in 
an element
+ * JAXB adapter for {@link GeodeticCRS}, in order to integrate the value in an 
element
  * complying with OGC/ISO standard.
  *
  * <p><b>Note:</b> JAXB adapters are usually declared in the {@link 
org.apache.sis.xml.bind.referencing} package,
@@ -30,11 +30,11 @@ import org.apache.sis.xml.bind.gco.PropertyType;
  *
  * @author  Martin Desruisseaux (Geomatys)
  */
-final class SC_GeographicCRS extends PropertyType<SC_GeographicCRS, 
GeographicCRS> {
+final class SC_GeodeticCRS extends PropertyType<SC_GeodeticCRS, GeodeticCRS> {
     /**
      * Empty constructor for JAXB only.
      */
-    public SC_GeographicCRS() {
+    public SC_GeodeticCRS() {
     }
 
     /**
@@ -42,30 +42,30 @@ final class SC_GeographicCRS extends 
PropertyType<SC_GeographicCRS, GeographicCR
      * This method is indirectly invoked by the private constructor
      * below, so it shall not depend on the state of this object.
      *
-     * @return {@code GeographicCRS.class}
+     * @return {@code GeodeticCRS.class}
      */
     @Override
-    protected Class<GeographicCRS> getBoundType() {
-        return GeographicCRS.class;
+    protected Class<GeodeticCRS> getBoundType() {
+        return GeodeticCRS.class;
     }
 
     /**
      * Constructor for the {@link #wrap} method only.
      */
-    private SC_GeographicCRS(final GeographicCRS cs) {
-        super(cs);
+    SC_GeodeticCRS(final GeodeticCRS crs) {
+        super(crs);
     }
 
     /**
      * Invoked by {@link PropertyType} at marshalling time for wrapping the 
given value
      * in a {@code <gml:GeodeticCRS>} XML element.
      *
-     * @param  cs  the element to marshal.
+     * @param  crs  the element to marshal.
      * @return a {@code PropertyType} wrapping the given the element.
      */
     @Override
-    protected SC_GeographicCRS wrap(final GeographicCRS cs) {
-        return new SC_GeographicCRS(cs);
+    protected SC_GeodeticCRS wrap(final GeodeticCRS crs) {
+        return new SC_GeodeticCRS(crs);
     }
 
     /**
@@ -77,7 +77,8 @@ final class SC_GeographicCRS extends 
PropertyType<SC_GeographicCRS, GeographicCR
      */
     @XmlElement(name = "GeodeticCRS")
     public DefaultGeodeticCRS getElement() {
-        final GeographicCRS metadata = this.metadata;
+        @SuppressWarnings("LocalVariableHidesMemberVariable")
+        final GeodeticCRS metadata = this.metadata;
         if (metadata == null || metadata instanceof DefaultGeodeticCRS) {
             return (DefaultGeodeticCRS) metadata;
         } else {
@@ -88,13 +89,9 @@ final class SC_GeographicCRS extends 
PropertyType<SC_GeographicCRS, GeographicCR
     /**
      * Invoked by JAXB at unmarshalling time for storing the result 
temporarily.
      *
-     * @param  cs  the unmarshalled element.
+     * @param  crs  the unmarshalled element.
      */
-    public void setElement(final DefaultGeodeticCRS cs) {
-        if (cs == null || cs instanceof GeographicCRS) {
-            metadata = (GeographicCRS) cs;
-        } else {
-            metadata = new DefaultGeographicCRS(cs);
-        }
+    public void setElement(final DefaultGeodeticCRS crs) {
+        metadata = crs;
     }
 }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java
index d71a18efa6..f4dd7163af 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/crs/package-info.java
@@ -114,7 +114,7 @@
     @XmlJavaTypeAdapter(CS_UserDefinedCS.class),
     @XmlJavaTypeAdapter(CS_VerticalCS.class),
     @XmlJavaTypeAdapter(CC_Conversion.class),
-    @XmlJavaTypeAdapter(SC_GeographicCRS.class),
+//  @XmlJavaTypeAdapter(SC_GeodeticCRS.class),      // Causes an infinite 
loop. Replaced by direct instantiation.
     @XmlJavaTypeAdapter(StringAdapter.class),
     @XmlJavaTypeAdapter(InternationalStringConverter.class)
 })
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
index 76a29a557f..44bbe1210d 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/CommonAuthorityFactory.java
@@ -35,6 +35,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.crs.CRSAuthorityFactory;
 import org.opengis.referencing.crs.EngineeringCRS;
 import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.crs.VerticalCRS;
 import org.opengis.referencing.crs.TemporalCRS;
@@ -591,7 +592,7 @@ public class CommonAuthorityFactory extends 
GeodeticAuthorityFactory implements
          * because the WMS specification does not said that we should.
          */
         final CommonCRS datum = CommonCRS.WGS84;
-        final GeographicCRS baseCRS;                // To be set, directly or 
indirectly, to WGS84.geographic().
+        final GeodeticCRS baseCRS;                  // To be set, directly or 
indirectly, to WGS84.geographic().
         final ProjectedCRS crs;                     // Temporary UTM 
projection, for extracting other properties.
         CartesianCS cs;                             // Coordinate system with 
(E,N) axes in metres.
         try {
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/GeodeticObjectFactory.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/GeodeticObjectFactory.java
index 5ad6bca3f5..0a7fe5b979 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/GeodeticObjectFactory.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/GeodeticObjectFactory.java
@@ -781,7 +781,7 @@ public class GeodeticObjectFactory extends AbstractFactory 
implements CRSFactory
      */
     @Override
     public ProjectedCRS createProjectedCRS(final Map<String,?> properties,
-            final GeographicCRS baseCRS, final Conversion conversion,
+            final GeodeticCRS baseCRS, final Conversion conversion,
             final CartesianCS derivedCS) throws FactoryException
     {
         final DefaultProjectedCRS crs;
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/MultiAuthoritiesFactory.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/MultiAuthoritiesFactory.java
index 56005e8379..9db5519cb2 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/MultiAuthoritiesFactory.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/MultiAuthoritiesFactory.java
@@ -1686,8 +1686,8 @@ public class MultiAuthoritiesFactory extends 
GeodeticAuthorityFactory implements
         if (baseCRS != null && fromBase.getSourceCRS() == null && 
fromBase.getTargetCRS() == null) {
             final Map<String,?> properties = 
IdentifiedObjects.getProperties(fromBase, Datum.IDENTIFIERS_KEY);
             final CRSFactory factory = GeodeticObjectFactory.provider();
-            if (baseCRS instanceof GeographicCRS && cs instanceof CartesianCS) 
{
-                return factory.createProjectedCRS(properties, (GeographicCRS) 
baseCRS, fromBase, (CartesianCS) cs);
+            if (baseCRS instanceof GeodeticCRS && cs instanceof CartesianCS) {
+                return factory.createProjectedCRS(properties, (GeodeticCRS) 
baseCRS, fromBase, (CartesianCS) cs);
             } else {
                 return factory.createDerivedCRS(properties, baseCRS, fromBase, 
cs);
             }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
index b7b6a74d2e..30a53e2475 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java
@@ -1486,7 +1486,7 @@ codes:  for (int i=0; i<codes.length; i++) {
                             }
                             try {
                                 /*
-                                 * For a ProjectedCRS, the baseCRS is always 
geographic. So in theory we would not
+                                 * For a ProjectedCRS, the baseCRS is always 
geodetic. So in theory we would not
                                  * need the `instanceof` check. However, the 
EPSG dataset version 8.9 also uses the
                                  * "projected" type for CRS that are actually 
derived CRS. See EPSG:5820 and 5821.
                                  *
@@ -1499,8 +1499,8 @@ codes:  for (int i=0; i<codes.length; i++) {
                                 
@SuppressWarnings("LocalVariableHidesMemberVariable")
                                 final Map<String,Object> properties = 
createProperties("Coordinate Reference System",
                                                                         name, 
epsg, area, scope, remarks, deprecated);
-                                if (baseCRS instanceof GeographicCRS) {
-                                    crs = 
crsFactory.createProjectedCRS(properties, (GeographicCRS) baseCRS, op, cs);
+                                if (baseCRS instanceof GeodeticCRS) {
+                                    crs = 
crsFactory.createProjectedCRS(properties, (GeodeticCRS) baseCRS, op, cs);
                                 } else {
                                     crs = 
crsFactory.createDerivedCRS(properties, baseCRS, op, cs);
                                 }
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java
index 4c383dff45..1e76500102 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultConversion.java
@@ -65,8 +65,7 @@ import org.apache.sis.util.resources.Errors;
  *
  * <p>After the source and target CRS become known, we can invoke the {@link 
#specialize specialize(…)} method for
  * {@linkplain DefaultMathTransformFactory#createParameterizedTransform 
creating a math transform from the parameters},
- * instantiate a new {@code Conversion} of a more specific type
- * ({@link org.opengis.referencing.operation.Projection}) if relevant,
+ * instantiate a new {@code Conversion} of a more specific type ({@link 
Projection}) if relevant,
  * and assign the source and target CRS to it.</p>
  *
  * <h2>Immutability and thread safety</h2>
@@ -360,8 +359,8 @@ public class DefaultConversion extends 
AbstractSingleOperation implements Conver
      *
      * <p>The given {@code baseType} argument can be one of the following 
values:</p>
      * <ul>
-     *   <li><code>{@linkplain 
org.opengis.referencing.operation.Conversion}.class</code></li>
-     *   <li><code>{@linkplain 
org.opengis.referencing.operation.Projection}.class</code></li>
+     *   <li><code>{@linkplain Conversion}.class</code></li>
+     *   <li><code>{@linkplain Projection}.class</code></li>
      * </ul>
      *
      * This {@code specialize(…)} method returns a conversion which implement 
at least the given {@code baseType}
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultCoordinateOperationFactory.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultCoordinateOperationFactory.java
index 1903225188..bbf45d2eef 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultCoordinateOperationFactory.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultCoordinateOperationFactory.java
@@ -28,7 +28,7 @@ import org.opengis.referencing.AuthorityFactory;
 import org.opengis.referencing.IdentifiedObject;
 import org.opengis.referencing.operation.*;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.crs.SingleCRS;
 import org.opengis.referencing.crs.CRSFactory;
@@ -561,7 +561,7 @@ next:   for (int i=components.size(); --i >= 0;) {
          */
         if (baseType == SingleOperation.class) {
             if (isConversion(sourceCRS, targetCRS)) {
-                if (interpolationCRS == null && sourceCRS instanceof 
GeographicCRS
+                if (interpolationCRS == null && sourceCRS instanceof 
GeodeticCRS
                                              && targetCRS instanceof 
ProjectedCRS)
                 {
                     baseType = Projection.class;
@@ -586,13 +586,13 @@ next:   for (int i=components.size(); --i >= 0;) {
         if (Transformation.class.isAssignableFrom(baseType)) {
             op = new DefaultTransformation(properties, sourceCRS, targetCRS, 
interpolationCRS, method, transform);
         } else if (Projection.class.isAssignableFrom(baseType)) {
-            ArgumentChecks.ensureCanCast("sourceCRS", GeographicCRS.class, 
sourceCRS);
-            ArgumentChecks.ensureCanCast("targetCRS", ProjectedCRS .class, 
targetCRS);
+            ArgumentChecks.ensureCanCast("sourceCRS", GeodeticCRS .class, 
sourceCRS);
+            ArgumentChecks.ensureCanCast("targetCRS", ProjectedCRS.class, 
targetCRS);
             if (interpolationCRS != null) {
                 throw new IllegalArgumentException(Errors.format(
                         Errors.Keys.ForbiddenAttribute_2, "interpolationCRS", 
baseType));
             }
-            op = new DefaultProjection(properties, (GeographicCRS) sourceCRS, 
(ProjectedCRS) targetCRS, method, transform);
+            op = new DefaultProjection(properties, (GeodeticCRS) sourceCRS, 
(ProjectedCRS) targetCRS, method, transform);
         } else if (Conversion.class.isAssignableFrom(baseType)) {
             op = new DefaultConversion(properties, sourceCRS, targetCRS, 
interpolationCRS, method, transform);
         } else {  // See above comment about this last-resort fallback.
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultProjection.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultProjection.java
index fe4ab2a377..123b12a327 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultProjection.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/DefaultProjection.java
@@ -24,8 +24,8 @@ import org.opengis.referencing.operation.Projection;
 import org.opengis.referencing.operation.OperationMethod;
 import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.MathTransformFactory;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.crs.ProjectedCRS;
-import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.util.ArgumentChecks;
 
@@ -67,7 +67,7 @@ final class DefaultProjection extends DefaultConversion 
implements Projection {
      * @param  transform   transform from positions in the source CRS to 
positions in the target CRS.
      */
     public DefaultProjection(final Map<String,?>   properties,
-                             final GeographicCRS   sourceCRS,
+                             final GeodeticCRS     sourceCRS,
                              final ProjectedCRS    targetCRS,
                              final OperationMethod method,
                              final MathTransform   transform)
@@ -94,8 +94,8 @@ final class DefaultProjection extends DefaultConversion 
implements Projection {
                       final OperationMethod[] actual) throws FactoryException
     {
         super(definition, sourceCRS, targetCRS, factory, actual);
-        ArgumentChecks.ensureCanCast("sourceCRS", GeographicCRS.class, 
sourceCRS);
-        ArgumentChecks.ensureCanCast("targetCRS", ProjectedCRS .class, 
targetCRS);
+        ArgumentChecks.ensureCanCast("sourceCRS", GeodeticCRS.class,  
sourceCRS);
+        ArgumentChecks.ensureCanCast("targetCRS", ProjectedCRS.class, 
targetCRS);
     }
 
     /**
@@ -125,8 +125,8 @@ final class DefaultProjection extends DefaultConversion 
implements Projection {
      * Returns the source CRS, which must be geographic or {@code null}.
      */
     @Override
-    public final GeographicCRS getSourceCRS() {
-        return (GeographicCRS) super.getSourceCRS();
+    public final GeodeticCRS getSourceCRS() {
+        return (GeodeticCRS) super.getSourceCRS();
     }
 
     /**
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/EllipsoidalHeightCombiner.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/EllipsoidalHeightCombiner.java
index 0780da7d33..249e950938 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/EllipsoidalHeightCombiner.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/EllipsoidalHeightCombiner.java
@@ -148,9 +148,9 @@ public final class EllipsoidalHeightCombiner {
                         crs = 
factories.getCRSFactory().createGeographicCRS(crsProps, ((GeodeticCRS) 
crs).getDatum(), (EllipsoidalCS) cs);
                     } else {
                         final ProjectedCRS proj = (ProjectedCRS) crs;
-                        GeographicCRS base = proj.getBaseCRS();
+                        GeodeticCRS base = proj.getBaseCRS();
                         if (base.getCoordinateSystem().getDimension() == 2) {
-                            base = (GeographicCRS) createCompoundCRS(
+                            base = (GeodeticCRS) createCompoundCRS(
                                     IdentifiedObjects.getProperties(base, 
GeographicCRS.IDENTIFIERS_KEY), base, vertical);
                         }
                         /*
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/GeodeticObjectBuilder.java
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/GeodeticObjectBuilder.java
index cf72daddfc..80f8395edf 100644
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/GeodeticObjectBuilder.java
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/privy/GeodeticObjectBuilder.java
@@ -33,6 +33,7 @@ import org.opengis.parameter.ParameterNotFoundException;
 import org.opengis.parameter.InvalidParameterValueException;
 import org.opengis.referencing.IdentifiedObject;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.crs.TemporalCRS;
@@ -466,7 +467,7 @@ public class GeodeticObjectBuilder extends 
Builder<GeodeticObjectBuilder> {
      * @return the projected CRS.
      * @throws FactoryException if an error occurred while building the 
projected CRS.
      */
-    public ProjectedCRS createProjectedCRS(final GeographicCRS baseCRS, 
CartesianCS derivedCS) throws FactoryException {
+    public ProjectedCRS createProjectedCRS(final GeodeticCRS baseCRS, 
CartesianCS derivedCS) throws FactoryException {
         ensureConversionMethodSet();
         onCreate(false);
         try {
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/SC_GeodeticCRS.md
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/SC_GeodeticCRS.md
new file mode 100644
index 0000000000..7cead9d472
--- /dev/null
+++ 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/SC_GeodeticCRS.md
@@ -0,0 +1,2 @@
+The `SC_GeodeticCRS` adapter is defined in the `org.apache.sis.referencing.crs`
+package because it needs access to `DefaultGeodeticCRS` package-private 
methods.
diff --git 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/SC_GeographicCRS.md
 
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/SC_GeographicCRS.md
deleted file mode 100644
index 961fa2048b..0000000000
--- 
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/xml/bind/referencing/SC_GeographicCRS.md
+++ /dev/null
@@ -1,4 +0,0 @@
-The `SC_GeographicCRS` adapter is defined in the 
`org.apache.sis.referencing.crs`
-package because it needs access to `DefaultGeodeticCRS` package-private 
methods.
-Note also that `GeographicCRS` does not exist in GML, so this is a special case
-anyway.
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/TransformTestCase.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/TransformTestCase.java
index 49f803287b..3909c420be 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/TransformTestCase.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/TransformTestCase.java
@@ -18,6 +18,7 @@ package org.apache.sis.geometry;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.referencing.crs.GeodeticCRS;
 import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.operation.Conversion;
 import org.opengis.referencing.operation.CoordinateOperation;
@@ -95,7 +96,7 @@ public abstract class TransformTestCase<G> extends TestCase {
     @Test
     public final void testTransform() throws FactoryException, 
TransformException {
         final ProjectedCRS    targetCRS  = CommonCRS.WGS84.universal(10, 
-123.5);
-        final GeographicCRS   sourceCRS  = targetCRS.getBaseCRS();
+        final GeodeticCRS     sourceCRS  = targetCRS.getBaseCRS();
         final Conversion      conversion = targetCRS.getConversionFromBase();
         final MathTransform2D transform  = (MathTransform2D) 
conversion.getMathTransform();
         /*
@@ -130,7 +131,7 @@ public abstract class TransformTestCase<G> extends TestCase 
{
     @Test
     public final void testTransformOverPole() throws FactoryException, 
TransformException {
         final ProjectedCRS    sourceCRS  = 
HardCodedConversions.createCRS(HardCodedConversions.POLAR_STEREOGRAPHIC);
-        final GeographicCRS   targetCRS  = sourceCRS.getBaseCRS();
+        final GeodeticCRS     targetCRS  = sourceCRS.getBaseCRS();
         final Conversion      conversion = 
inverse(sourceCRS.getConversionFromBase());
         final MathTransform2D transform  = (MathTransform2D) 
conversion.getMathTransform();
         /*
@@ -193,7 +194,7 @@ public abstract class TransformTestCase<G> extends TestCase 
{
     @Test
     public final void testTransformNotOverPole() throws FactoryException, 
TransformException {
         final ProjectedCRS  sourceCRS  = CommonCRS.WGS84.universal(10, -3.5);
-        final GeographicCRS targetCRS  = sourceCRS.getBaseCRS();
+        final GeodeticCRS   targetCRS  = sourceCRS.getBaseCRS();
         final Conversion    conversion = 
inverse(sourceCRS.getConversionFromBase());
         final G rectangle = createFromExtremums(sourceCRS, 199980, 4490220, 
309780, 4600020);
         final G expected  = createFromExtremums(targetCRS,
@@ -213,7 +214,7 @@ public abstract class TransformTestCase<G> extends TestCase 
{
     @Test
     public final void testTransformOverAntiMeridian() throws 
TransformException {
         final ProjectedCRS  sourceCRS  = HardCodedConversions.mercator();
-        final GeographicCRS targetCRS  = sourceCRS.getBaseCRS();
+        final GeodeticCRS   targetCRS  = sourceCRS.getBaseCRS();
         final Conversion    conversion = 
inverse(sourceCRS.getConversionFromBase());
         final G expected  = createFromExtremums(targetCRS, 179, 40, 181, 50);
         final G rectangle = createFromExtremums(sourceCRS,
@@ -233,9 +234,9 @@ public abstract class TransformTestCase<G> extends TestCase 
{
      */
     @Test
     public void testProjectionOutsideLongitudeRange() throws FactoryException, 
TransformException {
-        final ProjectedCRS    sourceCRS  = 
HardCodedConversions.createCRS(HardCodedConversions.UTM);
-        final GeographicCRS   targetCRS  = sourceCRS.getBaseCRS();
-        final Conversion      conversion = 
inverse(sourceCRS.getConversionFromBase());
+        final ProjectedCRS  sourceCRS  = 
HardCodedConversions.createCRS(HardCodedConversions.UTM);
+        final GeodeticCRS   targetCRS  = sourceCRS.getBaseCRS();
+        final Conversion    conversion = 
inverse(sourceCRS.getConversionFromBase());
         final G rectangle = createFromExtremums(sourceCRS,
                 -402748, 7965673,                               // Computed by 
SIS (not validated by external authority).
                 1312383, 9912935);
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java
index dd36e4cae3..fab9ed6afd 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/io/wkt/GeodeticObjectParserTest.java
@@ -539,7 +539,7 @@ public final class GeodeticObjectParserTest extends 
TestCase {
 
         assertNameAndIdentifierEqual("Mercator test", 0, crs);
         verifyProjectedCS(crs.getCoordinateSystem(), Units.METRE);
-        verifyGeographicCRS(0, crs.getBaseCRS());
+        verifyGeographicCRS(0, assertInstanceOf(GeographicCRS.class, 
crs.getBaseCRS()));
 
         final GeodeticDatum datum = crs.getDatum();
         assertNameAndIdentifierEqual("World Geodetic System 1984", 0, datum);
@@ -824,7 +824,7 @@ public final class GeodeticObjectParserTest extends 
TestCase {
 
         assertNameAndIdentifierEqual("FRANCE/NTF/Lambert III", 0, crs);
         verifyProjectedCS(crs.getCoordinateSystem(), Units.METRE);
-        final GeographicCRS geoCRS = crs.getBaseCRS();
+        final GeographicCRS geoCRS = assertInstanceOf(GeographicCRS.class, 
crs.getBaseCRS());
         assertNameAndIdentifierEqual("NTF=GR3DF97A", 0, geoCRS);    // 
Inherited the datum name.
 
         final GeodeticDatum datum = geoCRS.getDatum();
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java
index cce8372c36..8376c09f8c 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultProjectedCRSTest.java
@@ -23,7 +23,7 @@ import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.referencing.cs.AxisDirection;
 import org.opengis.referencing.cs.CartesianCS;
-import org.opengis.referencing.operation.Projection;
+import org.opengis.referencing.operation.Conversion;
 import org.opengis.parameter.ParameterValueGroup;
 import org.apache.sis.metadata.iso.citation.Citations;
 import org.apache.sis.referencing.CommonCRS;
@@ -502,7 +502,7 @@ public final class DefaultProjectedCRSTest extends 
TestCase.WithLogs {
         assertAxisDirectionsEqual(crs.getBaseCRS().getCoordinateSystem(), 
AxisDirection.NORTH, AxisDirection.EAST);
         assertAxisDirectionsEqual(crs.getCoordinateSystem(), 
AxisDirection.EAST, AxisDirection.NORTH);
 
-        final Projection conversion = crs.getConversionFromBase();
+        final Conversion conversion = crs.getConversionFromBase();
         assertEpsgNameAndIdentifierEqual("Lambert zone II", 18082, conversion);
         assertEpsgNameAndIdentifierEqual("Lambert Conic Conformal (1SP)", 
9801, conversion.getMethod());
         assertNotNull(conversion.getMathTransform());
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
index 8849db42cc..feab090c11 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
@@ -427,7 +427,7 @@ public final class CoordinateReferenceSystems extends 
AuthorityCodesReport {
             } else if (cs instanceof SphericalCS) {
                 return "Geocentric (spherical coordinate system)";
             }
-            return "Geocentric";
+            return "Geodetic";
         }
         if (crs instanceof VerticalCRS vertical) {
             final Optional<RealizationMethod> method = 
vertical.getDatum().getRealizationMethod();
diff --git 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/test/integration/CoordinateReferenceSystemTest.java
 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/test/integration/CoordinateReferenceSystemTest.java
index 8ef6919d9e..8e1fc77d72 100644
--- 
a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/test/integration/CoordinateReferenceSystemTest.java
+++ 
b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/test/integration/CoordinateReferenceSystemTest.java
@@ -20,7 +20,7 @@ import org.opengis.util.FactoryException;
 import org.opengis.referencing.cs.CartesianCS;
 import org.opengis.referencing.cs.EllipsoidalCS;
 import org.opengis.referencing.crs.DerivedCRS;
-import org.opengis.referencing.crs.GeodeticCRS;
+import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.referencing.CRS;
 
@@ -65,14 +65,14 @@ public final class CoordinateReferenceSystemTest extends 
TestCase {
     public void testDerivedCRS() throws FactoryException {
         assertTrue(TestFactorySource.getSharedFactory() != null);
         CoordinateReferenceSystem crs = CRS.forCode("EPSG:5820");
-        assertInstanceOf(DerivedCRS .class, crs);
-        assertInstanceOf(GeodeticCRS.class, crs);
-        assertInstanceOf(CartesianCS.class, crs.getCoordinateSystem());
-        assertInstanceOf(CartesianCS.class, ((DerivedCRS) 
crs).getBaseCRS().getCoordinateSystem());
+        assertInstanceOf(DerivedCRS  .class, crs);
+        assertInstanceOf(ProjectedCRS.class, crs);
+        assertInstanceOf(CartesianCS .class, crs.getCoordinateSystem());
+        assertInstanceOf(CartesianCS .class, ((DerivedCRS) 
crs).getBaseCRS().getCoordinateSystem());
         /*
-         * Some tests are disabled because `EPSGDataAccess` confuse this 
derived CRS
-         * with a projected CRS. We are waiting for upgrade to EPSG database 
10+
-         * before to re-evaluate how to fix this issue.
+         * Some tests are disabled because `EPSGDataAccess` confuses CRS type.
+         * We are waiting for upgrade to EPSG database 10+ before to 
re-evaluate
+         * how to fix this issue.
          *
          * https://issues.apache.org/jira/browse/SIS-518
          */
diff --git 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java
 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java
index 0412578521..3f2cae1de1 100644
--- 
a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java
+++ 
b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/reader/CRSBuilder.java
@@ -1098,7 +1098,7 @@ public final class CRSBuilder extends 
ReferencingFactoryContainer {
      * @param  crs          the CRS created from the EPSG geodetic dataset.
      * @param  angularUnit  the angular unit of the latitude and longitude 
values.
      */
-    private void verify(final GeographicCRS crs, final Unit<Angle> 
angularUnit) throws FactoryException {
+    private void verify(final GeodeticCRS crs, final Unit<Angle> angularUnit) 
throws FactoryException {
         /*
          * Note: current createUnit(…) implementation does not allow us to 
distinguish whether METRE ou DEGREE units
          * were specified in the GeoTIFF file or if we got the default values. 
We do not compare units for that reason.
@@ -1308,7 +1308,7 @@ public final class CRSBuilder extends 
ReferencingFactoryContainer {
     private void verify(final ProjectedCRS crs) throws FactoryException {
         final Unit<Length> linearUnit  = createLinearUnit(UnitKey.PROJECTED);
         final Unit<Angle>  angularUnit = createAngularUnit(UnitKey.ANGULAR);
-        final GeographicCRS baseCRS = crs.getBaseCRS();
+        final GeodeticCRS  baseCRS = crs.getBaseCRS();
         verifyIdentifier(crs, baseCRS, GeoKeys.GeodeticCRS);
         verify(baseCRS, angularUnit);
         final Conversion projection = crs.getConversionFromBase();
diff --git a/geoapi/snapshot b/geoapi/snapshot
index 535e3e0647..b822d026bd 160000
--- a/geoapi/snapshot
+++ b/geoapi/snapshot
@@ -1 +1 @@
-Subproject commit 535e3e0647e8849d4dead1ced6f622428b539ffd
+Subproject commit b822d026bd9e4692a159a9bd2bc158716da2e721

Reply via email to