You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by js...@apache.org on 2026/09/07 08:51:57 UTC

(sis) branch geoapi-4.0 updated (db3ac3f29b -> 3967f8b543)

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

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


    from db3ac3f29b feat(Geometry): replace List<DirectPosition> by Array for data points and control points properties
     new 8d053b8eb6 feat(Geometry): fuze SIS getPoints() and ISO getDataPoints() as getDataPoints()
     new 8290d6355a refactor(Geometry): rename PointSequence to DataPoints to follow ISO:19107 naming
     new c2010b7bc9 feat(Geometry): add geodesic curve implementation
     new 132cb96402 refactor(Geometry): regroup curve interfaces in a single package
     new ac5b602bae refactor(Math): move math package outside geometries
     new 3967f8b543 refactor(Geometry): regroup point,curve,surface,solid in dedicated pacakages

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org.apache.sis.geometry/main/module-info.java  |   7 +-
 .../sis/geometries/AttributeInterpolation.java     |  50 +++++++
 ...rpolation.java => AttributeTransformation.java} |  31 ++--
 .../org/apache/sis/geometries/AttributesType.java  |  22 ++-
 .../main/org/apache/sis/geometries/BBox.java       |   6 +-
 .../main/org/apache/sis/geometries/Curve.java      |  31 +++-
 .../{PointSequence.java => DataPoints.java}        |  25 +++-
 .../main/org/apache/sis/geometries/Geometries.java |  46 +++---
 .../apache/sis/geometries/GeometryCollection.java  |   2 +-
 .../org/apache/sis/geometries/GeometryFactory.java |  69 ++++++---
 .../org/apache/sis/geometries/GeometryVisitor.java |  17 ++-
 .../geometries/{Frustrum.java => HyperPlane.java}  |  28 ++--
 .../main/org/apache/sis/geometries/OBBox.java      |   9 +-
 .../apache/sis/geometries/OrientedGeometry.java    |   2 +-
 .../main/org/apache/sis/geometries/Plane.java      |   2 +-
 .../main/org/apache/sis/geometries/Point.java      |  11 +-
 .../main/org/apache/sis/geometries/Ray.java        |   9 +-
 .../main/org/apache/sis/geometries/Surface.java    |   2 +-
 .../main/org/apache/sis/geometries/Wrapper.java    | 162 ++-------------------
 .../apache/sis/geometries/adapter/JTSAdapter.java  |  73 ++++++----
 .../geometries/adapter/PathIteratorAdapter.java    |  40 ++---
 .../sis/geometries/adapter/ShapeAdapter.java       |  22 +--
 .../sis/geometries/adapter/ShapeConverter.java     |  30 ++--
 .../geometries/cs/GeometricCoordinateSystem.java   |   2 +-
 .../sis/geometries/{conics => curve}/Arc.java      |   9 +-
 .../apache/sis/geometries/curve/ArcByBulge.java    |  35 ++---
 .../sis/geometries/curve/ArcByCenterPoint.java     |   8 +-
 .../{splines => curve}/BSplineCurve.java           |   3 +-
 .../sis/geometries/{splines => curve}/Bezier.java  |   3 +-
 .../sis/geometries/{conics => curve}/Circle.java   |   2 +-
 .../{conics => curve}/CircularString.java          |  42 +++---
 .../geometries/{spirals => curve}/Clothoid.java    |   2 +-
 .../sis/geometries/{ => curve}/CompoundCurve.java  |   5 +-
 .../sis/geometries/{conics => curve}/Conic.java    |  15 +-
 .../sis/geometries/{conics => curve}/ConicArc.java |   2 +-
 .../geometries/{splines => curve}/CubicSpline.java |   2 +-
 .../sis/geometries/{conics => curve}/Ellipse.java  |   2 +-
 .../geometries/{conics => curve}/EllipticArc.java  |   2 +-
 .../{polynomials => curve}/FunctionArc.java        |   6 +-
 .../{polynomials => curve}/FunctionCurve.java      |   4 +-
 .../{LineString.java => curve/Geodesic.java}       |  82 ++++-------
 .../geometries/{splines => curve}/KnotType.java    |   2 +-
 .../sis/geometries/{ => curve}/LineString.java     |  36 +++--
 .../sis/geometries/{ => curve}/LinearRing.java     |   7 +-
 .../sis/geometries/{ => curve}/MultiCurve.java     |   5 +-
 .../geometries/{ => curve}/MultiLineString.java    |   7 +-
 .../sis/geometries/{splines => curve}/NURB.java    |   2 +-
 .../sis/geometries/{ => curve}/OffsetCurve.java    |   4 +-
 .../{polynomials => curve}/PolynomialArc.java      |   2 +-
 .../{polynomials => curve}/PolynomialCurve.java    |   2 +-
 .../{splines => curve}/PolynomialSpline.java       |   4 +-
 .../sis/geometries/{ => curve}/ProductCurve.java   |   8 +-
 .../{polynomials => curve}/RealFunction.java       |   4 +-
 .../{polynomials => curve}/RealPolynomial.java     |   4 +-
 .../apache/sis/geometries/{ => curve}/Rhumb.java   |   8 +-
 .../sis/geometries/{spirals => curve}/Spiral.java  |   7 +-
 .../geometries/{splines => curve}/SplineCurve.java |   5 +-
 .../{splines => curve}/SplineCurveForm.java        |   2 +-
 .../apache/sis/geometries/curve}/package-info.java |   9 +-
 .../sis/geometries/ellipsoidal/package-info.java   |  23 ---
 .../apache/sis/geometries/geodesics/Geodesic.java  |  37 -----
 .../org/apache/sis/geometries/index/KdTree.java    |   6 +-
 .../internal/shared/AbstractGeometry.java          |  10 +-
 .../internal/shared/AbstractOrientedGeometry.java  |   6 +-
 .../{ArraySequence.java => ArrayDataPoints.java}   |  27 ++--
 .../internal/shared/DefaultArcByBulge.java         |  12 +-
 .../internal/shared/DefaultArcByCenterPoint.java   |   2 +-
 .../internal/shared/DefaultCircularString.java     |  10 +-
 .../internal/shared/DefaultCompoundCurve.java      |  11 +-
 .../internal/shared/DefaultCurvePolygon.java       |   8 +-
 ...ltPointSequence.java => DefaultDataPoints.java} |  14 +-
 ...DefaultLineString.java => DefaultGeodesic.java} |  18 ++-
 .../internal/shared/DefaultGeometryCollection.java |   2 +-
 .../internal/shared/DefaultLineString.java         |  11 +-
 .../internal/shared/DefaultLinearRing.java         |   7 +-
 .../internal/shared/DefaultMultiCurve.java         |   4 +-
 .../internal/shared/DefaultMultiLineString.java    |   4 +-
 .../internal/shared/DefaultMultiPoint.java         |  14 +-
 .../internal/shared/DefaultMultiPolygon.java       |   4 +-
 .../internal/shared/DefaultMultiPolyhedron.java    |   4 +-
 .../internal/shared/DefaultMultiSurface.java       |   4 +-
 .../geometries/internal/shared/DefaultPoint.java   |  26 ++--
 .../geometries/internal/shared/DefaultPolygon.java |   8 +-
 .../internal/shared/DefaultPolyhedralSurface.java  |   6 +-
 .../internal/shared/DefaultPolyhedron.java         |   8 +-
 .../internal/shared/DefaultRawMultiPoint.java      |   4 +-
 .../internal/shared/DefaultReversedCurve.java      |   9 +-
 .../internal/shared/DefaultReversedSurface.java    |   4 +-
 .../internal/shared/DefaultTriangle.java           |   8 +-
 .../shared/DefaultTriangulatedSurface.java         |   4 +-
 .../apache/sis/geometries/mesh/MeshPrimitive.java  |  48 +++---
 .../geometries/mesh/MeshPrimitiveComparator.java   |  34 ++---
 .../sis/geometries/mesh/MeshPrimitiveIndexes.java  |  10 +-
 .../sis/geometries/mesh/MeshPrimitiveVisitor.java  |  16 +-
 .../sis/geometries/mesh/MultiMeshPrimitive.java    |   4 +-
 .../sis/geometries/operation/ComputeAttribute.java |  12 +-
 .../apache/sis/geometries/operation/Contains.java  |  18 +--
 .../apache/sis/geometries/operation/Distance.java  |   7 +-
 .../geometries/operation/GeometryProcessor.java    |  22 +--
 .../sis/geometries/operation/Intersection.java     |  32 ++--
 .../sis/geometries/operation/ProcessorUtils.java   |   4 +-
 .../geometries/operation/SutherlandHodgman.java    |   8 +-
 .../org/apache/sis/geometries/operation/To3D.java  |  32 ++--
 .../sis/geometries/operation/ToPrimitive.java      |  28 ++--
 .../apache/sis/geometries/operation/Transform.java |  32 ++--
 .../operation/simplify/greedyinsert/Edge.java      |   4 +-
 .../simplify/greedyinsert/TINBuilder.java          |  18 +--
 .../simplify/greedyinsert/TinDistance.java         |  12 +-
 .../operation/simplify/greedyinsert/WTriangle.java |  18 +--
 .../operation/spatialanalysis2d/ISOBand.java       |  18 +--
 .../operation/spatialanalysis2d/ISOLine.java       |  24 +--
 .../operation/triangulate/EarClipping.java         |  20 +--
 .../operation/triangulate/delaunay/Delaunay.java   |  16 +-
 .../triangulate/delaunay/OrientedEdge.java         |  22 +--
 .../triangulate/delaunay/OrientedTriangle.java     |  22 +--
 .../sis/geometries/{ => point}/MultiPoint.java     |  14 +-
 .../{conics/Ellipse.java => point/PointCloud.java} |   6 +-
 .../{griddedsolid => solid}/BSolidSpline.java      |   2 +-
 .../apache/sis/geometries/{ => solid}/Capsule.java |   5 +-
 .../sis/geometries/{ => solid}/Cylinder.java       |   5 +-
 .../sis/geometries/{ => solid}/Frustrum.java       |   6 +-
 .../geometries/{ => solid}/MultiPolyhedron.java    |   4 +-
 .../ParametricCurveSolid.java                      |   8 +-
 .../sis/geometries/{ => solid}/Polyhedron.java     |   5 +-
 .../apache/sis/geometries/{ => solid}/Sphere.java  |  27 ++--
 .../apache/sis/geometries/solid}/package-info.java |   9 +-
 .../{ => solid}/polyhedron/AbstractPolyhedron.java |  24 +--
 .../{ => solid}/polyhedron/Dodecahedron.java       |  12 +-
 .../{ => solid}/polyhedron/Hexahedron.java         |  12 +-
 .../{ => solid}/polyhedron/Icosahedron.java        |  12 +-
 .../{ => solid}/polyhedron/Octahedron.java         |  12 +-
 .../polyhedron/RhombicTriacontahedron.java         |  12 +-
 .../{ => solid}/polyhedron/Tetrahedron.java        |  12 +-
 .../polyhedron/TruncatedIcosahedron.java           |  12 +-
 .../{ => solid}/polyhedron/package-info.java       |   2 +-
 .../sis/geometries/spherical/GreatCircleArc.java   |   6 +-
 .../spherical/SphericalConvexPolygon.java          |   8 +-
 .../geometries/spherical/SphericalTriangle.java    |   6 +-
 .../{splines => surface}/BSplineSurface.java       |   9 +-
 .../{splines => surface}/BSplineSurfaceForm.java   |   2 +-
 .../sis/geometries/{ => surface}/BilinearGrid.java |   3 +-
 .../sis/geometries/{ => surface}/CurvePolygon.java |  11 +-
 .../sis/geometries/{ => surface}/MultiPolygon.java |   6 +-
 .../sis/geometries/{ => surface}/MultiSurface.java |   6 +-
 .../{ => surface}/ParametricCurveSurface.java      |   6 +-
 .../sis/geometries/{ => surface}/Polygon.java      |  11 +-
 .../{ => surface}/PolyhedralSurface.java           |   4 +-
 .../sis/geometries/{ => surface}/PreparedTIN.java  |  26 ++--
 .../apache/sis/geometries/{ => surface}/TIN.java   |   7 +-
 .../sis/geometries/{ => surface}/Triangle.java     |  33 +++--
 .../{ => surface}/TriangulatedSurface.java         |   2 +-
 .../sis/geometries/surface}/package-info.java      |   9 +-
 .../main/org/apache/sis/gml/AbstractGMLReader.java |   2 -
 .../main/org/apache/sis/gml/AbstractGMLWriter.java |  22 ++-
 .../org/apache/sis/gml/DOMXMLStreamReader.java     |   2 -
 .../main/org/apache/sis/gml/GML2Reader.java        |  14 +-
 .../main/org/apache/sis/gml/GML2Writer.java        |  22 +--
 .../main/org/apache/sis/gml/GML3Reader.java        |  44 +++---
 .../main/org/apache/sis/gml/GML3Writer.java        |  46 +++---
 .../main/org/apache/sis/gml/GMLCRS.java            |   2 -
 .../main/org/apache/sis/gml/GMLGeometryWriter.java |   2 -
 .../main/org/apache/sis/gml/GMLReader.java         |   1 -
 .../main/org/apache/sis/gml/GMLWriter.java         |   3 -
 .../org/apache/sis/gml/PositionListBuilder.java    |  16 +-
 .../{geometries/math => maths}/AbstractAffine.java |   2 +-
 .../{geometries/math => maths}/AbstractArray.java  |   2 +-
 .../{geometries/math => maths}/AbstractCursor.java |   2 +-
 .../{geometries/math => maths}/AbstractMatrix.java |   2 +-
 .../math => maths}/AbstractSimilarity.java         |   2 +-
 .../{geometries/math => maths}/AbstractTuple.java  |   2 +-
 .../sis/{geometries/math => maths}/Affine.java     |   2 +-
 .../sis/{geometries/math => maths}/Affine1D.java   |   2 +-
 .../sis/{geometries/math => maths}/Affine2D.java   |   2 +-
 .../sis/{geometries/math => maths}/Affine3D.java   |   2 +-
 .../sis/{geometries/math => maths}/Affine4D.java   |   2 +-
 .../sis/{geometries/math => maths}/AffineND.java   |   2 +-
 .../sis/{geometries/math => maths}/Affines.java    |   2 +-
 .../sis/{geometries/math => maths}/Array.java      |   2 +-
 .../math => maths}/ArrayConcatenated.java          |   2 +-
 .../{geometries/math => maths}/ArrayFactory.java   |   2 +-
 .../math => maths}/ArrayFactoryFFM.java            |  20 +--
 .../math => maths}/ArrayFactoryHAT.java            |   2 +-
 .../math => maths}/ArrayFactoryJava.java           |  20 +--
 .../math => maths}/ArraySpliterator.java           |   2 +-
 .../math => maths}/ArrayUnmodifiable.java          |   2 +-
 .../sis/{geometries/math => maths}/Cursor.java     |   2 +-
 .../math => maths}/CursorUnmodifiable.java         |   2 +-
 .../sis/{geometries/math => maths}/DataType.java   |   2 +-
 .../{geometries/math => maths}/EasingMethod.java   |   2 +-
 .../sis/{geometries/math => maths}/Maths.java      |   4 +-
 .../sis/{geometries/math => maths}/Matrices.java   |   2 +-
 .../sis/{geometries/math => maths}/Matrix.java     |   2 +-
 .../sis/{geometries/math => maths}/Matrix2D.java   |   2 +-
 .../sis/{geometries/math => maths}/Matrix3D.java   |   2 +-
 .../sis/{geometries/math => maths}/Matrix4D.java   |   4 +-
 .../sis/{geometries/math => maths}/MatrixND.java   |   2 +-
 .../sis/{geometries/math => maths}/NDArray.java    |   2 +-
 .../sis/{geometries/math => maths}/NDArrays.java   |   2 +-
 .../sis/{geometries/math => maths}/Quaternion.java |   4 +-
 .../{geometries/math => maths}/Quaternions.java    |   2 +-
 .../sis/{geometries/math => maths}/ReadOnly.java   |  42 +++---
 .../{geometries/math => maths}/SampleSystem.java   |   2 +-
 .../sis/{geometries/math => maths}/Similarity.java |   2 +-
 .../{geometries/math => maths}/Similarity3D.java   |   2 +-
 .../{geometries/math => maths}/SimilarityND.java   |   2 +-
 .../math => maths}/SimplifiedTransform.java        |   2 +-
 .../sis/{geometries/math => maths}/Transform.java  |   4 +-
 .../{geometries/math => maths}/Transform1D.java    |   2 +-
 .../sis/{geometries/math => maths}/Tuple.java      |   2 +-
 .../math => maths}/TupleUnmodifiable.java          |   2 +-
 .../sis/{geometries/math => maths}/Vector.java     |   2 +-
 .../sis/{geometries/math => maths}/Vector1D.java   |   2 +-
 .../sis/{geometries/math => maths}/Vector2D.java   |   2 +-
 .../sis/{geometries/math => maths}/Vector3D.java   |   2 +-
 .../sis/{geometries/math => maths}/Vector4D.java   |   2 +-
 .../sis/{geometries/math => maths}/VectorND.java   |   2 +-
 .../sis/{geometries/math => maths}/Vectors.java    |   2 +-
 .../{geometries/math => maths}/package-info.java   |   2 +-
 .../org/apache/sis/scene/AnimationSampler.java     |   2 +-
 .../main/org/apache/sis/scene/MorphTarget.java     |   6 +-
 .../main/org/apache/sis/scene/SceneNode.java       |   4 +-
 .../main/org/apache/sis/scene/SceneUtilities.java  |   4 +-
 .../main/org/apache/sis/scene/Skin.java            |   2 +-
 .../operation/simplify => scene}/TextureAtlas.java |   2 +-
 .../main/org/apache/sis/scene/physics/Motion.java  |   4 +-
 .../org/apache/sis/geometries/PreparedTINTest.java |   3 +-
 .../org/apache/sis/geometries/TriangleTest.java    |   8 +-
 .../sis/geometries/adapter/ShapeAdapterTest.java   |  26 ++--
 .../sis/geometries/adapter/ShapeConverterTest.java |  16 +-
 .../internal/shared/ArraySequenceTest.java         |  20 +--
 .../sis/geometries/mesh/PrimitiveIndexesTest.java  |   4 +-
 .../apache/sis/geometries/mesh/PrimitiveTest.java  |   2 +-
 .../sis/geometries/mesh/PrimitiveVisitorTest.java  |  12 +-
 .../sis/geometries/operation/DistanceTest.java     |   2 +-
 .../sis/geometries/operation/IntersectionTest.java |   6 +-
 .../operation/ShewchukPredicatesTest.java          |   2 +-
 .../geometries/operation/SutherlandHogmanTest.java |   8 +-
 .../apache/sis/geometries/operation/To3DTest.java  |   4 +-
 .../sis/geometries/operation/ToPrimitiveTest.java  |  34 ++---
 .../sis/geometries/operation/TransformTest.java    |   2 +-
 .../operation/simplify/TextureAtlasTest.java       |   1 +
 .../operation/spatialanalysis2d/IsoBandTest.java   |   4 +-
 .../triangulate/delaunay/DelaunayTest.java         |   4 +-
 .../triangulate/delaunay/OrientedEdgeTest.java     |   4 +-
 .../geometries/spherical/GreatCircleArcTest.java   |   6 +-
 .../spherical/SphericalConvexPolygonTest.java      |  10 +-
 .../spherical/SphericalTriangleTest.java           |   6 +-
 .../test/org/apache/sis/gml/GML2ReaderTest.java    |  20 +--
 .../test/org/apache/sis/gml/GML2WriterTest.java    |  10 +-
 .../test/org/apache/sis/gml/GML3ReaderTest.java    |  50 +++----
 .../test/org/apache/sis/gml/GML3WriterTest.java    |  18 +--
 .../test/org/apache/sis/gml/GMLReaderTest.java     |   2 +-
 .../test/org/apache/sis/gml/GMLWriterTest.java     |   4 +-
 .../test/org/apache/sis/gml/GeometryAssert.java    |  12 +-
 .../apache/sis/gml/JAXBGeometryAdapterTest.java    |  12 +-
 .../math => maths}/AbstractArrayTest.java          |   2 +-
 .../math => maths}/AbstractTupleTest.java          |   2 +-
 .../math => maths}/AbstractVectorTest.java         |   2 +-
 .../math => maths}/ArrayConcatenatedTest.java      |   2 +-
 .../{geometries/math => maths}/ArrayNbTest.java    |   2 +-
 .../{geometries/math => maths}/ArrayNdTest.java    |   2 +-
 .../{geometries/math => maths}/ArrayNfTest.java    |   2 +-
 .../{geometries/math => maths}/ArrayNiTest.java    |   2 +-
 .../{geometries/math => maths}/ArrayNlTest.java    |   2 +-
 .../{geometries/math => maths}/ArrayNsTest.java    |   2 +-
 .../{geometries/math => maths}/ArrayNubTest.java   |   2 +-
 .../{geometries/math => maths}/ArrayNuiTest.java   |   2 +-
 .../{geometries/math => maths}/ArrayNusTest.java   |   2 +-
 .../math => maths}/EasingMethodTest.java           |   2 +-
 .../sis/{geometries/math => maths}/MathsTest.java  |   2 +-
 .../{geometries/math => maths}/NDArraysTest.java   |   2 +-
 .../{geometries/math => maths}/QuaternionTest.java |   2 +-
 .../{geometries/math => maths}/Vector3DTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXbTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXdTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXfTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXiTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXlTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXsTest.java   |   2 +-
 .../{geometries/math => maths}/VectorXubTest.java  |   2 +-
 .../{geometries/math => maths}/VectorXuiTest.java  |   2 +-
 .../{geometries/math => maths}/VectorXusTest.java  |   2 +-
 .../{geometries/math => maths}/VectorsTest.java    |   2 +-
 .../org/apache/sis/scene/SceneUtilitiesTest.java   |   4 +-
 .../org/apache/sis/referencing/dggs/s2/S2Zone.java |   2 +-
 .../dggs/DiscreteGlobalGridCoverageProcessor.java  |  10 +-
 .../storage/dggs/DiscreteGlobalGridSystems.java    |  16 +-
 .../shared/ArrayDiscreteGlobalGridCoverage.java    |  10 +-
 .../rs/internal/shared/ArrayCodedCoverage.java     |  10 +-
 .../rs/internal/shared/GridAsCodedResource.java    |   8 +-
 .../sis/referencing/dggs/AbstractDggrsTest.java    |  16 +-
 .../org/apache/sis/referencing/dggs/s2/S2Test.java |   2 +-
 292 files changed, 1485 insertions(+), 1545 deletions(-)
 create mode 100644 incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeInterpolation.java
 copy incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{SolidInterpolation.java => AttributeTransformation.java} (63%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{PointSequence.java => DataPoints.java} (85%)
 copy incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{Frustrum.java => HyperPlane.java} (74%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/Arc.java (88%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/BSplineCurve.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/Bezier.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/Circle.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/CircularString.java (82%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{spirals => curve}/Clothoid.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/CompoundCurve.java (95%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/Conic.java (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/ConicArc.java (95%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/CubicSpline.java (96%)
 copy incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/Ellipse.java (95%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics => curve}/EllipticArc.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{polynomials => curve}/FunctionArc.java (93%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{polynomials => curve}/FunctionCurve.java (96%)
 copy incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{LineString.java => curve/Geodesic.java} (52%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/KnotType.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/LineString.java (80%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/LinearRing.java (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/MultiCurve.java (95%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/MultiLineString.java (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/NURB.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/OffsetCurve.java (92%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{polynomials => curve}/PolynomialArc.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{polynomials => curve}/PolynomialCurve.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/PolynomialSpline.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/ProductCurve.java (91%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{polynomials => curve}/RealFunction.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{polynomials => curve}/RealPolynomial.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => curve}/Rhumb.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{spirals => curve}/Spiral.java (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/SplineCurve.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => curve}/SplineCurveForm.java (96%)
 copy {buildSrc/src/main/java/org/apache/sis/buildtools/doclet => incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve}/package-info.java (76%)
 delete mode 100644 incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java
 delete mode 100644 incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/geodesics/Geodesic.java
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/{ArraySequence.java => ArrayDataPoints.java} (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/{DefaultPointSequence.java => DefaultDataPoints.java} (89%)
 copy incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/{DefaultLineString.java => DefaultGeodesic.java} (69%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => point}/MultiPoint.java (91%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{conics/Ellipse.java => point/PointCloud.java} (91%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{griddedsolid => solid}/BSolidSpline.java (95%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/Capsule.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/Cylinder.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/Frustrum.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/MultiPolyhedron.java (93%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{griddedsolid => solid}/ParametricCurveSolid.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/Polyhedron.java (92%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/Sphere.java (92%)
 copy {buildSrc/src/main/java/org/apache/sis/buildtools/doclet => incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid}/package-info.java (76%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/AbstractPolyhedron.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/Dodecahedron.java (92%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/Hexahedron.java (87%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/Icosahedron.java (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/Octahedron.java (87%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/RhombicTriacontahedron.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/Tetrahedron.java (86%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/TruncatedIcosahedron.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => solid}/polyhedron/package-info.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => surface}/BSplineSurface.java (92%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{splines => surface}/BSplineSurfaceForm.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/BilinearGrid.java (92%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/CurvePolygon.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/MultiPolygon.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/MultiSurface.java (94%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/ParametricCurveSurface.java (91%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/Polygon.java (93%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/PolyhedralSurface.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/PreparedTIN.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/TIN.java (91%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/Triangle.java (92%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/{ => surface}/TriangulatedSurface.java (96%)
 copy {buildSrc/src/main/java/org/apache/sis/buildtools/doclet => incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface}/package-info.java (76%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AbstractAffine.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AbstractArray.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AbstractCursor.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AbstractMatrix.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AbstractSimilarity.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AbstractTuple.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Affine.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Affine1D.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Affine2D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Affine3D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Affine4D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/AffineND.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Affines.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Array.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArrayConcatenated.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArrayFactory.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArrayFactoryFFM.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArrayFactoryHAT.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArrayFactoryJava.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArraySpliterator.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ArrayUnmodifiable.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Cursor.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/CursorUnmodifiable.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/DataType.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/EasingMethod.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Maths.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Matrices.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Matrix.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Matrix2D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Matrix3D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Matrix4D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/MatrixND.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/NDArray.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/NDArrays.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Quaternion.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Quaternions.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/ReadOnly.java (90%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/SampleSystem.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Similarity.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Similarity3D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/SimilarityND.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/SimplifiedTransform.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Transform.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Transform1D.java (97%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Tuple.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/TupleUnmodifiable.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Vector.java (98%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Vector1D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Vector2D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Vector3D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Vector4D.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/VectorND.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/Vectors.java (99%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/math => maths}/package-info.java (96%)
 rename incubator/src/org.apache.sis.geometry/main/org/apache/sis/{geometries/operation/simplify => scene}/TextureAtlas.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/AbstractArrayTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/AbstractTupleTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/AbstractVectorTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayConcatenatedTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNbTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNdTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNfTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNiTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNlTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNsTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNubTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNuiTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/ArrayNusTest.java (96%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/EasingMethodTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/MathsTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/NDArraysTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/QuaternionTest.java (99%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/Vector3DTest.java (98%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXbTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXdTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXfTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXiTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXlTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXsTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXubTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXuiTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorXusTest.java (97%)
 rename incubator/src/org.apache.sis.geometry/test/org/apache/sis/{geometries/math => maths}/VectorsTest.java (99%)


(sis) 01/06: feat(Geometry): fuze SIS getPoints() and ISO getDataPoints() as getDataPoints()

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8d053b8eb6708b66a610b696607585416069d824
Author: jsorel <jo...@geomatys.com>
AuthorDate: Fri Sep 4 16:32:38 2026 +0200

    feat(Geometry): fuze SIS getPoints() and ISO getDataPoints() as getDataPoints()
---
 .../main/org/apache/sis/geometries/Curve.java      | 26 ++++++++++++++---
 .../org/apache/sis/geometries/CurvePolygon.java    |  4 +--
 .../org/apache/sis/geometries/GeometryVisitor.java |  4 +--
 .../main/org/apache/sis/geometries/LineString.java | 25 ++++++----------
 .../main/org/apache/sis/geometries/LinearRing.java |  2 +-
 .../org/apache/sis/geometries/MultiLineString.java |  2 +-
 .../main/org/apache/sis/geometries/MultiPoint.java |  2 +-
 .../org/apache/sis/geometries/MultiPolygon.java    |  4 +--
 .../main/org/apache/sis/geometries/Point.java      |  1 -
 .../main/org/apache/sis/geometries/Polygon.java    |  4 +--
 .../org/apache/sis/geometries/PreparedTIN.java     |  2 +-
 .../main/org/apache/sis/geometries/TIN.java        |  2 +-
 .../main/org/apache/sis/geometries/Triangle.java   | 12 ++++----
 .../main/org/apache/sis/geometries/Wrapper.java    |  6 ++--
 .../apache/sis/geometries/adapter/JTSAdapter.java  |  6 ++--
 .../geometries/adapter/PathIteratorAdapter.java    |  4 +--
 .../main/org/apache/sis/geometries/conics/Arc.java |  3 +-
 .../sis/geometries/conics/CircularString.java      | 34 ++++++++++------------
 .../org/apache/sis/geometries/conics/Conic.java    |  9 +++---
 .../apache/sis/geometries/curve/ArcByBulge.java    | 26 ++++-------------
 .../sis/geometries/curve/ArcByCenterPoint.java     |  3 +-
 .../internal/shared/DefaultArcByBulge.java         |  2 +-
 .../internal/shared/DefaultCircularString.java     |  2 +-
 .../internal/shared/DefaultCompoundCurve.java      |  3 +-
 .../internal/shared/DefaultLineString.java         |  2 +-
 .../internal/shared/DefaultMultiPoint.java         |  2 +-
 .../internal/shared/DefaultReversedCurve.java      |  3 +-
 .../internal/shared/DefaultTriangle.java           |  2 +-
 .../apache/sis/geometries/mesh/MeshPrimitive.java  |  8 ++---
 .../geometries/mesh/MeshPrimitiveComparator.java   | 24 +++++++--------
 .../sis/geometries/mesh/MeshPrimitiveVisitor.java  |  4 +--
 .../apache/sis/geometries/operation/Contains.java  |  4 +--
 .../sis/geometries/operation/Intersection.java     |  4 +--
 .../org/apache/sis/geometries/operation/To3D.java  |  2 +-
 .../sis/geometries/operation/ToPrimitive.java      |  6 ++--
 .../apache/sis/geometries/operation/Transform.java |  4 +--
 .../simplify/greedyinsert/TinDistance.java         |  2 +-
 .../operation/spatialanalysis2d/ISOBand.java       |  2 +-
 .../operation/spatialanalysis2d/ISOLine.java       |  2 +-
 .../operation/triangulate/EarClipping.java         |  4 +--
 .../triangulate/delaunay/OrientedEdge.java         |  2 +-
 .../main/org/apache/sis/gml/GML2Writer.java        |  4 +--
 .../main/org/apache/sis/gml/GML3Writer.java        |  8 ++---
 .../sis/geometries/adapter/ShapeConverterTest.java |  2 +-
 .../sis/geometries/operation/ToPrimitiveTest.java  |  4 +--
 .../test/org/apache/sis/gml/GML3ReaderTest.java    | 16 +++++-----
 .../test/org/apache/sis/gml/GeometryAssert.java    |  2 +-
 .../sis/referencing/dggs/AbstractDggrsTest.java    |  2 +-
 48 files changed, 150 insertions(+), 153 deletions(-)

diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
index 44c4a81597..0574932512 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
@@ -35,6 +35,22 @@ import org.apache.sis.geometries.math.Vector;
 @UML(identifier="Curve", specification=ISO_19107) // section 6.4.18
 public interface Curve extends Orientable {
 
+    /**
+     * Contains a list of points on the curve.
+     * The first point is the curve starting point.
+     * The last point is the curve last point.
+     *
+     * <p>
+     * Difference with ISO-19107 : The type has been changed from
+     * a list of direct positions to a PointSequence.
+     * This change allows to accomodate addition attributes like in GLTF or GPU models.
+     * </p>
+     *
+     * @return curve data points.
+     */
+    @UML(identifier="dataPoint", specification=ISO_19107) // section 6.4.18.3
+    PointSequence getDataPoints();
+
     /**
      * The length of this Curve in its associated spatial reference.
      *
@@ -54,7 +70,9 @@ public interface Curve extends Orientable {
      */
     @UML(identifier="startPoint", specification=ISO_19107) // section 6.4.18.6
     default Point getStartPoint() {
-        throw new UnsupportedOperationException();
+        final PointSequence points = getDataPoints();
+        if (points.isEmpty()) return null;
+        return points.getPoint(0);
     }
 
     /**
@@ -65,7 +83,9 @@ public interface Curve extends Orientable {
      */
     @UML(identifier="endPoint", specification=ISO_19107) // section 6.4.18.7
     default Point getEndPoint() {
-        throw new UnsupportedOperationException();
+        final PointSequence points = getDataPoints();
+        if (points.isEmpty()) return null;
+        return points.getPoint(points.size()-1);
     }
 
     /**
@@ -93,8 +113,6 @@ public interface Curve extends Orientable {
     @UML(identifier="controlPoint", specification=ISO_19107) // section 6.4.18.2
     Array getControlPoints();
 
-    @UML(identifier="dataPoint", specification=ISO_19107) // section 6.4.18.3
-    Array getDataPoints();
 
     @UML(identifier="knot", specification=ISO_19107) // section 6.4.18.4
     default List<Knot> getKnots() {
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java
index 41c79e8d23..b71d06da2a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java
@@ -94,12 +94,12 @@ public interface CurvePolygon extends Surface {
     @Override
     default String asText() {
         final StringBuilder sb = new StringBuilder("POLYGON ((");
-        AbstractGeometry.toText(sb,  getExteriorRing().asLine(null, null).getPoints());
+        AbstractGeometry.toText(sb,  getExteriorRing().asLine(null, null).getDataPoints());
         sb.append(')');
         for (int i = 0, n = getNumInteriorRing(); i < n; i++) {
             if (i != 0) sb.append(',');
             sb.append('(');
-            AbstractGeometry.toText(sb, getInteriorRingN(i).asLine(null, null).getPoints());
+            AbstractGeometry.toText(sb, getInteriorRingN(i).asLine(null, null).getDataPoints());
             sb.append(')');
         }
         sb.append(')');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
index 6ea87869e8..4e2bccf616 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
@@ -56,7 +56,7 @@ public class GeometryVisitor {
     }
 
     public void visit(LineString geometry) {
-        visit(geometry.getPoints());
+        visit(geometry.getDataPoints());
     }
 
     public void visit(Polygon geometry) {
@@ -69,7 +69,7 @@ public class GeometryVisitor {
     }
 
     public void visit(LinearRing geometry) {
-        visit(geometry.getPoints());
+        visit(geometry.getDataPoints());
     }
 
     public void visit(TIN geometry) {
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
index 86e94436ec..ef1abdadd5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
@@ -29,7 +29,7 @@ import org.apache.sis.geometries.math.Array;
  * A LineString is a Curve with linear interpolation between Points.
  * Each consecutive pair of Points defines a Line segment.
  *
- * A Line is a LineString with exactly 2 Points.
+ * Note : ISO-19107 name this class a Line, even if it has more then 2 points.
  *
  * @author Johann Sorel (Geomatys)
  */
@@ -49,8 +49,6 @@ public interface LineString extends Curve {
         return CurveInterpolation.LINEAR;
     }
 
-    PointSequence getPoints();
-
     @Override
     public default LineString asLine(Length spacing, Length offset) {
         return this;
@@ -63,7 +61,7 @@ public interface LineString extends Curve {
      * @return number of Points in this LineString.
      */
     default int getNumPoints() {
-        return getPoints().size();
+        return getDataPoints().size();
     }
 
     /**
@@ -73,12 +71,7 @@ public interface LineString extends Curve {
      * @return the specified Point N in this LineString.
      */
     default Point getPointN(int n) {
-        return getPoints().getPoint(n);
-    }
-
-    @Override
-    public default Array getDataPoints() {
-        return getPoints().getAttributeArray(AttributesType.ATT_POSITION);
+        return getDataPoints().getPoint(n);
     }
 
     /**
@@ -91,17 +84,17 @@ public interface LineString extends Curve {
 
     @Override
     default CoordinateReferenceSystem getCoordinateReferenceSystem() {
-        return getPoints().getCoordinateReferenceSystem();
+        return getDataPoints().getCoordinateReferenceSystem();
     }
 
     @Override
     default void setCoordinateReferenceSystem(CoordinateReferenceSystem cs) throws IllegalArgumentException {
-        getPoints().setCoordinateReferenceSystem(cs);
+        getDataPoints().setCoordinateReferenceSystem(cs);
     }
 
     @Override
     public default AttributesType getAttributesType() {
-        return getPoints().getAttributesType();
+        return getDataPoints().getAttributesType();
     }
 
     /**
@@ -110,12 +103,12 @@ public interface LineString extends Curve {
      * @return true if lineString is a line.
      */
     default boolean isLine() {
-        return getPoints().size() == 2;
+        return getDataPoints().size() == 2;
     }
 
     @Override
     default Envelope getEnvelope() {
-        PointSequence points = getPoints();
+        PointSequence points = getDataPoints();
         if (points.isEmpty()) {
             return null;
         }
@@ -125,7 +118,7 @@ public interface LineString extends Curve {
     @Override
     default String asText() {
         final StringBuilder sb = new StringBuilder("LINESTRING (");
-        final PointSequence points = getPoints();
+        final PointSequence points = getDataPoints();
         AbstractGeometry.toText(sb, points);
         sb.append(')');
         return sb.toString();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
index 10e83870b9..3e281f2087 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
@@ -37,7 +37,7 @@ public interface LinearRing extends LineString {
     @Override
     default String asText() {
         final StringBuilder sb = new StringBuilder("LINEARRING (");
-        final PointSequence points = getPoints();
+        final PointSequence points = getDataPoints();
         for (int i = 0, n = points.size() ; i < n; i++) {
             final Tuple pt = points.getPosition(i);
             if (i > 0) sb.append(',');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
index 5785a74814..474f9878bb 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
@@ -41,7 +41,7 @@ public interface MultiLineString extends MultiCurve<LineString> {
             if (k > 0) sb.append(',');
             sb.append('(');
             final LineString line = getGeometryN(k);
-            final PointSequence points = line.getPoints();
+            final PointSequence points = line.getDataPoints();
             for (int i = 0, n = points.size() ; i < n; i++) {
                 final Tuple pos = points.getPosition(i);
                 if (i > 0) sb.append(',');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
index d6c032f4a3..9e226fb898 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
@@ -43,7 +43,7 @@ public interface MultiPoint<T extends Point> extends GeometryCollection<T>{
     /**
      * View this multipoint as a point sequence
      */
-    default PointSequence asPointSequence() {
+    default PointSequence asDataPoints() {
         return new PointSequence() {
             @Override
             public CoordinateReferenceSystem getCoordinateReferenceSystem() {
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java
index 981644e8e6..e993092a43 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java
@@ -50,12 +50,12 @@ public interface MultiPolygon extends MultiSurface<Polygon> {
             if (k > 0) sb.append(',');
             final Polygon polygon = getGeometryN(k);
             sb.append("((");
-            AbstractGeometry.toText(sb,  polygon.getExteriorRing().asLine(null, null).getPoints());
+            AbstractGeometry.toText(sb,  polygon.getExteriorRing().asLine(null, null).getDataPoints());
             sb.append(')');
             for (int i = 0, n = polygon.getNumInteriorRing(); i < n; i++) {
                 if (i != 0) sb.append(',');
                 sb.append('(');
-                AbstractGeometry.toText(sb, polygon.getInteriorRingN(i).getPoints());
+                AbstractGeometry.toText(sb, polygon.getInteriorRingN(i).getDataPoints());
                 sb.append(')');
             }
             sb.append(')');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
index 86c47a91f2..d177155b2e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
@@ -24,7 +24,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometry.GeneralEnvelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
index e3df35b3bc..530221cf5f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
@@ -101,12 +101,12 @@ public interface Polygon extends Surface {
     @Override
     default String asText() {
         final StringBuilder sb = new StringBuilder("POLYGON ((");
-        AbstractGeometry.toText(sb,  getExteriorRing().asLine(null, null).getPoints());
+        AbstractGeometry.toText(sb,  getExteriorRing().asLine(null, null).getDataPoints());
         sb.append(')');
         for (int i = 0, n = getNumInteriorRing(); i < n; i++) {
             if (i != 0) sb.append(',');
             sb.append('(');
-            AbstractGeometry.toText(sb, getInteriorRingN(i).getPoints());
+            AbstractGeometry.toText(sb, getInteriorRingN(i).getDataPoints());
             sb.append(')');
         }
         sb.append(')');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
index f213314df9..d1b1c7f33b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
@@ -341,7 +341,7 @@ public interface PreparedTIN extends TIN {
                 final Iterator<Triangle> iterator = triangles.iterator();
                 while (iterator.hasNext()) {
                     final Triangle triangle = iterator.next();
-                    final PointSequence points = triangle.getExteriorRing().getPoints();
+                    final PointSequence points = triangle.getExteriorRing().getDataPoints();
                     final Tuple a = points.getPosition(0);
                     final Tuple b = points.getPosition(1);
                     final Tuple c = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
index 0a550589aa..c70e581062 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
@@ -51,7 +51,7 @@ public interface TIN extends TriangulatedSurface<Triangle> {
                 sb.append(',');
             }
             sb.append("((");
-            final PointSequence points = triangle.getExteriorRing().getPoints();
+            final PointSequence points = triangle.getExteriorRing().getDataPoints();
             corner = points.getPosition(0);
             AbstractGeometry.toText(sb, corner);
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
index 3647c9cf80..4134b0891d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
@@ -72,7 +72,7 @@ public interface Triangle extends Polygon {
 
     @Override
     default Envelope getEnvelope() {
-        final PointSequence exterior = getExteriorRing().getPoints();
+        final PointSequence exterior = getExteriorRing().getDataPoints();
         final Tuple<?> first = exterior.getPosition(0);
         final BBox env = new BBox(first, first);
         env.add(exterior.getPosition(1));
@@ -83,7 +83,7 @@ public interface Triangle extends Polygon {
 
     @Override
     default double getArea() {
-        final PointSequence points = getExteriorRing().getPoints();
+        final PointSequence points = getExteriorRing().getDataPoints();
         final Tuple<?> a = points.getPosition(0);
         final Tuple<?> b = points.getPosition(1);
         final Tuple<?> c = points.getPosition(2);
@@ -101,7 +101,7 @@ public interface Triangle extends Polygon {
      * @return point distance to triangle
      */
     default double distance(Tuple pt) {
-        final PointSequence exterior = getExteriorRing().getPoints();
+        final PointSequence exterior = getExteriorRing().getDataPoints();
         final Tuple<?> p0 = exterior.getPosition(0);
         final Tuple<?> p1 = exterior.getPosition(1);
         final Tuple<?> p2 = exterior.getPosition(2);
@@ -214,7 +214,7 @@ public interface Triangle extends Polygon {
 
     @Override
     default String asText() {
-        final PointSequence exterior = getExteriorRing().getPoints();
+        final PointSequence exterior = getExteriorRing().getDataPoints();
         final StringBuilder sb = new StringBuilder("TRIANGLE ((");
         AbstractGeometry.toText(sb, exterior.getPosition(0));
         sb.append(',');
@@ -265,7 +265,7 @@ public interface Triangle extends Polygon {
 
         @Override
         public Tuple getPosition() {
-            final PointSequence points = triangle.getExteriorRing().getPoints();
+            final PointSequence points = triangle.getExteriorRing().getDataPoints();
             switch (cornerIdx) {
                 case -1 :
                     return interpolate(
@@ -286,7 +286,7 @@ public interface Triangle extends Polygon {
          */
         @Override
         public Tuple getAttribute(String name) {
-            final PointSequence points = triangle.getExteriorRing().getPoints();
+            final PointSequence points = triangle.getExteriorRing().getDataPoints();
             switch (cornerIdx) {
                 case -1 :
                     return interpolate(
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
index 73bde45a69..3b73d4f1d4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
@@ -337,9 +337,9 @@ public final class Wrapper extends GeometryWrapper {
         if (geometry instanceof Point cdt){
             jts = gf.createPoint(new JTSSequence(cdt.asPointSequence()));
         } else if (geometry instanceof LinearRing cdt) {
-            jts = gf.createLinearRing(new JTSSequence(cdt.getPoints()));
+            jts = gf.createLinearRing(new JTSSequence(cdt.getDataPoints()));
         } else if (geometry instanceof LineString cdt) {
-            jts = gf.createLineString(new JTSSequence(cdt.getPoints()));
+            jts = gf.createLineString(new JTSSequence(cdt.getDataPoints()));
         } else if (geometry instanceof Polygon cdt) {
             final org.locationtech.jts.geom.LinearRing exterior = (org.locationtech.jts.geom.LinearRing) asJTS(cdt.getExteriorRing(), gf);
             final org.locationtech.jts.geom.LinearRing[] inners = new org.locationtech.jts.geom.LinearRing[cdt.getNumInteriorRing()];
@@ -348,7 +348,7 @@ public final class Wrapper extends GeometryWrapper {
             }
             jts = gf.createPolygon(exterior, inners);
         } else if (geometry instanceof MultiPoint<?> cdt) {
-            jts = gf.createMultiPoint(new JTSSequence(cdt.asPointSequence()));
+            jts = gf.createMultiPoint(new JTSSequence(cdt.asDataPoints()));
         } else if (geometry instanceof MultiLineString cdt) {
             final org.locationtech.jts.geom.LineString[] children = new org.locationtech.jts.geom.LineString[cdt.getNumGeometries()];
             for (int i = 0; i < children.length; i++) {
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
index bed13ebfc0..eaf95556e9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
@@ -122,13 +122,13 @@ public final class JTSAdapter {
             final CoordinateSequence cs = toCoordinateSequence(cdt.asPointSequence(), copy, gf);
             jts = new org.locationtech.jts.geom.Point(cs, gf);
         } else if (geom instanceof MultiPoint cdt) {
-            final CoordinateSequence cs = toCoordinateSequence(cdt.asPointSequence(), copy, gf);
+            final CoordinateSequence cs = toCoordinateSequence(cdt.asDataPoints(), copy, gf);
             jts = gf.createMultiPoint(cs);
         } else if (geom instanceof LinearRing cdt) {
-            final CoordinateSequence cs = toCoordinateSequence(cdt.getPoints(), copy, gf);
+            final CoordinateSequence cs = toCoordinateSequence(cdt.getDataPoints(), copy, gf);
             jts = new org.locationtech.jts.geom.LinearRing(cs, gf);
         } else if (geom instanceof LineString cdt) {
-            final CoordinateSequence cs = toCoordinateSequence(cdt.getPoints(), copy, gf);
+            final CoordinateSequence cs = toCoordinateSequence(cdt.getDataPoints(), copy, gf);
             jts = new org.locationtech.jts.geom.LineString(cs, gf);
         } else if (geom instanceof MultiLineString cdt) {
             final org.locationtech.jts.geom.LineString[] children = new org.locationtech.jts.geom.LineString[cdt.getNumGeometries()];
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
index 4291943544..93fb55d4c7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
@@ -178,7 +178,7 @@ final class PathIteratorAdapter implements PathIterator {
     private static Iterator<PointSequence> iterator(final Geometry geometry) {
         final Collection<PointSequence> sequences;
         if (geometry instanceof LineString) {
-            sequences = List.of(((LineString) geometry).getPoints());
+            sequences = List.of(((LineString) geometry).getDataPoints());
         } else if (geometry instanceof Point) {
             sequences = List.of(((Point) geometry).asPointSequence());
         } else if (geometry instanceof Polygon) {
@@ -223,7 +223,7 @@ final class PathIteratorAdapter implements PathIterator {
                 current = polygon.getInteriorRingN(interior);
             }
             interior++;
-            return current.getPoints();
+            return current.getDataPoints();
         }
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
index ee58b4ef83..95b18f3891 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
@@ -17,6 +17,7 @@
 package org.apache.sis.geometries.conics;
 
 import java.util.List;
+import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
@@ -39,7 +40,7 @@ public interface Arc extends Conic {
 
     @UML(identifier="dataPoints", specification=ISO_19107) // section 7.9.2.4
     @Override
-    Array getDataPoints();
+    PointSequence getDataPoints();
 
     @UML(identifier="radius", specification=ISO_19107) // section 7.9.2.5
     List<Vector> getRadius();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
index 5ddb10e59f..d3d1530ed1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
@@ -44,19 +44,11 @@ public interface CircularString extends Curve {
         return TYPE;
     }
 
-    /**
-     * Returns the control points of this circular string: for each arc, its start point, a point
-     * on the arc and its end point, with consecutive arcs sharing a point.
-     *
-     * @return the control points, never null. Its size is odd and at least 3, or 0 if empty.
-     */
-    PointSequence getPoints();
-
     /**
      * Returns the number of arcs this circular string is made of.
      */
     default int getNumArcs() {
-        final int size = getPoints().size();
+        final int size = getDataPoints().size();
         return (size == 0) ? 0 : (size - 1) / 2;
     }
 
@@ -68,10 +60,14 @@ public interface CircularString extends Curve {
         return CurveInterpolation.CIRCULAR;
     }
 
+    /**
+     * Returns the control points of this circular string: for each arc, its start point, a point
+     * on the arc and its end point, with consecutive arcs sharing a point.
+     *
+     * @return the control points, never null. Its size is odd and at least 3, or 0 if empty.
+     */
     @Override
-    public default Array getDataPoints() {
-        return getPoints().getAttributeArray(AttributesType.ATT_POSITION);
-    }
+    PointSequence getDataPoints();
 
     /**
      * @return null, a CircularString has no control points
@@ -83,37 +79,37 @@ public interface CircularString extends Curve {
 
     @Override
     default CoordinateReferenceSystem getCoordinateReferenceSystem() {
-        return getPoints().getCoordinateReferenceSystem();
+        return getDataPoints().getCoordinateReferenceSystem();
     }
 
     @Override
     default void setCoordinateReferenceSystem(CoordinateReferenceSystem cs) throws IllegalArgumentException {
-        getPoints().setCoordinateReferenceSystem(cs);
+        getDataPoints().setCoordinateReferenceSystem(cs);
     }
 
     @Override
     default AttributesType getAttributesType() {
-        return getPoints().getAttributesType();
+        return getDataPoints().getAttributesType();
     }
 
     @Override
     default boolean isEmpty() {
-        return getPoints().isEmpty();
+        return getDataPoints().isEmpty();
     }
 
     @Override
     default Point getStartPoint() {
-        return getPoints().getPoint(0);
+        return getDataPoints().getPoint(0);
     }
 
     @Override
     default Point getEndPoint() {
-        return getPoints().getPoint(getPoints().size() - 1);
+        return getDataPoints().getPoint(getDataPoints().size() - 1);
     }
 
     @Override
     default boolean isClosed() {
-        final PointSequence points = getPoints();
+        final PointSequence points = getDataPoints();
         final int size = points.size();
         if (size == 0) {
             return false;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
index db0a43b8a2..f7275e7923 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
@@ -19,6 +19,7 @@ package org.apache.sis.geometries.conics;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
 
 
@@ -29,14 +30,14 @@ import org.apache.sis.geometries.math.Array;
 @UML(identifier="Conic", specification=ISO_19107) // section 7.9.5
 public interface Conic extends Curve {
 
+    @UML(identifier="dataPoints", specification=ISO_19107) // section 7.9.5.2
+    @Override
+    PointSequence getDataPoints();
+    
     @UML(identifier="controlPoints", specification=ISO_19107) // section 7.9.5.2
     @Override
     Array getControlPoints();
 
-    @UML(identifier="dataPoints", specification=ISO_19107) // section 7.9.5.2
-    @Override
-    Array getDataPoints();
-
     @UML(identifier="isCycle", specification=ISO_19107) // section 7.9.5.2
     boolean isCycle();
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
index 4d7d7deed5..80d08a36a2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
@@ -54,7 +54,8 @@ public interface ArcByBulge extends Curve {
      *
      * @return the start and end points, never null and always of size 2.
      */
-    PointSequence getPoints();
+    @Override
+    PointSequence getDataPoints();
 
     /**
      * Returns the distance from the midpoint of the chord joining the two end points to the arc,
@@ -73,11 +74,6 @@ public interface ArcByBulge extends Curve {
      */
     Vector<?> getNormal();
 
-    @Override
-    public default Array getDataPoints() {
-        return getPoints().getAttributeArray(AttributesType.ATT_POSITION);
-    }
-
     /**
      * @return null, a ArcByBulge has no control points
      */
@@ -96,32 +92,22 @@ public interface ArcByBulge extends Curve {
 
     @Override
     default CoordinateReferenceSystem getCoordinateReferenceSystem() {
-        return getPoints().getCoordinateReferenceSystem();
+        return getDataPoints().getCoordinateReferenceSystem();
     }
 
     @Override
     default void setCoordinateReferenceSystem(CoordinateReferenceSystem cs) throws IllegalArgumentException {
-        getPoints().setCoordinateReferenceSystem(cs);
+        getDataPoints().setCoordinateReferenceSystem(cs);
     }
 
     @Override
     default AttributesType getAttributesType() {
-        return getPoints().getAttributesType();
+        return getDataPoints().getAttributesType();
     }
 
     @Override
     default boolean isEmpty() {
-        return getPoints().isEmpty();
-    }
-
-    @Override
-    default Point getStartPoint() {
-        return getPoints().getPoint(0);
-    }
-
-    @Override
-    default Point getEndPoint() {
-        return getPoints().getPoint(getPoints().size() - 1);
+        return getDataPoints().isEmpty();
     }
 
     /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
index 9a6a3fcefa..ed9bcfaa9a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
@@ -22,6 +22,7 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
 
 
@@ -103,7 +104,7 @@ public interface ArcByCenterPoint extends Curve {
     }
 
     @Override
-    public default Array getDataPoints() {
+    public default PointSequence getDataPoints() {
         throw new UnsupportedOperationException("Not supported yet");
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
index b60451267d..54f09dc058 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
@@ -59,7 +59,7 @@ public class DefaultArcByBulge extends AbstractGeometry implements ArcByBulge {
     }
 
     @Override
-    public PointSequence getPoints() {
+    public PointSequence getDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
index a96a1f265f..04fd89e57f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
@@ -46,7 +46,7 @@ public class DefaultCircularString extends AbstractGeometry implements CircularS
     }
 
     @Override
-    public PointSequence getPoints() {
+    public PointSequence getDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
index e615591261..02fd790bc0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
@@ -21,6 +21,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.CompoundCurve;
 import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
 
 
@@ -111,7 +112,7 @@ public class DefaultCompoundCurve extends AbstractGeometry implements CompoundCu
     }
 
     @Override
-    public Array getDataPoints() {
+    public PointSequence getDataPoints() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
index 84b6e2f464..4edcf32b76 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
@@ -38,7 +38,7 @@ public class DefaultLineString extends AbstractGeometry implements LineString {
     }
 
     @Override
-    public PointSequence getPoints() {
+    public PointSequence getDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
index a9ef70c2b5..ec3ab6f861 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
@@ -67,7 +67,7 @@ public class DefaultMultiPoint extends AbstractGeometry implements MultiPoint<Po
     }
 
     @Override
-    public PointSequence asPointSequence() {
+    public PointSequence asDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
index 326a3bdbbb..8691a0bcb2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
@@ -24,6 +24,7 @@ import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Primitive;
 import org.apache.sis.geometries.math.Array;
 
@@ -137,7 +138,7 @@ public class DefaultReversedCurve extends AbstractGeometry implements Curve {
     }
 
     @Override
-    public Array getDataPoints() {
+    public PointSequence getDataPoints() {
         return base.getDataPoints();
     }
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
index 4fd2e4e449..ecd8900166 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
@@ -34,7 +34,7 @@ public class DefaultTriangle extends DefaultPolygon implements Triangle {
      */
     public DefaultTriangle(LinearRing exterior) {
         super(exterior);
-        final PointSequence points = exterior.getPoints();
+        final PointSequence points = exterior.getDataPoints();
         final int size = points.size();
         switch (size) {
             case 0: //empty triangle
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
index 1c5b63b217..328bd23280 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
@@ -794,7 +794,7 @@ public interface MeshPrimitive extends Geometry {
 
                 @Override
                 protected void visit(Triangle candidate) {
-                    final PointSequence points = candidate.getExteriorRing().getPoints();
+                    final PointSequence points = candidate.getExteriorRing().getDataPoints();
                     long idx0 = ((MeshPrimitive.Vertex)points.getPoint(0)).getIndex();
                     long idx1 = ((MeshPrimitive.Vertex)points.getPoint(1)).getIndex();
                     long idx2 = ((MeshPrimitive.Vertex)points.getPoint(2)).getIndex();
@@ -828,7 +828,7 @@ public interface MeshPrimitive extends Geometry {
 
                 @Override
                 protected void visit(LineString candidate) {
-                    final PointSequence points = candidate.getPoints();
+                    final PointSequence points = candidate.getDataPoints();
                     long idx0 = ((MeshPrimitive.Vertex)points.getPoint(0)).getIndex();
                     long idx1 = ((MeshPrimitive.Vertex)points.getPoint(1)).getIndex();
                     positions.get(idx0, pos0);
@@ -1159,7 +1159,7 @@ public interface MeshPrimitive extends Geometry {
         }
 
         @Override
-        public PointSequence getPoints() {
+        public PointSequence getDataPoints() {
             //select all points, duplicate first point as last
             int[] indices;
             if (index == null) {
@@ -1181,7 +1181,7 @@ public interface MeshPrimitive extends Geometry {
         }
 
         @Override
-        public PointSequence getPoints() {
+        public PointSequence getDataPoints() {
             final int[] indices;
             if (index == null) {
                 indices = new int[Math.toIntExact(getPositions().getLength())];
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
index 5b6170323e..622f28f802 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
@@ -196,10 +196,10 @@ public final class MeshPrimitiveComparator {
             final LineString e1 = (LineString) expected;
             final LineString e2 = (LineString) candidate;
 
-            final Vertex e1v0 = (Vertex) e1.getPoints().getPoint(0);
-            final Vertex e1v1 = (Vertex) e1.getPoints().getPoint(1);
-            final Vertex e2v0 = (Vertex) e2.getPoints().getPoint(0);
-            final Vertex e2v1 = (Vertex) e2.getPoints().getPoint(1);
+            final Vertex e1v0 = (Vertex) e1.getDataPoints().getPoint(0);
+            final Vertex e1v1 = (Vertex) e1.getDataPoints().getPoint(1);
+            final Vertex e2v0 = (Vertex) e2.getDataPoints().getPoint(0);
+            final Vertex e2v1 = (Vertex) e2.getDataPoints().getPoint(1);
             return (compareVertex(e1v0, e2v0) && compareVertex(e1v1, e2v1))
                 || (compareVertex(e1v0, e2v1) && compareVertex(e1v1, e2v0));
 
@@ -208,12 +208,12 @@ public final class MeshPrimitiveComparator {
             final LineString e1 = ((Triangle) expected).getExteriorRing();
             final LineString e2 = ((Triangle) candidate).getExteriorRing();
 
-            final Vertex e1v0 = (Vertex) e1.getPoints().getPoint(0);
-            final Vertex e1v1 = (Vertex) e1.getPoints().getPoint(1);
-            final Vertex e1v2 = (Vertex) e1.getPoints().getPoint(2);
-            final Vertex e2v0 = (Vertex) e2.getPoints().getPoint(0);
-            final Vertex e2v1 = (Vertex) e2.getPoints().getPoint(1);
-            final Vertex e2v2 = (Vertex) e2.getPoints().getPoint(2);
+            final Vertex e1v0 = (Vertex) e1.getDataPoints().getPoint(0);
+            final Vertex e1v1 = (Vertex) e1.getDataPoints().getPoint(1);
+            final Vertex e1v2 = (Vertex) e1.getDataPoints().getPoint(2);
+            final Vertex e2v0 = (Vertex) e2.getDataPoints().getPoint(0);
+            final Vertex e2v1 = (Vertex) e2.getDataPoints().getPoint(1);
+            final Vertex e2v2 = (Vertex) e2.getDataPoints().getPoint(2);
             return (compareVertex(e1v0, e2v0) && compareVertex(e1v1, e2v1) && compareVertex(e1v2, e2v2))
                 || (compareVertex(e1v0, e2v1) && compareVertex(e1v1, e2v2) && compareVertex(e1v2, e2v0))
                 || (compareVertex(e1v0, e2v2) && compareVertex(e1v1, e2v0) && compareVertex(e1v2, e2v1));
@@ -254,12 +254,12 @@ public final class MeshPrimitiveComparator {
     private static boolean isDegenerated(Object candidate) {
         if (candidate instanceof LineString) {
             final LineString cdt = (LineString) candidate;
-            final PointSequence points = cdt.getPoints();
+            final PointSequence points = cdt.getDataPoints();
             return points.getPosition(0).equals(points.getPosition(1));
 
         } else if (candidate instanceof Triangle) {
             final Triangle cdt = (Triangle) candidate;
-            final PointSequence points = cdt.getExteriorRing().getPoints();
+            final PointSequence points = cdt.getExteriorRing().getDataPoints();
             final Tuple c0 = points.getPosition(0);
             final Tuple c1 = points.getPosition(1);
             final Tuple c2 = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
index 77954297f4..80361048ce 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
@@ -204,7 +204,7 @@ public abstract class MeshPrimitiveVisitor {
      * Override this method to process a triangle.
      */
     protected void visit(Triangle candidate) {
-        final PointSequence points = candidate.getExteriorRing().getPoints();
+        final PointSequence points = candidate.getExteriorRing().getDataPoints();
         visit((MeshPrimitive.Vertex) points.getPoint(0));
         visit((MeshPrimitive.Vertex) points.getPoint(1));
         visit((MeshPrimitive.Vertex) points.getPoint(2));
@@ -214,7 +214,7 @@ public abstract class MeshPrimitiveVisitor {
      * Override this method to process a line.
      */
     protected void visit(LineString candidate) {
-        final PointSequence points = candidate.getPoints();
+        final PointSequence points = candidate.getDataPoints();
         visit((MeshPrimitive.Vertex) points.getPoint(0));
         visit((MeshPrimitive.Vertex) points.getPoint(1));
     }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
index 4b16931957..68fe374410 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
@@ -85,7 +85,7 @@ public final class Contains {
         ProcessorUtils.ensureSameCRS2D(polygon, candidate);
 
         { //check exterior
-            final Array coords = polygon.getExteriorRing().getPoints().getAttributeArray(AttributesType.ATT_POSITION);
+            final Array coords = polygon.getExteriorRing().getDataPoints().getAttributeArray(AttributesType.ATT_POSITION);
             if (!contains(coords, candidate.getPosition())) {
                 //point is outside the exterior ring
                 return false;
@@ -95,7 +95,7 @@ public final class Contains {
         { //check holes
             for (int i = 0, n = polygon.getNumInteriorRing(); i < n; i++) {
                 final LineString hole = polygon.getInteriorRingN(i);
-                final Array coords = hole.getPoints().getAttributeArray(AttributesType.ATT_POSITION);
+                final Array coords = hole.getDataPoints().getAttributeArray(AttributesType.ATT_POSITION);
                 if (contains(coords, candidate.getPosition())) {
                     //point is within a hole
                     return false;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
index 55ce8d9a2d..c20a2661c1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
@@ -154,7 +154,7 @@ public final class Intersection {
         final List<LineString> segments = new ArrayList<>();
         for (int i = 0, n = lines.getNumGeometries(); i < n; i++) {
             final LineString line = lines.getGeometryN(i);
-            final Array segment = line.getPoints().getAttributeArray(AttributesType.ATT_POSITION);
+            final Array segment = line.getDataPoints().getAttributeArray(AttributesType.ATT_POSITION);
             final Tuple s1 = segment.get(0);
             final Tuple s2 = segment.get(1);
 
@@ -163,7 +163,7 @@ public final class Intersection {
 
                 while (iterator.hasNext()) {
                     final Triangle triangle = iterator.next();
-                    final Array corners = triangle.getExteriorRing().getPoints().getAttributeArray(AttributesType.ATT_POSITION);
+                    final Array corners = triangle.getExteriorRing().getDataPoints().getAttributeArray(AttributesType.ATT_POSITION);
                     final Tuple c0 = corners.get(0);
                     final Tuple c1 = corners.get(1);
                     final Tuple c2 = corners.get(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
index 5d4974c0a1..2aef6747d7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
@@ -127,7 +127,7 @@ public final class To3D {
      * Add Z axis to LineString.
      */
     public static LineString to3D(LineString base, CoordinateReferenceSystem crs3d, Consumer<Tuple> zeditor) {
-        final PointSequence copy3d = to3d(base.getPoints(), crs3d, zeditor);
+        final PointSequence copy3d = to3d(base.getDataPoints(), crs3d, zeditor);
         return GeometryFactory.createLineString(copy3d);
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
index 3eeb5122e0..113bc64288 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
@@ -71,7 +71,7 @@ public final class ToPrimitive {
      */
     public static MeshPrimitive.LineStrip toPrimitive(LineString geometry) throws OperationException {
         final MeshPrimitive.LineStrip primitive = new MeshPrimitive.LineStrip();
-        final ArraySequence array = toArraySequence(geometry.getPoints());
+        final ArraySequence array = toArraySequence(geometry.getDataPoints());
         for (String name : array.getAttributeNames()) {
             primitive.setAttribute(name, array.getAttribute(name));
         }
@@ -90,7 +90,7 @@ public final class ToPrimitive {
      * Transform MultiPoint to Primitive.
      */
     public static MeshPrimitive.Points toPrimitive(MultiPoint geometry) throws OperationException {
-        final ArraySequence array = toArraySequence(geometry.asPointSequence());
+        final ArraySequence array = toArraySequence(geometry.asDataPoints());
         final MeshPrimitive.Points primitive = new MeshPrimitive.Points();
         for (String name : array.getAttributeNames()) {
             primitive.setAttribute(name, array.getAttribute(name));
@@ -118,7 +118,7 @@ public final class ToPrimitive {
 
             for (int i = 0, k = 0; i < numGeometries; i++, k += 2) {
                 final org.apache.sis.geometries.LineString line = geometry.getGeometryN(i);
-                final PointSequence points = line.getPoints();
+                final PointSequence points = line.getDataPoints();
                 for (String name : attributesType.getAttributeNames()) {
                     Array att = primitive.getAttribute(name);
                     att.set(k, points.getAttribute(0, name));
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
index 957b5defa9..b0bf221c01 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
@@ -79,7 +79,7 @@ public final class Transform {
 
     public static LinearRing transform(LinearRing r, CoordinateReferenceSystem crs, MathTransform transform) throws OperationException {
 
-        PointSequence ps = r.getPoints();
+        PointSequence ps = r.getDataPoints();
         final Array reference = ps.getAttributeArray(AttributesType.ATT_POSITION);
         final Array positions = transform(reference, crs, transform);
         final ArraySequence cp = new ArraySequence(positions);
@@ -186,7 +186,7 @@ public final class Transform {
     }
 
     public static Triangle transform(Triangle p, CoordinateReferenceSystem crs, MathTransform transform) throws OperationException {
-        final PointSequence ps = p.getExteriorRing().getPoints();
+        final PointSequence ps = p.getExteriorRing().getDataPoints();
 
         final Array reference = ps.getAttributeArray(AttributesType.ATT_POSITION);
         final Array positions = transform(reference, crs, transform);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
index 1566d79301..44ca406453 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
@@ -32,7 +32,7 @@ final class TinDistance implements BiFunction<Tuple,Triangle,Double> {
 
     @Override
     public Double apply(Tuple pt, Triangle triangle) {
-        final PointSequence points = triangle.getExteriorRing().getPoints();
+        final PointSequence points = triangle.getExteriorRing().getDataPoints();
         final Tuple p0 = points.getPosition(0);
         final Tuple p1 = points.getPosition(1);
         final Tuple p2 = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
index b1403d9971..64e6bc0059 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
@@ -79,7 +79,7 @@ public final class ISOBand {
         final MeshPrimitiveVisitor visitor = new MeshPrimitiveVisitor(triangles) {
             @Override
             protected void visit(Triangle candidate) {
-                final PointSequence points = candidate.getExteriorRing().getPoints();
+                final PointSequence points = candidate.getExteriorRing().getDataPoints();
                 Tuple t0 = points.getPosition(0);
                 Tuple t1 = points.getPosition(1);
                 Tuple t2 = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
index b92844c2cf..f6858aa876 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
@@ -55,7 +55,7 @@ public final class ISOLine {
         final MeshPrimitiveVisitor visitor = new MeshPrimitiveVisitor(triangles) {
             @Override
             protected void visit(Triangle candidate) {
-                final PointSequence points = candidate.getExteriorRing().getPoints();
+                final PointSequence points = candidate.getExteriorRing().getDataPoints();
                 final double[] p0 = points.getPosition(0).toArrayDouble();
                 final double[] p1 = points.getPosition(1).toArrayDouble();
                 final double[] p2 = points.getPosition(2).toArrayDouble();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
index d8e3278b55..d99d816f23 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
@@ -148,14 +148,14 @@ public class EarClipping {
 
         //build a single geometry linking inner holes.
         final List<Tuple<?>> borderCoords = new ArrayList<>();
-        part.outter.getPoints().getAttributeArray(AttributesType.ATT_POSITION).stream(false).forEach(borderCoords::add);
+        part.outter.getDataPoints().getAttributeArray(AttributesType.ATT_POSITION).stream(false).forEach(borderCoords::add);
         //sort inner holes by minimum x value
         orderHoles(part);
 
         //attach holes to the main geometry
         for(int i=0,n=part.inners.size();i<n;i++){
             //we must find the minimum x coordinate in the inner loop
-            final List<Tuple<?>> loop = part.inners.get(i).getPoints().getAttributeArray(AttributesType.ATT_POSITION).stream(false).toList();
+            final List<Tuple<?>> loop = part.inners.get(i).getDataPoints().getAttributeArray(AttributesType.ATT_POSITION).stream(false).toList();
             int index = 0;
             Tuple min = loop.get(index);
             for(int k=1,p=loop.size();k<p;k++){
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
index 47cd16159d..4c01968fe8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
@@ -181,7 +181,7 @@ final class OrientedEdge extends AbstractGeometry implements LineString, PointSe
     }
 
     @Override
-    public PointSequence getPoints() {
+    public PointSequence getDataPoints() {
         return this;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
index c82047aeee..9077a54855 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
@@ -98,7 +98,7 @@ public final class GML2Writer extends AbstractGMLWriter {
     @Override
     protected void writeLineString(final LineString g, final String srsName, final boolean declareNamespace) throws XMLStreamException {
         writeStart(GML2Tags.LINE_STRING, srsName, declareNamespace);
-        writeCoordinates(g.getPoints());
+        writeCoordinates(g.getDataPoints());
         writer.writeEndElement();
     }
 
@@ -108,7 +108,7 @@ public final class GML2Writer extends AbstractGMLWriter {
     @Override
     protected void writeLinearRing(final LinearRing g, final String srsName, final boolean declareNamespace) throws XMLStreamException {
         writeStart(GML2Tags.LINEAR_RING, srsName, declareNamespace);
-        writeCoordinates(g.getPoints());
+        writeCoordinates(g.getDataPoints());
         writer.writeEndElement();
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
index 2040ea0092..25b8bddc58 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
@@ -115,7 +115,7 @@ public final class GML3Writer extends AbstractGMLWriter {
     @Override
     protected void writeLineString(final LineString g, final String srsName, final boolean declareNamespace) throws XMLStreamException {
         writeStart(GML2Tags.LINE_STRING, srsName, declareNamespace);
-        writePosList(g.getPoints());
+        writePosList(g.getDataPoints());
         writer.writeEndElement();
     }
 
@@ -125,7 +125,7 @@ public final class GML3Writer extends AbstractGMLWriter {
     @Override
     protected void writeLinearRing(final LinearRing g, final String srsName, final boolean declareNamespace) throws XMLStreamException {
         writeStart(GML2Tags.LINEAR_RING, srsName, declareNamespace);
-        writePosList(g.getPoints());
+        writePosList(g.getDataPoints());
         writer.writeEndElement();
     }
 
@@ -347,7 +347,7 @@ public final class GML3Writer extends AbstractGMLWriter {
      */
     private void writeArcSegment(final CircularString g) throws XMLStreamException {
         writer.writeStartElement((g.getNumArcs() == 1) ? GML3Tags.ARC : GML3Tags.ARC_STRING);
-        writePosList(g.getPoints());
+        writePosList(g.getDataPoints());
         writer.writeEndElement();
     }
 
@@ -382,7 +382,7 @@ public final class GML3Writer extends AbstractGMLWriter {
         writeStart(GML3Tags.CURVE, srsName, declareNamespace);
         writer.writeStartElement(GML3Tags.SEGMENTS);
         writer.writeStartElement(GML3Tags.ARC_BY_BULGE);
-        writePosList(g.getPoints());
+        writePosList(g.getDataPoints());
         writeMeasure(GML3Tags.BULGE, g.getBulge(), null);
         writePos(GML3Tags.NORMAL, g.getNormal());
         writer.writeEndElement();
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
index d495285fb0..c2fba9a30d 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
@@ -97,7 +97,7 @@ public final class ShapeConverterTest {
         } else if (geom instanceof Point pt) {
             lst.add(new Vector2D.Double(pt.getPosition().toArrayDouble()));
         } else if (geom instanceof LineString ls) {
-            PointSequence ps = ls.getPoints();
+            PointSequence ps = ls.getDataPoints();
             for (int i = 0, n = ps.size(); i < n; i++) {
                 lst.add(new Vector2D.Double(ps.getPosition(i).toArrayDouble()));
             }
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
index 46d60086d7..9c16611ee8 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
@@ -121,8 +121,8 @@ public class ToPrimitiveTest {
             assertEquals(2, mp.getNumGeometries());
             LineString l1 = mp.getGeometryN(0);
             LineString l2 = mp.getGeometryN(1);
-            assertArrayEquals(new double[]{0,1,2,3}, l1.getPoints().getAttributeArray(AttributesType.ATT_POSITION).toArrayDouble(), 0.0);
-            assertArrayEquals(new double[]{3,4,5,6}, l2.getPoints().getAttributeArray(AttributesType.ATT_POSITION).toArrayDouble(), 0.0);
+            assertArrayEquals(new double[]{0,1,2,3}, l1.getDataPoints().getAttributeArray(AttributesType.ATT_POSITION).toArrayDouble(), 0.0);
+            assertArrayEquals(new double[]{3,4,5,6}, l2.getDataPoints().getAttributeArray(AttributesType.ATT_POSITION).toArrayDouble(), 0.0);
         }
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
index a126b9094b..fc16763ec9 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
@@ -322,8 +322,8 @@ public final class GML3ReaderTest {
                 + "<gml:posList>0.0 0.0 0.0 10.0 0.0 0.0 10.0 10.0 0.0</gml:posList>"
                 + "</gml:LineString>";
         final LineString g = assertInstanceOf(LineString.class, readInline(xml));
-        assertEquals(3, g.getPoints().getDimension(), "inferred tuple width");
-        assertEquals(3, g.getPoints().size(), "number of points");
+        assertEquals(3, g.getDataPoints().getDimension(), "inferred tuple width");
+        assertEquals(3, g.getDataPoints().size(), "number of points");
         assertEquals(3, g.getCoordinateReferenceSystem().getCoordinateSystem().getDimension(),
                      "The two-dimensional srsName should have been promoted to three dimensions.");
     }
@@ -351,8 +351,8 @@ public final class GML3ReaderTest {
                 + "<gml:posList srsDimension=\"4\">0 0 0 0 1 1 1 1</gml:posList>"
                 + "</gml:LineString>";
         final LineString g = assertInstanceOf(LineString.class, readInline(xml));
-        assertEquals(4, g.getPoints().getDimension());
-        assertEquals(2, g.getPoints().size());
+        assertEquals(4, g.getDataPoints().getDimension());
+        assertEquals(2, g.getDataPoints().size());
         assertUndefinedCRS(g);
     }
 
@@ -424,7 +424,7 @@ public final class GML3ReaderTest {
         final Geometry g = read(TestData.V3, TestData.CURVE_ARC);
         final CircularString arc = assertInstanceOf(CircularString.class, g);
         assertEquals(1, arc.getNumArcs());
-        assertEquals(3, arc.getPoints().size());
+        assertEquals(3, arc.getDataPoints().size());
         assertEquals(CurveInterpolation.CIRCULAR, arc.getInterpolation());
         assertCRS(wgs84, g);
     }
@@ -531,9 +531,9 @@ public final class GML3ReaderTest {
     public void testArcByBulge() throws Exception {
         final Geometry g = read(TestData.V3, TestData.CURVE_ARC_BY_BULGE);
         final ArcByBulge arc = assertInstanceOf(ArcByBulge.class, g);
-        assertEquals(2, arc.getPoints().size(), "number of points");
-        assertEquals( 0.0, arc.getPoints().getPosition(0).get(0), GeometryAssert.TOLERANCE, "start x");
-        assertEquals(10.0, arc.getPoints().getPosition(1).get(0), GeometryAssert.TOLERANCE, "end x");
+        assertEquals(2, arc.getDataPoints().size(), "number of points");
+        assertEquals( 0.0, arc.getDataPoints().getPosition(0).get(0), GeometryAssert.TOLERANCE, "start x");
+        assertEquals(10.0, arc.getDataPoints().getPosition(1).get(0), GeometryAssert.TOLERANCE, "end x");
         assertEquals( 2.0, arc.getBulge(), GeometryAssert.TOLERANCE, "bulge");
         assertEquals(2, arc.getNormal().getDimension(), "normal dimension");
         assertEquals(0.0, arc.getNormal().get(0), GeometryAssert.TOLERANCE, "normal x");
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
index fa1bc3c299..6dab0e0591 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
@@ -87,7 +87,7 @@ final class GeometryAssert {
             assertSequenceEquals(e.asPointSequence(), a.asPointSequence(), tolerance);
         } else if (expected instanceof LineString e) {                  // Also covers LinearRing.
             final LineString a = (LineString) actual;
-            assertSequenceEquals(e.getPoints(), a.getPoints(), tolerance);
+            assertSequenceEquals(e.getDataPoints(), a.getDataPoints(), tolerance);
         } else if (expected instanceof Polygon e) {                     // Also covers Triangle.
             final Polygon a = (Polygon) actual;
             assertEquals(e.getNumInteriorRing(), a.getNumInteriorRing(), "number of interior rings");
diff --git a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
index 2a8244804e..4ad1283843 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
@@ -187,7 +187,7 @@ public abstract class AbstractDggrsTest {
                 final Polygon geometry = (Polygon) DiscreteGlobalGridSystems.toSISPolygon(z.getGeographicExtent());
                 final DirectPosition center = z.getPosition();
                 final LinearRing exterior = (LinearRing) geometry.getExteriorRing();
-                final PointSequence ps = exterior.getPoints();
+                final PointSequence ps = exterior.getDataPoints();
                 for (int i = 0; i < ps.size(); i++) {
                     final Tuple corner = ps.getPosition(i);
 


(sis) 05/06: refactor(Math): move math package outside geometries

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ac5b602bae72b728d265b955c302af0c9ec25ba5
Author: jsorel <jo...@geomatys.com>
AuthorDate: Mon Sep 7 09:28:38 2026 +0200

    refactor(Math): move math package outside geometries
---
 .../org.apache.sis.geometry/main/module-info.java  |  2 +-
 .../org/apache/sis/geometries/AttributesType.java  |  4 +--
 .../main/org/apache/sis/geometries/BBox.java       |  4 +--
 .../main/org/apache/sis/geometries/Curve.java      |  4 +--
 .../main/org/apache/sis/geometries/DataPoints.java | 10 +++---
 .../main/org/apache/sis/geometries/Geometries.java | 16 ++++-----
 .../org/apache/sis/geometries/GeometryFactory.java | 10 +++---
 .../org/apache/sis/geometries/MultiLineString.java |  2 +-
 .../main/org/apache/sis/geometries/MultiPoint.java |  2 +-
 .../main/org/apache/sis/geometries/OBBox.java      |  6 ++--
 .../apache/sis/geometries/OrientedGeometry.java    |  2 +-
 .../main/org/apache/sis/geometries/Point.java      |  4 +--
 .../org/apache/sis/geometries/PreparedTIN.java     |  8 ++---
 .../main/org/apache/sis/geometries/Ray.java        |  6 ++--
 .../main/org/apache/sis/geometries/Sphere.java     |  6 ++--
 .../main/org/apache/sis/geometries/Surface.java    |  2 +-
 .../main/org/apache/sis/geometries/TIN.java        |  2 +-
 .../main/org/apache/sis/geometries/Triangle.java   | 12 +++----
 .../main/org/apache/sis/geometries/Wrapper.java    |  2 +-
 .../apache/sis/geometries/adapter/JTSAdapter.java  | 16 ++++-----
 .../geometries/adapter/PathIteratorAdapter.java    |  2 +-
 .../sis/geometries/adapter/ShapeAdapter.java       |  8 ++---
 .../sis/geometries/adapter/ShapeConverter.java     |  6 ++--
 .../geometries/cs/GeometricCoordinateSystem.java   |  2 +-
 .../main/org/apache/sis/geometries/curve/Arc.java  |  4 +--
 .../apache/sis/geometries/curve/ArcByBulge.java    |  4 +--
 .../sis/geometries/curve/ArcByCenterPoint.java     |  2 +-
 .../sis/geometries/curve/CircularString.java       |  2 +-
 .../org/apache/sis/geometries/curve/Conic.java     |  2 +-
 .../org/apache/sis/geometries/curve/Geodesic.java  |  2 +-
 .../apache/sis/geometries/curve/LineString.java    |  2 +-
 .../apache/sis/geometries/curve/LinearRing.java    |  2 +-
 .../org/apache/sis/geometries/curve/Spiral.java    |  2 +-
 .../org/apache/sis/geometries/index/KdTree.java    |  6 ++--
 .../internal/shared/AbstractGeometry.java          |  6 ++--
 .../internal/shared/AbstractOrientedGeometry.java  |  4 +--
 .../internal/shared/ArrayDataPoints.java           | 12 +++----
 .../internal/shared/DefaultArcByBulge.java         |  2 +-
 .../internal/shared/DefaultCompoundCurve.java      |  2 +-
 .../internal/shared/DefaultDataPoints.java         |  2 +-
 .../geometries/internal/shared/DefaultPoint.java   |  8 ++---
 .../internal/shared/DefaultReversedCurve.java      |  2 +-
 .../apache/sis/geometries/mesh/MeshPrimitive.java  | 22 ++++++------
 .../geometries/mesh/MeshPrimitiveComparator.java   |  4 +--
 .../sis/geometries/mesh/MeshPrimitiveIndexes.java  | 10 +++---
 .../sis/geometries/mesh/MeshPrimitiveVisitor.java  |  6 ++--
 .../sis/geometries/operation/ComputeAttribute.java | 10 +++---
 .../apache/sis/geometries/operation/Contains.java  | 10 +++---
 .../apache/sis/geometries/operation/Distance.java  |  6 ++--
 .../geometries/operation/GeometryProcessor.java    | 10 +++---
 .../sis/geometries/operation/Intersection.java     |  8 ++---
 .../geometries/operation/SutherlandHodgman.java    |  8 ++---
 .../org/apache/sis/geometries/operation/To3D.java  | 10 +++---
 .../sis/geometries/operation/ToPrimitive.java      |  4 +--
 .../apache/sis/geometries/operation/Transform.java | 10 +++---
 .../operation/simplify/greedyinsert/Edge.java      |  4 +--
 .../simplify/greedyinsert/TINBuilder.java          |  8 ++---
 .../simplify/greedyinsert/TinDistance.java         |  6 ++--
 .../operation/simplify/greedyinsert/WTriangle.java |  4 +--
 .../operation/spatialanalysis2d/ISOBand.java       |  2 +-
 .../operation/spatialanalysis2d/ISOLine.java       | 12 +++----
 .../operation/triangulate/EarClipping.java         | 12 +++----
 .../operation/triangulate/delaunay/Delaunay.java   | 12 +++----
 .../triangulate/delaunay/OrientedEdge.java         |  4 +--
 .../triangulate/delaunay/OrientedTriangle.java     |  2 +-
 .../geometries/polyhedron/AbstractPolyhedron.java  |  8 ++---
 .../sis/geometries/polyhedron/Dodecahedron.java    |  8 ++---
 .../sis/geometries/polyhedron/Hexahedron.java      |  8 ++---
 .../sis/geometries/polyhedron/Icosahedron.java     |  8 ++---
 .../sis/geometries/polyhedron/Octahedron.java      |  8 ++---
 .../polyhedron/RhombicTriacontahedron.java         |  8 ++---
 .../sis/geometries/polyhedron/Tetrahedron.java     |  8 ++---
 .../polyhedron/TruncatedIcosahedron.java           |  8 ++---
 .../sis/geometries/polynomials/FunctionArc.java    |  2 +-
 .../sis/geometries/spherical/GreatCircleArc.java   |  4 +--
 .../spherical/SphericalConvexPolygon.java          |  6 ++--
 .../geometries/spherical/SphericalTriangle.java    |  4 +--
 .../sis/geometries/splines/PolynomialSpline.java   |  2 +-
 .../main/org/apache/sis/gml/AbstractGMLWriter.java |  2 +-
 .../main/org/apache/sis/gml/GML3Reader.java        |  4 +--
 .../main/org/apache/sis/gml/GML3Writer.java        |  2 +-
 .../org/apache/sis/gml/PositionListBuilder.java    |  8 ++---
 .../{geometries/math => maths}/AbstractAffine.java |  2 +-
 .../{geometries/math => maths}/AbstractArray.java  |  2 +-
 .../{geometries/math => maths}/AbstractCursor.java |  2 +-
 .../{geometries/math => maths}/AbstractMatrix.java |  2 +-
 .../math => maths}/AbstractSimilarity.java         |  2 +-
 .../{geometries/math => maths}/AbstractTuple.java  |  2 +-
 .../sis/{geometries/math => maths}/Affine.java     |  2 +-
 .../sis/{geometries/math => maths}/Affine1D.java   |  2 +-
 .../sis/{geometries/math => maths}/Affine2D.java   |  2 +-
 .../sis/{geometries/math => maths}/Affine3D.java   |  2 +-
 .../sis/{geometries/math => maths}/Affine4D.java   |  2 +-
 .../sis/{geometries/math => maths}/AffineND.java   |  2 +-
 .../sis/{geometries/math => maths}/Affines.java    |  2 +-
 .../sis/{geometries/math => maths}/Array.java      |  2 +-
 .../math => maths}/ArrayConcatenated.java          |  2 +-
 .../{geometries/math => maths}/ArrayFactory.java   |  2 +-
 .../math => maths}/ArrayFactoryFFM.java            | 20 +++++------
 .../math => maths}/ArrayFactoryHAT.java            |  2 +-
 .../math => maths}/ArrayFactoryJava.java           | 20 +++++------
 .../math => maths}/ArraySpliterator.java           |  2 +-
 .../math => maths}/ArrayUnmodifiable.java          |  2 +-
 .../sis/{geometries/math => maths}/Cursor.java     |  2 +-
 .../math => maths}/CursorUnmodifiable.java         |  2 +-
 .../sis/{geometries/math => maths}/DataType.java   |  2 +-
 .../{geometries/math => maths}/EasingMethod.java   |  2 +-
 .../sis/{geometries/math => maths}/Maths.java      |  4 +--
 .../sis/{geometries/math => maths}/Matrices.java   |  2 +-
 .../sis/{geometries/math => maths}/Matrix.java     |  2 +-
 .../sis/{geometries/math => maths}/Matrix2D.java   |  2 +-
 .../sis/{geometries/math => maths}/Matrix3D.java   |  2 +-
 .../sis/{geometries/math => maths}/Matrix4D.java   |  4 +--
 .../sis/{geometries/math => maths}/MatrixND.java   |  2 +-
 .../sis/{geometries/math => maths}/NDArray.java    |  2 +-
 .../sis/{geometries/math => maths}/NDArrays.java   |  2 +-
 .../sis/{geometries/math => maths}/Quaternion.java |  4 +--
 .../{geometries/math => maths}/Quaternions.java    |  2 +-
 .../sis/{geometries/math => maths}/ReadOnly.java   | 42 +++++++++++-----------
 .../{geometries/math => maths}/SampleSystem.java   |  2 +-
 .../sis/{geometries/math => maths}/Similarity.java |  2 +-
 .../{geometries/math => maths}/Similarity3D.java   |  2 +-
 .../{geometries/math => maths}/SimilarityND.java   |  2 +-
 .../math => maths}/SimplifiedTransform.java        |  2 +-
 .../sis/{geometries/math => maths}/Transform.java  |  4 +--
 .../{geometries/math => maths}/Transform1D.java    |  2 +-
 .../sis/{geometries/math => maths}/Tuple.java      |  2 +-
 .../math => maths}/TupleUnmodifiable.java          |  2 +-
 .../sis/{geometries/math => maths}/Vector.java     |  2 +-
 .../sis/{geometries/math => maths}/Vector1D.java   |  2 +-
 .../sis/{geometries/math => maths}/Vector2D.java   |  2 +-
 .../sis/{geometries/math => maths}/Vector3D.java   |  2 +-
 .../sis/{geometries/math => maths}/Vector4D.java   |  2 +-
 .../sis/{geometries/math => maths}/VectorND.java   |  2 +-
 .../sis/{geometries/math => maths}/Vectors.java    |  2 +-
 .../{geometries/math => maths}/package-info.java   |  2 +-
 .../org/apache/sis/scene/AnimationSampler.java     |  2 +-
 .../main/org/apache/sis/scene/MorphTarget.java     |  6 ++--
 .../main/org/apache/sis/scene/SceneNode.java       |  4 +--
 .../main/org/apache/sis/scene/SceneUtilities.java  |  4 +--
 .../main/org/apache/sis/scene/Skin.java            |  2 +-
 .../main/org/apache/sis/scene/physics/Motion.java  |  4 +--
 .../org/apache/sis/geometries/PreparedTINTest.java |  2 +-
 .../org/apache/sis/geometries/TriangleTest.java    |  4 +--
 .../sis/geometries/adapter/ShapeAdapterTest.java   |  4 +--
 .../sis/geometries/adapter/ShapeConverterTest.java |  4 +--
 .../internal/shared/ArraySequenceTest.java         | 10 +++---
 .../sis/geometries/mesh/PrimitiveIndexesTest.java  |  4 +--
 .../apache/sis/geometries/mesh/PrimitiveTest.java  |  2 +-
 .../sis/geometries/mesh/PrimitiveVisitorTest.java  |  6 ++--
 .../sis/geometries/operation/DistanceTest.java     |  2 +-
 .../sis/geometries/operation/IntersectionTest.java |  6 ++--
 .../operation/ShewchukPredicatesTest.java          |  2 +-
 .../geometries/operation/SutherlandHogmanTest.java |  8 ++---
 .../apache/sis/geometries/operation/To3DTest.java  |  4 +--
 .../sis/geometries/operation/ToPrimitiveTest.java  |  4 +--
 .../sis/geometries/operation/TransformTest.java    |  2 +-
 .../operation/spatialanalysis2d/IsoBandTest.java   |  4 +--
 .../triangulate/delaunay/DelaunayTest.java         |  4 +--
 .../triangulate/delaunay/OrientedEdgeTest.java     |  4 +--
 .../geometries/spherical/GreatCircleArcTest.java   |  4 +--
 .../spherical/SphericalConvexPolygonTest.java      |  8 ++---
 .../spherical/SphericalTriangleTest.java           |  4 +--
 .../test/org/apache/sis/gml/GML2ReaderTest.java    |  4 +--
 .../test/org/apache/sis/gml/GML2WriterTest.java    |  4 +--
 .../test/org/apache/sis/gml/GML3ReaderTest.java    |  4 +--
 .../test/org/apache/sis/gml/GML3WriterTest.java    |  8 ++---
 .../test/org/apache/sis/gml/GMLWriterTest.java     |  4 +--
 .../apache/sis/gml/JAXBGeometryAdapterTest.java    |  4 +--
 .../math => maths}/AbstractArrayTest.java          |  2 +-
 .../math => maths}/AbstractTupleTest.java          |  2 +-
 .../math => maths}/AbstractVectorTest.java         |  2 +-
 .../math => maths}/ArrayConcatenatedTest.java      |  2 +-
 .../{geometries/math => maths}/ArrayNbTest.java    |  2 +-
 .../{geometries/math => maths}/ArrayNdTest.java    |  2 +-
 .../{geometries/math => maths}/ArrayNfTest.java    |  2 +-
 .../{geometries/math => maths}/ArrayNiTest.java    |  2 +-
 .../{geometries/math => maths}/ArrayNlTest.java    |  2 +-
 .../{geometries/math => maths}/ArrayNsTest.java    |  2 +-
 .../{geometries/math => maths}/ArrayNubTest.java   |  2 +-
 .../{geometries/math => maths}/ArrayNuiTest.java   |  2 +-
 .../{geometries/math => maths}/ArrayNusTest.java   |  2 +-
 .../math => maths}/EasingMethodTest.java           |  2 +-
 .../sis/{geometries/math => maths}/MathsTest.java  |  2 +-
 .../{geometries/math => maths}/NDArraysTest.java   |  2 +-
 .../{geometries/math => maths}/QuaternionTest.java |  2 +-
 .../{geometries/math => maths}/Vector3DTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXbTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXdTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXfTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXiTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXlTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXsTest.java   |  2 +-
 .../{geometries/math => maths}/VectorXubTest.java  |  2 +-
 .../{geometries/math => maths}/VectorXuiTest.java  |  2 +-
 .../{geometries/math => maths}/VectorXusTest.java  |  2 +-
 .../{geometries/math => maths}/VectorsTest.java    |  2 +-
 .../org/apache/sis/scene/SceneUtilitiesTest.java   |  4 +--
 .../org/apache/sis/referencing/dggs/s2/S2Zone.java |  2 +-
 .../dggs/DiscreteGlobalGridCoverageProcessor.java  | 10 +++---
 .../storage/dggs/DiscreteGlobalGridSystems.java    |  4 +--
 .../shared/ArrayDiscreteGlobalGridCoverage.java    | 10 +++---
 .../rs/internal/shared/ArrayCodedCoverage.java     | 10 +++---
 .../rs/internal/shared/GridAsCodedResource.java    |  8 ++---
 .../sis/referencing/dggs/AbstractDggrsTest.java    |  8 ++---
 205 files changed, 466 insertions(+), 466 deletions(-)

diff --git a/incubator/src/org.apache.sis.geometry/main/module-info.java b/incubator/src/org.apache.sis.geometry/main/module-info.java
index 4c7ce455f6..d83edffcb0 100644
--- a/incubator/src/org.apache.sis.geometry/main/module-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/module-info.java
@@ -33,7 +33,7 @@ module org.apache.sis.geometry {
     exports org.apache.sis.geometries;
     exports org.apache.sis.geometries.curve;
     exports org.apache.sis.geometries.operation;
-    exports org.apache.sis.geometries.math;
+    exports org.apache.sis.maths;
     exports org.apache.sis.scene;
     exports org.apache.sis.scene.light;
     exports org.apache.sis.scene.material;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
index 7cfc34e7e5..3cc50c33ba 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
@@ -21,8 +21,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.DataType;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.DataType;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
index 37e858d113..1c5dbe6bbc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
@@ -21,8 +21,8 @@ import java.util.Map;
 import org.opengis.coordinate.MismatchedDimensionException;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.geometry.GeneralEnvelope;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
index d8886341a1..91c614d76f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
@@ -19,11 +19,11 @@ package org.apache.sis.geometries;
 import org.apache.sis.geometries.curve.LineString;
 import java.util.List;
 import javax.measure.quantity.Length;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
index f746b022d4..01969685e0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
@@ -18,11 +18,11 @@ package org.apache.sis.geometries;
 
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java
index 14b3b34c7f..6f271a1a1c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java
@@ -47,14 +47,14 @@ import org.opengis.referencing.datum.EngineeringDatum;
 import org.opengis.referencing.operation.MathTransform;
 import org.opengis.util.FactoryException;
 import org.opengis.util.InternationalString;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vector3D;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.Matrix3D;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vector3D;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Matrix3D;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.geometry.wrapper.jts.JTS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
index e76715e924..662e070b67 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
@@ -30,10 +30,10 @@ import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.curve.Circle;
 import org.apache.sis.geometries.curve.CircularString;
 import org.apache.sis.geometries.curve.Geodesic;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.internal.shared.DefaultArcByBulge;
 import org.apache.sis.geometries.internal.shared.DefaultArcByCenterPoint;
@@ -60,7 +60,7 @@ import org.apache.sis.geometries.internal.shared.DefaultReversedCurve;
 import org.apache.sis.geometries.internal.shared.DefaultReversedSurface;
 import org.apache.sis.geometries.internal.shared.DefaultTriangle;
 import org.apache.sis.geometries.internal.shared.DefaultTriangulatedSurface;
-import org.apache.sis.geometries.math.DataType;
+import org.apache.sis.maths.DataType;
 import org.apache.sis.geometries.curve.Clothoid;
 import org.apache.sis.geometry.wrapper.Capability;
 import org.apache.sis.geometry.wrapper.Dimensions;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
index 0e09ef781c..f786ab4013 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries;
 
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
index 13bf30c526..5459a53f4a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java
index 222c4fbe3e..2325c42070 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java
@@ -19,9 +19,9 @@ package org.apache.sis.geometries;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.geometry.GeneralEnvelope;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OrientedGeometry.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OrientedGeometry.java
index 7cfa3cae0d..1515128428 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OrientedGeometry.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OrientedGeometry.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries;
 
 import org.opengis.geometry.Envelope;
-import org.apache.sis.geometries.math.Similarity;
+import org.apache.sis.maths.Similarity;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
index 5e1c3d53d6..0acd43aa20 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
@@ -22,8 +22,8 @@ import org.opengis.geometry.DirectPosition;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
index 856943ae5b..246c577dfc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
@@ -31,10 +31,10 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vector2D;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.geometry.Envelopes;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.referencing.CRS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
index f57e14f7b8..7053cd2077 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
@@ -20,9 +20,9 @@ import java.util.Objects;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java
index 14f08876f7..fa6280b90f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java
@@ -23,9 +23,9 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.util.ArgumentChecks;
 
 // Specific to the geoapi-4.0 branch:
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java
index aec63bdf93..58744465f0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java
@@ -21,7 +21,7 @@ import javax.measure.quantity.Length;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
index 2ea5c5b47c..445e8b7d12 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries;
 
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
index 0e022e9033..a1d24855cb 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
@@ -24,12 +24,12 @@ import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vector2D;
-import org.apache.sis.geometries.math.Vector3D;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.Vector3D;
+import org.apache.sis.maths.Vectors;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
index b24a6fd90e..f8247dddff 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
@@ -33,7 +33,7 @@ import org.opengis.referencing.operation.TransformException;
 import org.opengis.filter.SpatialOperatorName;
 import org.opengis.filter.DistanceOperatorName;
 import org.apache.sis.filter.sqlmm.SQLMM;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.wrapper.Geometries;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
index 5ec536c552..3a9282399e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
@@ -24,14 +24,14 @@ import java.util.List;
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.CoordinateSequence;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.locationtech.jts.geom.CoordinateXY;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
index 16381d6fb3..0b7a4d1eef 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
@@ -26,7 +26,7 @@ import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.resources.Errors;
 import org.apache.sis.geometries.DataPoints;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
index 9aafdbf34e..9a3f7d0209 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
@@ -28,10 +28,10 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.geometry.wrapper.j2d.EmptyShape;
 import org.apache.sis.referencing.internal.shared.AbstractShape;
 import org.apache.sis.referencing.internal.shared.IntervalRectangle;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
index ecb7bd7e0c..19af5f80a4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
@@ -29,9 +29,9 @@ import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Surface;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.internal.shared.AbstractShape;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/cs/GeometricCoordinateSystem.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/cs/GeometricCoordinateSystem.java
index b3c821bff0..de477134a0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/cs/GeometricCoordinateSystem.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/cs/GeometricCoordinateSystem.java
@@ -21,7 +21,7 @@ import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
 import org.apache.sis.geometries.Bearing;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
index 51751b3818..bc91d8cb80 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.curve;
 
 import java.util.List;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
index 2c8f980769..c6e16f79f8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
@@ -21,8 +21,8 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
index 1f37ad75af..7d95b40a68 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
@@ -22,7 +22,7 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
index a9816f5d98..3f0cff9b13 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
@@ -21,7 +21,7 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
index b64094afe4..695e874a3d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
@@ -19,7 +19,7 @@ package org.apache.sis.geometries.curve;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
index 4924208eba..f60d2151b6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
@@ -24,7 +24,7 @@ import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
index 245be71cb4..643e752690 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
@@ -27,7 +27,7 @@ import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java
index 2adb8486f9..ac1f72cf71 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries.curve;
 
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
index ae391e59b7..9eef4c8fb3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
@@ -21,7 +21,7 @@ import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.polynomials.RealFunction;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/index/KdTree.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/index/KdTree.java
index 41b5072882..9d9df579e3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/index/KdTree.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/index/KdTree.java
@@ -22,9 +22,9 @@ import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map.Entry;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
index 8ce0480fd7..fd4c828b03 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
@@ -19,9 +19,9 @@ package org.apache.sis.geometries.internal.shared;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.DataPoints;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
index 67c6b422d1..371e8062cd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
@@ -18,8 +18,8 @@ package org.apache.sis.geometries.internal.shared;
 
 import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.OrientedGeometry;
-import org.apache.sis.geometries.math.Similarity;
-import org.apache.sis.geometries.math.Similarity3D;
+import org.apache.sis.maths.Similarity;
+import org.apache.sis.maths.Similarity3D;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
index 77cabddb79..d5c3759271 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
@@ -25,12 +25,12 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
index 4a26fb49eb..7c6561c17b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries.internal.shared;
 
 import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.curve.ArcByBulge;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
index 1a743fe4ec..5ce7475978 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
@@ -21,7 +21,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.CompoundCurve;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
index 1fe84eb74d..df6b6b5a85 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
@@ -21,7 +21,7 @@ import java.util.List;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
index 6e1d19b8ae..2964573057 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
@@ -20,10 +20,10 @@ import java.util.Objects;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
index bbce828cff..61f9be6797 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
@@ -25,7 +25,7 @@ import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Primitive;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
index 7b6cf5abbd..77b48bb4d2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
@@ -43,17 +43,17 @@ import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vector1D;
-import org.apache.sis.geometries.math.Vector3D;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vector1D;
+import org.apache.sis.maths.Vector3D;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.collection.Containers;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
index 63bac5fea6..87e60ec745 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
@@ -26,8 +26,8 @@ import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java
index 6fed1d240b..afac329553 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java
@@ -25,11 +25,11 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector1D;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector1D;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
index cf858dc658..ada79d1044 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
@@ -22,9 +22,9 @@ import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java
index 788767f6ba..5cd998981d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java
@@ -22,11 +22,11 @@ import java.util.function.Function;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
index 75eb107a0f..b40c9e18d6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
@@ -20,11 +20,11 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java
index 0a88d20f0f..295af4df76 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java
@@ -18,9 +18,9 @@ package org.apache.sis.geometries.operation;
 
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.operation.ProcessorUtils;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vectors;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
index d870ec2997..f1e70bdfda 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
@@ -35,11 +35,11 @@ import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
index a1523cc035..fc3f64990d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
@@ -35,10 +35,10 @@ import org.apache.sis.geometries.internal.shared.DefaultDataPoints;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/SutherlandHodgman.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/SutherlandHodgman.java
index 523465e8d2..b74e8f8c1a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/SutherlandHodgman.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/SutherlandHodgman.java
@@ -18,10 +18,10 @@ package org.apache.sis.geometries.operation;
 
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
index 481c0f225a..8279f9f03a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
@@ -25,11 +25,11 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.referencing.CRS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
index 1698f9dcb2..ae21088fbe 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
@@ -27,8 +27,8 @@ import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
index b8b76b6af8..64e46921a0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
@@ -26,11 +26,11 @@ import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/Edge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/Edge.java
index b140dc7cea..7bed2e0b97 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/Edge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/Edge.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.geometries.operation.simplify.greedyinsert;
 
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
index c5db4f01f3..5ba5f4fe77 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
@@ -32,10 +32,10 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.util.ArgumentChecks;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
index 9593102321..e249a8a3ed 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
@@ -18,9 +18,9 @@ package org.apache.sis.geometries.operation.simplify.greedyinsert;
 
 import java.util.function.BiFunction;
 import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
index cba0e3d6a5..cde8a6ca0a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
@@ -26,8 +26,8 @@ import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
index 8a97cf1701..f6bfe0d4b8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
@@ -32,7 +32,7 @@ import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
 import static org.apache.sis.geometries.operation.spatialanalysis2d.ISOLine.interpolateToArray;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.measure.NumberRange;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.geometries.DataPoints;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
index ddc33a15b2..0a61b6bd0d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
@@ -25,12 +25,12 @@ import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector3D;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector3D;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.geometries.DataPoints;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
index 6934174af7..e37cc46cd9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
@@ -24,12 +24,12 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector2D;
-import org.apache.sis.geometries.math.Array;
-import static org.apache.sis.geometries.math.Vectors.*;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.Array;
+import static org.apache.sis.maths.Vectors.*;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.util.ArraysExt;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java
index 2cdc790c5f..1d4b1df675 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java
@@ -27,12 +27,12 @@ import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.index.KdTree;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.util.ArgumentChecks;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
index e9b54e95c5..4cf6696409 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
@@ -24,8 +24,8 @@ import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
index 77fad3f9ea..3c15a74cc0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
@@ -28,7 +28,7 @@ import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.operation.OperationException;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.referencing.internal.shared.ShapeUtilities;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
index ab9c280b51..59a4ac7509 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
@@ -26,10 +26,10 @@ import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Polyhedron;
 import org.apache.sis.geometries.Sphere;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.ReadOnly;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.ReadOnly;
+import org.apache.sis.maths.Vector3D;
 import org.apache.sis.geometries.spherical.SphericalConvexPolygon;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java
index d52098382e..e66ab9c530 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java
index 016bec722c..1aa79d8af0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java
index db157477cf..8e95911023 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java
index 98e2eb394c..9ab1181a74 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java
index 56c4112f22..3425a17fe1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java
index a8d5496aea..fd782c7b03 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java
index 23ec3c86ba..f6fa4b2aab 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.polyhedron;
 
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ArrayFactoryJava;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ArrayFactoryJava;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java
index 50d1def263..d2fe25432e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries.polynomials;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.measure.Range;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java
index d23ab74100..b6b61493a2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java
@@ -17,8 +17,8 @@
 package org.apache.sis.geometries.spherical;
 
 import org.apache.sis.geometries.Sphere;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java
index 68bdc71ee7..59327c55b3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java
@@ -17,9 +17,9 @@
 package org.apache.sis.geometries.spherical;
 
 import org.apache.sis.geometries.Sphere;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.ReadOnly;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.ReadOnly;
+import org.apache.sis.maths.Vector3D;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java
index b78ef921c6..2d9fce0b98 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java
@@ -17,8 +17,8 @@
 package org.apache.sis.geometries.spherical;
 
 import org.apache.sis.geometries.Sphere;
-import org.apache.sis.geometries.math.Maths;
-import org.apache.sis.geometries.math.ReadOnly;
+import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.ReadOnly;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java
index bb9f362d60..829abe9227 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries.splines;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
index c0a29bc777..b815e25974 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
@@ -31,7 +31,7 @@ import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Surface;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
index f2cec5ab79..bee63993f8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
@@ -44,8 +44,8 @@ import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.measure.Units;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
index 06a440d4ec..09f7e70c9e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
@@ -46,7 +46,7 @@ import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.curve.CircularString;
-import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
 import org.apache.sis.geometries.DataPoints;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
index 89f5207269..0c20a59bbb 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
@@ -18,9 +18,9 @@ package org.apache.sis.gml;
 
 import java.util.Arrays;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
 
@@ -37,7 +37,7 @@ import org.apache.sis.geometries.DataPoints;
  * ordinates, which is the layout that {@link NDArrays#of(SampleSystem, double...)} expects. The
  * tuple width is <em>not</em> known in advance: it is fixed by the first tuple appended and then
  * enforced for every subsequent one, because an Apache SIS
- * {@link org.apache.sis.geometries.math.Array} is strictly rectangular — there is no per-tuple
+ * {@link org.apache.sis.maths.Array} is strictly rectangular — there is no per-tuple
  * width, and no convention by which a missing ordinate could be marked absent. A GML coordinate
  * list mixing 2-D and 3-D tuples is therefore rejected rather than padded: padding with {@code 0}
  * would invent coordinates, and padding with {@link Double#NaN} would silently poison every
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractAffine.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractAffine.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractAffine.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractAffine.java
index 3fe111de6c..0cd98ebd55 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractAffine.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractAffine.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractArray.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractArray.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractArray.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractArray.java
index 88deb437b0..3bf1f8baaa 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractArray.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractArray.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractCursor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractCursor.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractCursor.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractCursor.java
index 38212f482d..a705817bea 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractCursor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractCursor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractMatrix.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractMatrix.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractMatrix.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractMatrix.java
index b3082ff6b3..43d4f0db1e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractMatrix.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractMatrix.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractSimilarity.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractSimilarity.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractSimilarity.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractSimilarity.java
index 2321d685fe..7bd34532c2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractSimilarity.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractSimilarity.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractTuple.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractTuple.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractTuple.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractTuple.java
index 79de6d45b9..cbec99a436 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AbstractTuple.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AbstractTuple.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine.java
index e7e9ec2cdb..2be5801505 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine1D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine1D.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine1D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine1D.java
index 5f60e5c3ce..a85a40a6b7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine1D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine1D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine2D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine2D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine2D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine2D.java
index a6f6297535..9c21c9446c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine2D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine2D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine3D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine3D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine3D.java
index 83b63d322d..39c414b8ea 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine3D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine4D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine4D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine4D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine4D.java
index 509226f8d7..7dbe8f8005 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affine4D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affine4D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AffineND.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AffineND.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AffineND.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AffineND.java
index 921b9a469b..e1725f4c9e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/AffineND.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/AffineND.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affines.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affines.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affines.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affines.java
index 771447ae6c..3aba66a41f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Affines.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Affines.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Array.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Array.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Array.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Array.java
index 75a77dd290..add97bd378 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Array.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Array.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayConcatenated.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayConcatenated.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayConcatenated.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayConcatenated.java
index 24e4e20957..d6dd530451 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayConcatenated.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayConcatenated.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactory.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactory.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactory.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactory.java
index d1e54ae5f0..cee1b99a82 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactory.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.lang.foreign.SegmentAllocator;
 import java.util.Collection;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryFFM.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryFFM.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryFFM.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryFFM.java
index a29e54c160..4943d0a1b9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryFFM.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryFFM.java
@@ -14,20 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.lang.foreign.MemorySegment;
 import java.lang.foreign.SegmentAllocator;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import static org.apache.sis.geometries.math.DataType.BYTE;
-import static org.apache.sis.geometries.math.DataType.DOUBLE;
-import static org.apache.sis.geometries.math.DataType.FLOAT;
-import static org.apache.sis.geometries.math.DataType.INT;
-import static org.apache.sis.geometries.math.DataType.LONG;
-import static org.apache.sis.geometries.math.DataType.SHORT;
-import static org.apache.sis.geometries.math.DataType.UBYTE;
-import static org.apache.sis.geometries.math.DataType.UINT;
-import static org.apache.sis.geometries.math.DataType.USHORT;
+import static org.apache.sis.maths.DataType.BYTE;
+import static org.apache.sis.maths.DataType.DOUBLE;
+import static org.apache.sis.maths.DataType.FLOAT;
+import static org.apache.sis.maths.DataType.INT;
+import static org.apache.sis.maths.DataType.LONG;
+import static org.apache.sis.maths.DataType.SHORT;
+import static org.apache.sis.maths.DataType.UBYTE;
+import static org.apache.sis.maths.DataType.UINT;
+import static org.apache.sis.maths.DataType.USHORT;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryHAT.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryHAT.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryHAT.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryHAT.java
index 7c948a7e21..782ade3ff7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryHAT.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryHAT.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryJava.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryJava.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryJava.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryJava.java
index 812a2a683f..949a25a989 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayFactoryJava.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayFactoryJava.java
@@ -14,20 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 import java.util.List;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import static org.apache.sis.geometries.math.DataType.BYTE;
-import static org.apache.sis.geometries.math.DataType.DOUBLE;
-import static org.apache.sis.geometries.math.DataType.FLOAT;
-import static org.apache.sis.geometries.math.DataType.INT;
-import static org.apache.sis.geometries.math.DataType.LONG;
-import static org.apache.sis.geometries.math.DataType.SHORT;
-import static org.apache.sis.geometries.math.DataType.UBYTE;
-import static org.apache.sis.geometries.math.DataType.UINT;
-import static org.apache.sis.geometries.math.DataType.USHORT;
+import static org.apache.sis.maths.DataType.BYTE;
+import static org.apache.sis.maths.DataType.DOUBLE;
+import static org.apache.sis.maths.DataType.FLOAT;
+import static org.apache.sis.maths.DataType.INT;
+import static org.apache.sis.maths.DataType.LONG;
+import static org.apache.sis.maths.DataType.SHORT;
+import static org.apache.sis.maths.DataType.UBYTE;
+import static org.apache.sis.maths.DataType.UINT;
+import static org.apache.sis.maths.DataType.USHORT;
 import org.apache.sis.util.ArgumentChecks;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArraySpliterator.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArraySpliterator.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArraySpliterator.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArraySpliterator.java
index e1a1aa3407..ccc79674a5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArraySpliterator.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArraySpliterator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Spliterator;
 import java.util.function.Consumer;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayUnmodifiable.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayUnmodifiable.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayUnmodifiable.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayUnmodifiable.java
index de6e8c5186..5983552c0a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ArrayUnmodifiable.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ArrayUnmodifiable.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.MathTransform;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Cursor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Cursor.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Cursor.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Cursor.java
index 81c24a1b32..e910c6d66a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Cursor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Cursor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/CursorUnmodifiable.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/CursorUnmodifiable.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/CursorUnmodifiable.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/CursorUnmodifiable.java
index f4df8278e3..57420ccbb8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/CursorUnmodifiable.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/CursorUnmodifiable.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.apache.sis.util.ArgumentChecks;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/DataType.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/DataType.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/DataType.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/DataType.java
index ae3ebd0269..4fe373a198 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/DataType.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/DataType.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.awt.image.RasterFormatException;
 import static org.apache.sis.util.internal.shared.Numerics.MAX_INTEGER_CONVERTIBLE_TO_FLOAT;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/EasingMethod.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/EasingMethod.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/EasingMethod.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/EasingMethod.java
index 37b6c65027..0ed92a329b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/EasingMethod.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/EasingMethod.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.function.DoubleUnaryOperator;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Maths.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Maths.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Maths.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Maths.java
index 7ce5508c19..a52bab0d28 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Maths.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Maths.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
-import static org.apache.sis.geometries.math.Vectors.*;
+import static org.apache.sis.maths.Vectors.*;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometries.operation.ShewchukPredicates;
 import org.apache.sis.referencing.operation.matrix.Matrix4;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrices.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrices.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrices.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrices.java
index 0cde178a07..afe95f9bf0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrices.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrices.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix.java
index fb2ee70892..7ab8ea138d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix2D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix2D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix2D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix2D.java
index 45bb64e11a..d0454325ef 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix2D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix2D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.apache.sis.referencing.operation.matrix.Matrix2;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix3D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix3D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix3D.java
index 4a748b210a..96aa3db985 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix3D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.apache.sis.referencing.operation.matrix.Matrix3;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix4D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix4D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix4D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix4D.java
index 20c7155543..9d5ae31c3a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Matrix4D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Matrix4D.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
-import static org.apache.sis.geometries.math.Matrix.ROW_ORDER;
+import static org.apache.sis.maths.Matrix.ROW_ORDER;
 import org.apache.sis.referencing.operation.matrix.Matrix4;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/MatrixND.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/MatrixND.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/MatrixND.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/MatrixND.java
index a76b423d3b..47342c0cd0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/MatrixND.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/MatrixND.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/NDArray.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/NDArray.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/NDArray.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/NDArray.java
index 665c3ff51f..37e8ef620f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/NDArray.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/NDArray.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.stream.Stream;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/NDArrays.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/NDArrays.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/NDArrays.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/NDArrays.java
index e0c488f628..da108e0303 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/NDArrays.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/NDArrays.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.AbstractList;
 import java.util.ArrayList;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Quaternion.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Quaternion.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Quaternion.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Quaternion.java
index e1a6378e97..1e8c88398b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Quaternion.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Quaternion.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
-import static org.apache.sis.geometries.math.Matrix.ROW_ORDER;
+import static org.apache.sis.maths.Matrix.ROW_ORDER;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Quaternions.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Quaternions.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Quaternions.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Quaternions.java
index 21420ae1a9..8370c79134 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Quaternions.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Quaternions.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ReadOnly.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ReadOnly.java
similarity index 90%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ReadOnly.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ReadOnly.java
index 35fcfe87a7..046720ad97 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/ReadOnly.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/ReadOnly.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.referencing.CRS;
@@ -185,8 +185,8 @@ public final class ReadOnly {
          *
          * @return tuple copy.
          */
-        default org.apache.sis.geometries.math.Tuple<?> copy() {
-            org.apache.sis.geometries.math.Vector<?> tuple = Vectors.create(getSampleSystem(), getDataType());
+        default org.apache.sis.maths.Tuple<?> copy() {
+            org.apache.sis.maths.Vector<?> tuple = Vectors.create(getSampleSystem(), getDataType());
             tuple.set(this);
             return tuple;
         }
@@ -286,12 +286,12 @@ public final class ReadOnly {
          * @param other
          * @return cross product result
          */
-        default org.apache.sis.geometries.math.Vector<?> cross(ReadOnly.Tuple<?> other) {
+        default org.apache.sis.maths.Vector<?> cross(ReadOnly.Tuple<?> other) {
             double[] v1 = toArrayDouble();
             double[] v2 = other.toArrayDouble();
             double[] buffer = new double[v1.length];
             Vectors.cross(v1, v2, buffer);
-            org.apache.sis.geometries.math.Vector<?> res = Vectors.createDouble(buffer.length);
+            org.apache.sis.maths.Vector<?> res = Vectors.createDouble(buffer.length);
             res.set(buffer);
             return res;
         }
@@ -317,9 +317,9 @@ public final class ReadOnly {
          * @param d last dimension value
          * @return Vector
          */
-        default org.apache.sis.geometries.math.Vector<?> extend(double d) {
+        default org.apache.sis.maths.Vector<?> extend(double d) {
             final int dim = getDimension();
-            final org.apache.sis.geometries.math.Vector<?> v = Vectors.create(dim+1, getDataType());
+            final org.apache.sis.maths.Vector<?> v = Vectors.create(dim+1, getDataType());
             for (int i = 0; i < dim; i++) {
                 v.set(i, get(i));
             }
@@ -334,8 +334,8 @@ public final class ReadOnly {
          * @param size number of dimension to preserve
          * @return Vector
          */
-        default org.apache.sis.geometries.math.Vector<?> shrink(int size) {
-            final org.apache.sis.geometries.math.Vector<?> v = Vectors.create(size, getDataType());
+        default org.apache.sis.maths.Vector<?> shrink(int size) {
+            final org.apache.sis.maths.Vector<?> v = Vectors.create(size, getDataType());
             for (int i = 0; i < size; i++) {
                 v.set(i, get(i));
             }
@@ -343,7 +343,7 @@ public final class ReadOnly {
         }
 
         @Override
-        org.apache.sis.geometries.math.Vector<?> copy();
+        org.apache.sis.maths.Vector<?> copy();
 
     }
 
@@ -383,14 +383,14 @@ public final class ReadOnly {
          *
          * @return matrix
          */
-        org.apache.sis.geometries.math.Matrix<?> toMatrix();
+        org.apache.sis.maths.Matrix<?> toMatrix();
 
         /**
          * Create a copy of this Affine.
          *
          * @return copy
          */
-        org.apache.sis.geometries.math.Affine<?> copy();
+        org.apache.sis.maths.Affine<?> copy();
 
     }
 
@@ -425,7 +425,7 @@ public final class ReadOnly {
          * @return A(i0:i1,j0:j1)
          * @exception ArrayIndexOutOfBoundsException Submatrix indices
          */
-        org.apache.sis.geometries.math.Matrix<?> getRange(int i0, int i1, int j0, int j1);
+        org.apache.sis.maths.Matrix<?> getRange(int i0, int i1, int j0, int j1);
 
         /**
          * Get a submatrix.
@@ -435,7 +435,7 @@ public final class ReadOnly {
          * @return A(r(:),c(:))
          * @exception ArrayIndexOutOfBoundsException Submatrix indices
          */
-        org.apache.sis.geometries.math.Matrix<?> getRange(int[] r, int[] c);
+        org.apache.sis.maths.Matrix<?> getRange(int[] r, int[] c);
 
         /**
          * Get a submatrix.
@@ -446,7 +446,7 @@ public final class ReadOnly {
          * @return A(i0:i1,c(:))
          * @exception ArrayIndexOutOfBoundsException Submatrix indices
          */
-        org.apache.sis.geometries.math.Matrix<?> getRange(int i0, int i1, int[] c);
+        org.apache.sis.maths.Matrix<?> getRange(int i0, int i1, int[] c);
 
         /**
          * Get a submatrix.
@@ -457,7 +457,7 @@ public final class ReadOnly {
          * @return A(r(:),j0:j1)
          * @exception ArrayIndexOutOfBoundsException Submatrix indices
          */
-        org.apache.sis.geometries.math.Matrix<?> getRange(int[] r, int j0, int j1);
+        org.apache.sis.maths.Matrix<?> getRange(int[] r, int j0, int j1);
 
         /**
          * Matrix as 2D double array.
@@ -491,7 +491,7 @@ public final class ReadOnly {
          */
         float[] toArrayFloat(boolean rowOrder);
 
-        org.apache.sis.geometries.math.Matrix<?> copy();
+        org.apache.sis.maths.Matrix<?> copy();
 
         /**
          * Test if all cells in the matrix equals given value.
@@ -564,7 +564,7 @@ public final class ReadOnly {
          * @param dest tuple, can be null.
          * @return destination tuple.
          */
-        org.apache.sis.geometries.math.Tuple<?> inverseTransform(ReadOnly.Tuple<?> source, org.apache.sis.geometries.math.Tuple<?> dest);
+        org.apache.sis.maths.Tuple<?> inverseTransform(ReadOnly.Tuple<?> source, org.apache.sis.maths.Tuple<?> dest);
 
         /**
          * Create a square matrix of size dimensions+1
@@ -572,21 +572,21 @@ public final class ReadOnly {
          *
          * @return matrix
          */
-        org.apache.sis.geometries.math.Matrix<?> toMatrix();
+        org.apache.sis.maths.Matrix<?> toMatrix();
 
         /**
          * Create and affine transform.
          *
          * @return
          */
-        org.apache.sis.geometries.math.Affine<?> toAffine();
+        org.apache.sis.maths.Affine<?> toAffine();
 
         /**
          * Create a copy of this Similarity.
          *
          * @return copy
          */
-        org.apache.sis.geometries.math.Similarity<?> copy();
+        org.apache.sis.maths.Similarity<?> copy();
 
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SampleSystem.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SampleSystem.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SampleSystem.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SampleSystem.java
index fb89447d00..7c7ed0f87d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SampleSystem.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SampleSystem.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Arrays;
 import java.util.List;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Similarity.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Similarity.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Similarity.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Similarity.java
index b895c00810..6f4b7b1604 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Similarity.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Similarity.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.referencing.operation.MathTransform;
 import org.apache.sis.referencing.operation.transform.MathTransforms;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Similarity3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Similarity3D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Similarity3D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Similarity3D.java
index 70dfe57dbd..c60636b976 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Similarity3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Similarity3D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Objects;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SimilarityND.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SimilarityND.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SimilarityND.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SimilarityND.java
index f9fb7afbe1..f83c82bb4d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SimilarityND.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SimilarityND.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SimplifiedTransform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SimplifiedTransform.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SimplifiedTransform.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SimplifiedTransform.java
index 99ce425c4e..ecbb453390 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/SimplifiedTransform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/SimplifiedTransform.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Transform.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Transform.java
index 5ba1f3f39b..7350520324 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Transform.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
-import static org.apache.sis.geometries.math.DataType.FLOAT;
+import static org.apache.sis.maths.DataType.FLOAT;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform1D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Transform1D.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform1D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Transform1D.java
index 624d3f0ce4..7e8392b6cf 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Transform1D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Transform1D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Tuple.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Tuple.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Tuple.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Tuple.java
index 6a9fd86562..71e76db1eb 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Tuple.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Tuple.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.geometry.DirectPosition;
 import org.opengis.referencing.operation.MathTransform;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/TupleUnmodifiable.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/TupleUnmodifiable.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/TupleUnmodifiable.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/TupleUnmodifiable.java
index 5e7a3ba48b..3ecb8b8aa6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/TupleUnmodifiable.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/TupleUnmodifiable.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.geometry.DirectPosition;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector.java
index af94998c85..db9b41f278 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector1D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector1D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector1D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector1D.java
index 5b3d208842..e1f15e801d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector1D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector1D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector2D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector2D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector2D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector2D.java
index 6c7f1307a6..b8b5eeee6e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector2D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector2D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector3D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector3D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector3D.java
index 4e15b1f316..1f966c951b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector3D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector4D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector4D.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector4D.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector4D.java
index 2a4ce05a28..97ee12a1a3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vector4D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vector4D.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/VectorND.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/VectorND.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/VectorND.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/VectorND.java
index 96438df6c5..1aeb659a87 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/VectorND.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/VectorND.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vectors.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vectors.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vectors.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vectors.java
index 673ba354c9..7edfdb8dfd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/Vectors.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/Vectors.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.coordinate.MismatchedDimensionException;
 import org.opengis.geometry.DirectPosition;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/package-info.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/package-info.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/package-info.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/package-info.java
index 1ad8ccbf24..16be9d22d9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/math/package-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/maths/package-info.java
@@ -19,4 +19,4 @@
  * Code from this package is inspired (and sometimes copied) from the public domain Unlicense-Lib project math package.
  * With authors :Johann Sorel and Bertrand COTE
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/AnimationSampler.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/AnimationSampler.java
index 2fa5b8fd16..b347aa1fd1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/AnimationSampler.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/AnimationSampler.java
@@ -17,7 +17,7 @@
 package org.apache.sis.scene;
 
 import java.util.Objects;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/MorphTarget.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/MorphTarget.java
index f4d742cac2..eee3a5dd66 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/MorphTarget.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/MorphTarget.java
@@ -20,9 +20,9 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Objects;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.SampleSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneNode.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneNode.java
index 4dc67a51e5..7c9199b5e3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneNode.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneNode.java
@@ -30,8 +30,8 @@ import org.opengis.referencing.operation.NoninvertibleTransformException;
 import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.scene.light.Light;
 import org.apache.sis.geometries.Geometries;
-import org.apache.sis.geometries.math.Similarity;
-import org.apache.sis.geometries.math.Similarity3D;
+import org.apache.sis.maths.Similarity;
+import org.apache.sis.maths.Similarity3D;
 import org.apache.sis.scene.physics.Collider;
 import org.apache.sis.scene.physics.Joint;
 import org.apache.sis.scene.physics.Motion;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneUtilities.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneUtilities.java
index fbb9268ea6..415e0c37cb 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneUtilities.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/SceneUtilities.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.scene;
 
-import org.apache.sis.geometries.math.Matrix;
-import org.apache.sis.geometries.math.Similarity3D;
+import org.apache.sis.maths.Matrix;
+import org.apache.sis.maths.Similarity3D;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/Skin.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/Skin.java
index def257bcc6..ea5bdf9e41 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/Skin.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/Skin.java
@@ -18,7 +18,7 @@ package org.apache.sis.scene;
 
 import java.util.List;
 import java.util.Objects;
-import org.apache.sis.geometries.math.Matrix4D;
+import org.apache.sis.maths.Matrix4D;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/physics/Motion.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/physics/Motion.java
index b28dacc82a..5e317cab86 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/physics/Motion.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/physics/Motion.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.scene.physics;
 
-import org.apache.sis.geometries.math.Quaternion;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.Quaternion;
+import org.apache.sis.maths.Vector3D;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java
index a17f1d91bf..23260f1d03 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java
@@ -20,7 +20,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
index d9bc139cc6..5a60b4dba0 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
@@ -17,8 +17,8 @@
 package org.apache.sis.geometries;
 
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CommonCRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
index 90c5dc1a1d..acfd4cf750 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
@@ -24,8 +24,8 @@ import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.geometry.wrapper.j2d.DecimatedShape;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
index 11ae8e65de..b1280bc438 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
@@ -37,8 +37,8 @@ import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector2D;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector2D;
 
 // Test dependencies
 import org.junit.jupiter.api.Test;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java
index 516dac2c99..5c3b924de7 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java
@@ -21,11 +21,11 @@ import java.util.Map;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector2D;
-import org.apache.sis.geometries.math.Vector3D;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.Vector3D;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CommonCRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveIndexesTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveIndexesTest.java
index bf73abe666..121fc7ce39 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveIndexesTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveIndexesTest.java
@@ -21,8 +21,8 @@ import java.util.Arrays;
 import java.util.List;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveIndexes;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveTest.java
index aab87fa870..b1321da879 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveTest.java
@@ -19,7 +19,7 @@ package org.apache.sis.geometries.mesh;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.sis.geometries.Geometries;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.NDArrays;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
index f69ae03c55..e0dabd6f66 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
@@ -27,9 +27,9 @@ import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector3D;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/DistanceTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/DistanceTest.java
index bbc849bda6..a077bcff77 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/DistanceTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/DistanceTest.java
@@ -18,7 +18,7 @@ package org.apache.sis.geometries.operation;
 
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CommonCRS;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/IntersectionTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/IntersectionTest.java
index 8e81449479..cc1502f1a3 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/IntersectionTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/IntersectionTest.java
@@ -17,9 +17,9 @@
 package org.apache.sis.geometries.operation;
 
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.referencing.CommonCRS;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ShewchukPredicatesTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ShewchukPredicatesTest.java
index 33572fa95d..eecc0d90c9 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ShewchukPredicatesTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ShewchukPredicatesTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.operation;
 
-import org.apache.sis.geometries.math.Maths;
+import org.apache.sis.maths.Maths;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/SutherlandHogmanTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/SutherlandHogmanTest.java
index 3630bf791a..a7a121267d 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/SutherlandHogmanTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/SutherlandHogmanTest.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries.operation;
 
 import java.util.List;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector2D;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.Array;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/To3DTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/To3DTest.java
index af04670c15..f8558d72d5 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/To3DTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/To3DTest.java
@@ -20,8 +20,8 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
index 054b42a510..2a8f242ee5 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
@@ -28,8 +28,8 @@ import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CommonCRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/TransformTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/TransformTest.java
index 991f6fbaeb..982cf4c47c 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/TransformTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/TransformTest.java
@@ -22,7 +22,7 @@ import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/spatialanalysis2d/IsoBandTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/spatialanalysis2d/IsoBandTest.java
index edd281cfbd..f380685673 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/spatialanalysis2d/IsoBandTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/spatialanalysis2d/IsoBandTest.java
@@ -26,8 +26,8 @@ import org.locationtech.jts.geom.Polygon;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.NDArrays;
 import static org.apache.sis.geometries.operation.spatialanalysis2d.ISOLine.interpolateToCoord2D;
 import org.apache.sis.measure.NumberRange;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/DelaunayTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/DelaunayTest.java
index 9119dbb54d..57a045d658 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/DelaunayTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/DelaunayTest.java
@@ -19,8 +19,8 @@ package org.apache.sis.geometries.operation.triangulate.delaunay;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveComparator;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CommonCRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdgeTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdgeTest.java
index d3ad9d46f1..af080cf24a 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdgeTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdgeTest.java
@@ -20,8 +20,8 @@ import java.util.Iterator;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CommonCRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java
index 83396fbcbf..d42d5398ab 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java
@@ -17,8 +17,8 @@
 package org.apache.sis.geometries.spherical;
 
 import org.apache.sis.geometries.Sphere;
-import org.apache.sis.geometries.math.ReadOnly;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.ReadOnly;
+import org.apache.sis.maths.Vector3D;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java
index 4aca3ef1f1..08225aeb88 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java
@@ -18,10 +18,10 @@ package org.apache.sis.geometries.spherical;
 
 import java.util.List;
 import org.apache.sis.geometries.Sphere;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vector3D;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java
index ee598cbb8a..8f21efc756 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java
@@ -17,8 +17,8 @@
 package org.apache.sis.geometries.spherical;
 
 import org.apache.sis.geometries.Sphere;
-import org.apache.sis.geometries.math.ReadOnly;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.ReadOnly;
+import org.apache.sis.maths.Vector3D;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
index e348fbd611..6b3bd4c805 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
@@ -32,8 +32,8 @@ import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
index 6e736ad0b5..85da0277bf 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
@@ -26,8 +26,8 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
index 1b3772cad4..6da6a6023c 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
@@ -45,8 +45,8 @@ import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.curve.CircularString;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.measure.Units;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.storage.DataStoreContentException;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
index 903701a1c5..616865c35b 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
@@ -29,10 +29,10 @@ import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.referencing.CRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLWriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLWriterTest.java
index 857ca92d1b..7f2dab5652 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLWriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLWriterTest.java
@@ -21,8 +21,8 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
index d7d80f1ccc..579a996d9d 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
@@ -25,8 +25,8 @@ import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
 
 import jakarta.xml.bind.JAXBContext;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractArrayTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractArrayTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractArrayTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractArrayTest.java
index 6e1a97720b..5fd5d742e7 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractArrayTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractArrayTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.referencing.operation.matrix.Matrices;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractTupleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractTupleTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractTupleTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractTupleTest.java
index 7153f06a55..ecefc98889 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractTupleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractTupleTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractVectorTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractVectorTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractVectorTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractVectorTest.java
index a917dd3c31..4da8e7e576 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/AbstractVectorTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/AbstractVectorTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayConcatenatedTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayConcatenatedTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayConcatenatedTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayConcatenatedTest.java
index 06b26fe288..e679ff52b1 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayConcatenatedTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayConcatenatedTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNbTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNbTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNbTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNbTest.java
index 19f683b67e..bce1ff3354 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNbTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNbTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNdTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNdTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNdTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNdTest.java
index 5f55532899..c989ae4b1c 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNdTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNdTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNfTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNfTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNfTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNfTest.java
index 01d2f4e3d9..c2fbd10d78 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNfTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNfTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNiTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNiTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNiTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNiTest.java
index 8d6fb8c418..1aa88ca212 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNiTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNiTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNlTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNlTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNlTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNlTest.java
index 4eff336bbe..607df155e2 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNlTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNlTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNsTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNsTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNsTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNsTest.java
index cc3eabee37..0e3bd3eda0 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNsTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNubTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNubTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNubTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNubTest.java
index 74fcea1190..67b116fd40 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNubTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNubTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNuiTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNuiTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNuiTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNuiTest.java
index a23253e2f9..a9eca54f3c 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNuiTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNuiTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNusTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNusTest.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNusTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNusTest.java
index 5ed96df658..341a491a92 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/ArrayNusTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/ArrayNusTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/EasingMethodTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/EasingMethodTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/EasingMethodTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/EasingMethodTest.java
index dd7b5de970..09ae93f9b6 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/EasingMethodTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/EasingMethodTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import org.junit.jupiter.api.Test;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/MathsTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/MathsTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/MathsTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/MathsTest.java
index 551cbef9a4..ec2b77efe3 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/MathsTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/MathsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/NDArraysTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/NDArraysTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/NDArraysTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/NDArraysTest.java
index 87b24328ce..4414b7f266 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/NDArraysTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/NDArraysTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import java.util.Collections;
 import java.util.HashSet;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/QuaternionTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/QuaternionTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/QuaternionTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/QuaternionTest.java
index 1634d74662..d08467d530 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/QuaternionTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/QuaternionTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/Vector3DTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/Vector3DTest.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/Vector3DTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/Vector3DTest.java
index 710858392b..04a0aba2fc 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/Vector3DTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/Vector3DTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXbTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXbTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXbTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXbTest.java
index afdc96e276..6b239d6a17 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXbTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXbTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXdTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXdTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXdTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXdTest.java
index 076499fb75..095b04bb21 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXdTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXdTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXfTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXfTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXfTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXfTest.java
index 5e32254bab..3d35cd18eb 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXfTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXfTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXiTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXiTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXiTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXiTest.java
index 9787f29bb6..e2b8951918 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXiTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXiTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXlTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXlTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXlTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXlTest.java
index fe88d6bf5b..c0560d7729 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXlTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXlTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXsTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXsTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXsTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXsTest.java
index 9467043c53..25acfd0eae 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXsTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXubTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXubTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXubTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXubTest.java
index b0fe4ac412..fb284aa6e6 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXubTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXubTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXuiTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXuiTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXuiTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXuiTest.java
index ad2fd8a488..a5b0918dd7 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXuiTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXuiTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXusTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXusTest.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXusTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXusTest.java
index 6906c7d97d..8dccaac31d 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorXusTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorXusTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorsTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorsTest.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorsTest.java
rename to incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorsTest.java
index 93ae447847..e94d32d8b6 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/math/VectorsTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/maths/VectorsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.math;
+package org.apache.sis.maths;
 
 import org.opengis.coordinate.MismatchedDimensionException;
 import org.opengis.referencing.operation.MathTransform;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/scene/SceneUtilitiesTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/scene/SceneUtilitiesTest.java
index 672849a0be..e679ea6c42 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/scene/SceneUtilitiesTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/scene/SceneUtilitiesTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.sis.scene;
 
-import org.apache.sis.geometries.math.Similarity3D;
-import org.apache.sis.geometries.math.Vector3D;
+import org.apache.sis.maths.Similarity3D;
+import org.apache.sis.maths.Vector3D;
 
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/referencing/dggs/s2/S2Zone.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/referencing/dggs/s2/S2Zone.java
index 1e42ee27f8..d663bcae11 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/referencing/dggs/s2/S2Zone.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/referencing/dggs/s2/S2Zone.java
@@ -27,7 +27,7 @@ import com.google.common.geometry.S2Point;
 import com.google.common.geometry.S2Polygon;
 import org.opengis.geometry.DirectPosition;
 import org.opengis.metadata.extent.BoundingPolygon;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.geometry.DirectPosition2D;
 import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.referencing.dggs.RefinementLevel;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridCoverageProcessor.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridCoverageProcessor.java
index fe1b1ea895..9c25cc7841 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridCoverageProcessor.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridCoverageProcessor.java
@@ -59,11 +59,11 @@ import org.apache.sis.coverage.grid.GridOrientation;
 import org.apache.sis.feature.Features;
 import org.apache.sis.feature.internal.shared.AttributeConvention;
 import org.apache.sis.filter.DefaultFilterFactory;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
-import org.apache.sis.geometries.math.Vector1D;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Vector1D;
 import org.apache.sis.geometry.DirectPosition1D;
 import org.apache.sis.geometry.GeneralDirectPosition;
 import org.apache.sis.geometry.GeneralEnvelope;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
index be952bc384..e892d517d7 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
@@ -39,8 +39,8 @@ import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.geometry.Envelopes;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.wrapper.GeometryWrapper;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/internal/shared/ArrayDiscreteGlobalGridCoverage.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/internal/shared/ArrayDiscreteGlobalGridCoverage.java
index da33d18d84..9c02add0bc 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/internal/shared/ArrayDiscreteGlobalGridCoverage.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/internal/shared/ArrayDiscreteGlobalGridCoverage.java
@@ -21,11 +21,11 @@ import java.util.Arrays;
 import java.util.List;
 import org.opengis.util.GenericName;
 import org.apache.sis.coverage.SampleDimension;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.dggs.DiscreteGlobalGridGeometry;
 import org.apache.sis.storage.rs.CodeIterator;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/ArrayCodedCoverage.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/ArrayCodedCoverage.java
index 3387c31d44..7ae093dde4 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/ArrayCodedCoverage.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/ArrayCodedCoverage.java
@@ -23,11 +23,11 @@ import java.util.Objects;
 import org.opengis.util.FactoryException;
 import org.opengis.util.GenericName;
 import org.apache.sis.coverage.SampleDimension;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.Cursor;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.storage.DataStoreException;
 import org.apache.sis.storage.rs.CodeIterator;
 import org.apache.sis.storage.rs.CodedGeometry;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/GridAsCodedResource.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/GridAsCodedResource.java
index 8874a66862..901aa138df 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/GridAsCodedResource.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/rs/internal/shared/GridAsCodedResource.java
@@ -39,10 +39,10 @@ import org.apache.sis.coverage.grid.GridExtent;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.coverage.grid.GridOrientation;
 import org.apache.sis.coverage.grid.GridRoundingMode;
-import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.dggs.DiscreteGlobalGridReferenceSystem;
 import org.apache.sis.referencing.rs.Code;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
index f4f184ee68..4981760616 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
@@ -34,10 +34,10 @@ import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.coverage.grid.GridOrientation;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.math.Vector2D;
-import org.apache.sis.geometries.math.NDArrays;
-import org.apache.sis.geometries.math.Vectors;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.referencing.GeodeticCalculator;
 import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.util.iso.Names;


(sis) 04/06: refactor(Geometry): regroup curve interfaces in a single package

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 132cb96402eef8559b95ea84e75def2c4529aca6
Author: jsorel <jo...@geomatys.com>
AuthorDate: Mon Sep 7 09:17:31 2026 +0200

    refactor(Geometry): regroup curve interfaces in a single package
---
 incubator/src/org.apache.sis.geometry/main/module-info.java    |  1 +
 .../main/org/apache/sis/geometries/Curve.java                  |  1 +
 .../main/org/apache/sis/geometries/GeometryFactory.java        |  8 +++++---
 .../main/org/apache/sis/geometries/GeometryVisitor.java        |  3 +++
 .../main/org/apache/sis/geometries/MultiLineString.java        |  1 +
 .../main/org/apache/sis/geometries/Polygon.java                |  1 +
 .../main/org/apache/sis/geometries/Triangle.java               |  1 +
 .../main/org/apache/sis/geometries/Wrapper.java                |  2 ++
 .../main/org/apache/sis/geometries/adapter/JTSAdapter.java     |  2 ++
 .../org/apache/sis/geometries/adapter/PathIteratorAdapter.java |  2 +-
 .../main/org/apache/sis/geometries/adapter/ShapeAdapter.java   |  2 +-
 .../main/org/apache/sis/geometries/adapter/ShapeConverter.java |  2 +-
 .../main/org/apache/sis/geometries/{conics => curve}/Arc.java  |  2 +-
 .../org/apache/sis/geometries/{conics => curve}/Circle.java    |  2 +-
 .../sis/geometries/{conics => curve}/CircularString.java       |  2 +-
 .../org/apache/sis/geometries/{spirals => curve}/Clothoid.java |  2 +-
 .../org/apache/sis/geometries/{conics => curve}/Conic.java     |  2 +-
 .../org/apache/sis/geometries/{conics => curve}/ConicArc.java  |  2 +-
 .../org/apache/sis/geometries/{conics => curve}/Ellipse.java   |  2 +-
 .../apache/sis/geometries/{conics => curve}/EllipticArc.java   |  2 +-
 .../main/org/apache/sis/geometries/{ => curve}/LineString.java |  7 ++++++-
 .../main/org/apache/sis/geometries/{ => curve}/LinearRing.java |  3 ++-
 .../org/apache/sis/geometries/{ => curve}/OffsetCurve.java     |  4 +++-
 .../main/org/apache/sis/geometries/{ => curve}/Rhumb.java      |  5 ++++-
 .../org/apache/sis/geometries/{spirals => curve}/Spiral.java   |  2 +-
 .../{conics/ConicArc.java => curve/package-info.java}          | 10 ++++------
 .../sis/geometries/internal/shared/DefaultCircularString.java  |  2 +-
 .../sis/geometries/internal/shared/DefaultLineString.java      |  2 +-
 .../sis/geometries/internal/shared/DefaultLinearRing.java      |  2 +-
 .../sis/geometries/internal/shared/DefaultMultiLineString.java |  2 +-
 .../apache/sis/geometries/internal/shared/DefaultPolygon.java  |  2 +-
 .../apache/sis/geometries/internal/shared/DefaultTriangle.java |  2 +-
 .../main/org/apache/sis/geometries/mesh/MeshPrimitive.java     |  2 +-
 .../apache/sis/geometries/mesh/MeshPrimitiveComparator.java    |  2 +-
 .../org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java   |  2 +-
 .../main/org/apache/sis/geometries/operation/Contains.java     |  2 +-
 .../org/apache/sis/geometries/operation/GeometryProcessor.java |  4 ++--
 .../main/org/apache/sis/geometries/operation/Intersection.java |  2 +-
 .../main/org/apache/sis/geometries/operation/To3D.java         |  2 +-
 .../main/org/apache/sis/geometries/operation/ToPrimitive.java  |  4 ++--
 .../main/org/apache/sis/geometries/operation/Transform.java    |  4 ++--
 .../geometries/operation/simplify/greedyinsert/TINBuilder.java |  2 +-
 .../geometries/operation/simplify/greedyinsert/WTriangle.java  |  2 +-
 .../sis/geometries/operation/triangulate/EarClipping.java      |  2 +-
 .../operation/triangulate/delaunay/OrientedEdge.java           |  2 +-
 .../operation/triangulate/delaunay/OrientedTriangle.java       |  2 +-
 .../apache/sis/geometries/polyhedron/AbstractPolyhedron.java   |  2 +-
 .../{conics/ConicArc.java => surface/package-info.java}        | 10 ++++------
 .../main/org/apache/sis/gml/AbstractGMLWriter.java             |  4 ++--
 .../main/org/apache/sis/gml/GML2Reader.java                    |  4 ++--
 .../main/org/apache/sis/gml/GML2Writer.java                    |  4 ++--
 .../main/org/apache/sis/gml/GML3Reader.java                    |  4 ++--
 .../main/org/apache/sis/gml/GML3Writer.java                    |  6 +++---
 .../test/org/apache/sis/geometries/TriangleTest.java           |  1 +
 .../org/apache/sis/geometries/adapter/ShapeAdapterTest.java    |  4 ++--
 .../org/apache/sis/geometries/adapter/ShapeConverterTest.java  |  4 ++--
 .../org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java   |  2 +-
 .../org/apache/sis/geometries/operation/ToPrimitiveTest.java   |  4 ++--
 .../test/org/apache/sis/gml/GML2ReaderTest.java                |  4 ++--
 .../test/org/apache/sis/gml/GML2WriterTest.java                |  2 +-
 .../test/org/apache/sis/gml/GML3ReaderTest.java                |  6 +++---
 .../test/org/apache/sis/gml/GML3WriterTest.java                |  2 +-
 .../test/org/apache/sis/gml/GeometryAssert.java                |  2 +-
 .../test/org/apache/sis/gml/JAXBGeometryAdapterTest.java       |  2 +-
 .../org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java |  2 +-
 .../org/apache/sis/referencing/dggs/AbstractDggrsTest.java     |  2 +-
 66 files changed, 106 insertions(+), 84 deletions(-)

diff --git a/incubator/src/org.apache.sis.geometry/main/module-info.java b/incubator/src/org.apache.sis.geometry/main/module-info.java
index 67c3a04af2..4c7ce455f6 100644
--- a/incubator/src/org.apache.sis.geometry/main/module-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/module-info.java
@@ -31,6 +31,7 @@ module org.apache.sis.geometry {
 
     exports org.apache.sis.images;
     exports org.apache.sis.geometries;
+    exports org.apache.sis.geometries.curve;
     exports org.apache.sis.geometries.operation;
     exports org.apache.sis.geometries.math;
     exports org.apache.sis.scene;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
index fe135f738b..d8886341a1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LineString;
 import java.util.List;
 import javax.measure.quantity.Length;
 import org.apache.sis.geometries.math.Array;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
index 84471d90dd..e76715e924 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
@@ -16,6 +16,8 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
 import java.nio.ByteBuffer;
 import java.nio.DoubleBuffer;
 import java.util.Collections;
@@ -25,8 +27,8 @@ import javax.measure.Unit;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
-import org.apache.sis.geometries.conics.Circle;
-import org.apache.sis.geometries.conics.CircularString;
+import org.apache.sis.geometries.curve.Circle;
+import org.apache.sis.geometries.curve.CircularString;
 import org.apache.sis.geometries.curve.Geodesic;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.NDArrays;
@@ -59,7 +61,7 @@ import org.apache.sis.geometries.internal.shared.DefaultReversedSurface;
 import org.apache.sis.geometries.internal.shared.DefaultTriangle;
 import org.apache.sis.geometries.internal.shared.DefaultTriangulatedSurface;
 import org.apache.sis.geometries.math.DataType;
-import org.apache.sis.geometries.spirals.Clothoid;
+import org.apache.sis.geometries.curve.Clothoid;
 import org.apache.sis.geometry.wrapper.Capability;
 import org.apache.sis.geometry.wrapper.Dimensions;
 import org.apache.sis.geometry.wrapper.GeometryType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
index fb59c93d19..004dc428f3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
@@ -16,6 +16,9 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+
 
 /**
  *
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
index addf68ed1c..0e09ef781c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.math.Tuple;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
index 530221cf5f..b4072fa34a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LinearRing;
 import java.util.List;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
index 6bbaddb517..0e022e9033 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LinearRing;
 import java.util.Collections;
 import java.util.List;
 import static org.opengis.annotation.Specification.ISO_19107;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
index 3c866e2e87..b24a6fd90e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
@@ -16,6 +16,8 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
 import java.awt.Shape;
 import java.util.Iterator;
 import java.util.OptionalInt;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
index 2ba71918ab..5ec536c552 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
@@ -16,6 +16,8 @@
  */
 package org.apache.sis.geometries.adapter;
 
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.*;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
index b0bdad4b9f..16381d6fb3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
@@ -23,7 +23,7 @@ import java.awt.geom.PathIterator;
 import java.awt.geom.AffineTransform;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Tuple;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
index f712e2871b..9aafdbf34e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
@@ -26,7 +26,7 @@ import java.util.Objects;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
index a1eaf7622d..ecb7bd7e0c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
@@ -25,7 +25,7 @@ import java.awt.geom.IllegalPathStateException;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Surface;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
index 5a66f80ca3..51751b3818 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 import java.util.List;
 import org.apache.sis.geometries.math.Array;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Circle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Circle.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Circle.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Circle.java
index 5d5326e84e..cfef2debee 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Circle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Circle.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
index 9d288ae7d2..a9816f5d98 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spirals/Clothoid.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Clothoid.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spirals/Clothoid.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Clothoid.java
index ecaeeb76c2..59ff0a2841 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spirals/Clothoid.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Clothoid.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.spirals;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
index 0fd7603870..b64094afe4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ConicArc.java
similarity index 95%
copy from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java
copy to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ConicArc.java
index 43c40d2250..87f2144e28 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ConicArc.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Ellipse.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Ellipse.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Ellipse.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Ellipse.java
index 8fb81f9e30..b455bef03d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Ellipse.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Ellipse.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/EllipticArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/EllipticArc.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/EllipticArc.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/EllipticArc.java
index 1e9136a066..e274bc024e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/EllipticArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/EllipticArc.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
similarity index 93%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
index 4553a59472..245be71cb4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
@@ -14,9 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
 import javax.measure.quantity.Length;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.Point;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java
index 6653e45315..2adb8486f9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LinearRing.java
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.math.Tuple;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OffsetCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/OffsetCurve.java
similarity index 92%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OffsetCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/OffsetCurve.java
index 131ee86f69..0e591ea70c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OffsetCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/OffsetCurve.java
@@ -14,9 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
 import javax.measure.quantity.Length;
+import org.apache.sis.geometries.Bearing;
+import org.apache.sis.geometries.Curve;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Rhumb.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java
similarity index 89%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Rhumb.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java
index f38cbb7a8f..52fab47881 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Rhumb.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java
@@ -14,13 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Bearing;
+import org.apache.sis.geometries.Bearing;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.CurveInterpolation;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spirals/Spiral.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spirals/Spiral.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
index e0d76689e7..ae391e59b7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spirals/Spiral.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.spirals;
+package org.apache.sis.geometries.curve;
 
 import java.util.List;
 import static org.opengis.annotation.Specification.ISO_19107;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/package-info.java
similarity index 76%
copy from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java
copy to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/package-info.java
index 43c40d2250..f6e1b8243b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/package-info.java
@@ -14,13 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
-
 
 /**
+ * Package for all Curve subtypes.
  *
- * @author Johann Sorel (Geomatys)
+ * ISO-19107 separate them in different packages which result in packages with one or two classes.
+ * Grouping all types in a single package simplify management and search.
  */
-public interface ConicArc {
-
-}
+package org.apache.sis.geometries.curve;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
index 070e3587a5..d48ce638a2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.apache.sis.geometries.conics.CircularString;
+import org.apache.sis.geometries.curve.CircularString;
 import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
index 4ba9337abc..de17d5ba39 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
index 139592ade9..d50e13f119 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.DataPoints;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java
index bee4876af6..63db5cace6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries.internal.shared;
 
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.MultiLineString;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java
index 9e7826fc0a..3b805092d2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java
@@ -22,7 +22,7 @@ import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.Geometries;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
 import org.locationtech.jts.geom.GeometryFactory;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
index c2d1a55e59..bb2a8e5b60 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries.internal.shared;
 
 import java.util.Objects;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.DataPoints;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
index 5f66b7c1f0..7b6cf5abbd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
@@ -37,7 +37,7 @@ import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
index 56713299af..63bac5fea6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
@@ -22,7 +22,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
index 6cd423c814..cf858dc658 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
@@ -19,7 +19,7 @@ package org.apache.sis.geometries.mesh;
 import java.util.HashSet;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.NDArrays;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
index 68fe374410..75eb107a0f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries.operation;
 
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Maths;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
index 721d5c97c9..d870ec2997 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
@@ -28,8 +28,8 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
index 8573ae6f55..a1523cc035 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
@@ -25,7 +25,7 @@ import java.util.stream.Stream;
 import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometries;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.PreparedTIN;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
index b974153ad9..481c0f225a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
@@ -23,7 +23,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.Tuple;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
index f42dd656af..1698f9dcb2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
@@ -117,7 +117,7 @@ public final class ToPrimitive {
             }
 
             for (int i = 0, k = 0; i < numGeometries; i++, k += 2) {
-                final org.apache.sis.geometries.LineString line = geometry.getGeometryN(i);
+                final org.apache.sis.geometries.curve.LineString line = geometry.getGeometryN(i);
                 final DataPoints points = line.getDataPoints();
                 for (String name : attributesType.getAttributeNames()) {
                     Array att = primitive.getAttribute(name);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
index 1a6d9834ac..b8b76b6af8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
@@ -23,7 +23,7 @@ import java.util.Set;
 import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.SampleSystem;
@@ -95,7 +95,7 @@ public final class Transform {
 
         final LinearRing exterior = transform(p.getExteriorRing(), crs, transform);
 
-        final List<org.apache.sis.geometries.LinearRing> interiors = new ArrayList<>(p.getInteriorRings());
+        final List<org.apache.sis.geometries.curve.LinearRing> interiors = new ArrayList<>(p.getInteriorRings());
         for (int i = 0, n = interiors.size(); i < n; i++) {
             interiors.set(i, transform(interiors.get(i), crs, transform));
         }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
index 1d01b6fe55..c5db4f01f3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
@@ -30,7 +30,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.Maths;
 import org.apache.sis.geometries.math.Tuple;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
index 65acf3f355..cba0e3d6a5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
@@ -21,7 +21,7 @@ import java.util.List;
 import java.util.function.BiFunction;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
index d99d816f23..6934174af7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
@@ -22,7 +22,7 @@ import java.util.Comparator;
 import java.util.List;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Maths;
 import org.apache.sis.geometries.math.Tuple;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
index 5aaeef6de1..e9b54e95c5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
@@ -20,7 +20,7 @@ import java.util.Iterator;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
index 90bbc8cdaf..77fad3f9ea 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
@@ -20,7 +20,7 @@ import java.awt.geom.Point2D;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
index 19dea2e4b8..ab9c280b51 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
@@ -20,7 +20,7 @@ import java.util.List;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Polyhedron;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/package-info.java
similarity index 76%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/package-info.java
index 43c40d2250..40d2a639bf 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/ConicArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/package-info.java
@@ -14,13 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.conics;
-
 
 /**
+ * Package for all Surface subtypes.
  *
- * @author Johann Sorel (Geomatys)
+ * ISO-19107 separate them in different packages which result in packages with one or two classes.
+ * Grouping all types in a single package simplify management and search.
  */
-public interface ConicArc {
-
-}
+package org.apache.sis.geometries.surface;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
index 81e2180154..c0a29bc777 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
@@ -23,8 +23,8 @@ import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiCurve;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiSurface;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java
index 244b1bd713..426f633ab6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java
@@ -25,8 +25,8 @@ import javax.xml.stream.XMLStreamReader;
 import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
index 66bc194a62..02f6237114 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
@@ -23,8 +23,8 @@ import javax.xml.stream.XMLStreamWriter;
 import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiCurve;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiSurface;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
index 79ba348f7a..f2cec5ab79 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
@@ -30,8 +30,8 @@ import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurvePolygon;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.MultiPolyhedron;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
index 1988d81d12..06a440d4ec 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
@@ -29,8 +29,8 @@ import org.apache.sis.geometries.CurvePolygon;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiCurve;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
@@ -45,7 +45,7 @@ import org.apache.sis.geometries.Surface;
 import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
-import org.apache.sis.geometries.conics.CircularString;
+import org.apache.sis.geometries.curve.CircularString;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
index d74753ac37..d9bc139cc6 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.referencing.CommonCRS;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
index c3cfc605d0..90c5dc1a1d 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
@@ -20,8 +20,8 @@ import java.awt.Shape;
 import java.awt.geom.PathIterator;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.NDArrays;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
index a2b9ae92ad..11ae8e65de 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
@@ -32,8 +32,8 @@ import java.util.List;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
index d2aa667c8a..f69ae03c55 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
@@ -21,7 +21,7 @@ import java.util.Arrays;
 import java.util.List;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Geometries;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.Triangle;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
index 3a502a1dd0..054b42a510 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
@@ -20,8 +20,8 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
index 1df8583a69..e348fbd611 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
@@ -25,8 +25,8 @@ import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
index 42e4dd119c..6e736ad0b5 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
@@ -24,7 +24,7 @@ import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
index 1424477af7..1b3772cad4 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
@@ -29,8 +29,8 @@ import org.apache.sis.geometries.CurvePolygon;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
@@ -44,7 +44,7 @@ import org.apache.sis.geometries.Surface;
 import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
-import org.apache.sis.geometries.conics.CircularString;
+import org.apache.sis.geometries.curve.CircularString;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.measure.Units;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
index 500ef0f136..903701a1c5 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
@@ -26,7 +26,7 @@ import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.math.NDArrays;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
index add8bc35e6..915c3c96ba 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
@@ -21,7 +21,7 @@ import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.LineString;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.referencing.CRS;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
index 3ce55b610e..d7d80f1ccc 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.NDArrays;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
index ed5750363a..be952bc384 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
@@ -37,7 +37,7 @@ import org.opengis.referencing.crs.ProjectedCRS;
 import org.opengis.referencing.datum.Ellipsoid;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.NDArrays;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
index 2d981134bc..f4f184ee68 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
@@ -32,7 +32,7 @@ import org.apache.sis.coverage.grid.GridCoverage;
 import org.apache.sis.coverage.grid.GridExtent;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.coverage.grid.GridOrientation;
-import org.apache.sis.geometries.LinearRing;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Vector2D;


(sis) 03/06: feat(Geometry): add geodesic curve implementation

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c2010b7bc9a44801489a6db412af97dd0141f6f6
Author: jsorel <jo...@geomatys.com>
AuthorDate: Mon Sep 7 09:08:23 2026 +0200

    feat(Geometry): add geodesic curve implementation
---
 .../org/apache/sis/geometries/GeometryFactory.java |   6 ++
 .../org/apache/sis/geometries/curve/Geodesic.java  | 103 +++++++++++++++++++++
 .../shared/DefaultGeodesic.java}                   |  34 +++++--
 3 files changed, 133 insertions(+), 10 deletions(-)

diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
index 3cec7571ea..84471d90dd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
@@ -27,6 +27,7 @@ import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.conics.Circle;
 import org.apache.sis.geometries.conics.CircularString;
+import org.apache.sis.geometries.curve.Geodesic;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Array;
@@ -38,6 +39,7 @@ import org.apache.sis.geometries.internal.shared.DefaultCircularString;
 import org.apache.sis.geometries.internal.shared.DefaultCompoundCurve;
 import org.apache.sis.geometries.internal.shared.DefaultCurvePolygon;
 import org.apache.sis.geometries.internal.shared.DefaultEmpty;
+import org.apache.sis.geometries.internal.shared.DefaultGeodesic;
 import org.apache.sis.geometries.internal.shared.DefaultGeometryCollection;
 import org.apache.sis.geometries.internal.shared.DefaultLineString;
 import org.apache.sis.geometries.internal.shared.DefaultLinearRing;
@@ -107,6 +109,10 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
         return new DefaultLineString(sequence);
     }
 
+    public static Geodesic createGeodesic(DataPoints sequence) {
+        return new DefaultGeodesic(sequence);
+    }
+
     public static LinearRing createLinearRing(DataPoints sequence) {
         return new DefaultLinearRing(sequence);
     }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
new file mode 100644
index 0000000000..4924208eba
--- /dev/null
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries.curve;
+
+import org.apache.sis.geometries.AttributesType;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.geometries.math.Array;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+
+/**
+ * A curve between two point which is interpolated on the ellipsid.
+ *
+ * @author Johann Sorel (Geomatys)
+ */
+@UML(identifier="Geodesic", specification=ISO_19107) // section 7.3.2
+public interface Geodesic extends Curve {
+
+    public static final String TYPE = "GEODESIC";
+
+    @Override
+    public default String getGeometryType() {
+        return TYPE;
+    }
+
+    @UML(identifier="interpolation", specification=ISO_19107) // section 7.3.2.2
+    @Override
+    public default CurveInterpolation getInterpolation() {
+        return CurveInterpolation.GEODESIC;
+    }
+
+    /**
+     * The number of Points in this Geodesic.
+     *
+     * @see OGC Simple Feature Access 1.2.1 - 6.1.7.2
+     * @return number of Points in this Geodesic.
+     */
+    default int getNumPoints() {
+        return getDataPoints().size();
+    }
+
+    /**
+     * Returns the specified Point N in this Geodesic.
+     *
+     * @see OGC Simple Feature Access 1.2.1 - 6.1.7.2
+     * @return the specified Point N in this Geodesic.
+     */
+    default Point getPointN(int n) {
+        return getDataPoints().getPoint(n);
+    }
+
+    /**
+     * @return null, a Geodesic has no control points
+     */
+    @Override
+    public default Array getControlPoints() {
+        return null;
+    }
+
+    @Override
+    default CoordinateReferenceSystem getCoordinateReferenceSystem() {
+        return getDataPoints().getCoordinateReferenceSystem();
+    }
+
+    @Override
+    default void setCoordinateReferenceSystem(CoordinateReferenceSystem cs) throws IllegalArgumentException {
+        getDataPoints().setCoordinateReferenceSystem(cs);
+    }
+
+    @Override
+    public default AttributesType getAttributesType() {
+        return getDataPoints().getAttributesType();
+    }
+
+    @Override
+    default String asText() {
+        final StringBuilder sb = new StringBuilder("GEODESIC (");
+        final DataPoints points = getDataPoints();
+        AbstractGeometry.toText(sb, points);
+        sb.append(')');
+        return sb.toString();
+    }
+}
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/geodesics/Geodesic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeodesic.java
similarity index 57%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/geodesics/Geodesic.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeodesic.java
index 1368fbb115..5ac9b1a3cc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/geodesics/Geodesic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeodesic.java
@@ -14,24 +14,38 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.geodesics;
+package org.apache.sis.geometries.internal.shared;
 
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
-import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.curve.Geodesic;
+import org.opengis.geometry.Envelope;
 
 
 /**
  *
  * @author Johann Sorel (Geomatys)
  */
-@UML(identifier="Geodesic", specification=ISO_19107) // section 7.3.2
-public interface Geodesic extends Curve {
+public class DefaultGeodesic extends AbstractGeometry implements Geodesic {
+
+    private final DataPoints points;
+
+    public DefaultGeodesic(DataPoints points) {
+        this.points = points;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return points.isEmpty();
+    }
 
-    @UML(identifier="interpolation", specification=ISO_19107) // section 7.3.2.2
     @Override
-    public default CurveInterpolation getInterpolation() {
-        return CurveInterpolation.GEODESIC;
+    public DataPoints getDataPoints() {
+        return points;
     }
+
+    @Override
+    public Envelope getEnvelope() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
 }


(sis) 02/06: refactor(Geometry): rename PointSequence to DataPoints to follow ISO:19107 naming

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8290d6355ac0d133f20e8e669a7f29ee1f1cb752
Author: jsorel <jo...@geomatys.com>
AuthorDate: Mon Sep 7 09:01:02 2026 +0200

    refactor(Geometry): rename PointSequence to DataPoints to follow ISO:19107 naming
---
 .../sis/geometries/AttributeInterpolation.java     | 50 ++++++++++++++++++++++
 ...ineString.java => AttributeTransformation.java} | 41 ++++++++----------
 .../org/apache/sis/geometries/AttributesType.java  | 18 ++++++++
 .../main/org/apache/sis/geometries/Curve.java      |  8 ++--
 .../{PointSequence.java => DataPoints.java}        | 15 ++++++-
 .../org/apache/sis/geometries/GeometryFactory.java | 30 ++++++-------
 .../org/apache/sis/geometries/GeometryVisitor.java |  2 +-
 .../main/org/apache/sis/geometries/LineString.java |  4 +-
 .../main/org/apache/sis/geometries/LinearRing.java |  2 +-
 .../org/apache/sis/geometries/MultiLineString.java |  2 +-
 .../main/org/apache/sis/geometries/MultiPoint.java |  4 +-
 .../main/org/apache/sis/geometries/Point.java      |  4 +-
 .../org/apache/sis/geometries/PreparedTIN.java     |  2 +-
 .../main/org/apache/sis/geometries/TIN.java        |  2 +-
 .../main/org/apache/sis/geometries/Triangle.java   | 12 +++---
 .../main/org/apache/sis/geometries/Wrapper.java    | 16 +++----
 .../apache/sis/geometries/adapter/JTSAdapter.java  | 34 +++++++--------
 .../geometries/adapter/PathIteratorAdapter.java    | 22 +++++-----
 .../sis/geometries/adapter/ShapeAdapter.java       |  6 +--
 .../sis/geometries/adapter/ShapeConverter.java     | 14 +++---
 .../main/org/apache/sis/geometries/conics/Arc.java |  4 +-
 .../sis/geometries/conics/CircularString.java      |  6 +--
 .../org/apache/sis/geometries/conics/Conic.java    |  4 +-
 .../apache/sis/geometries/curve/ArcByBulge.java    |  4 +-
 .../sis/geometries/curve/ArcByCenterPoint.java     |  4 +-
 .../internal/shared/AbstractGeometry.java          |  4 +-
 .../{ArraySequence.java => ArrayDataPoints.java}   | 13 +++---
 .../internal/shared/DefaultArcByBulge.java         |  8 ++--
 .../internal/shared/DefaultCircularString.java     |  8 ++--
 .../internal/shared/DefaultCompoundCurve.java      |  4 +-
 ...ltPointSequence.java => DefaultDataPoints.java} | 10 ++---
 .../internal/shared/DefaultLineString.java         |  8 ++--
 .../internal/shared/DefaultLinearRing.java         |  4 +-
 .../internal/shared/DefaultMultiPoint.java         |  8 ++--
 .../geometries/internal/shared/DefaultPoint.java   | 16 +++----
 .../internal/shared/DefaultReversedCurve.java      |  4 +-
 .../internal/shared/DefaultTriangle.java           |  4 +-
 .../apache/sis/geometries/mesh/MeshPrimitive.java  | 12 +++---
 .../geometries/mesh/MeshPrimitiveComparator.java   |  6 +--
 .../sis/geometries/mesh/MeshPrimitiveVisitor.java  |  6 +--
 .../sis/geometries/operation/Intersection.java     |  4 +-
 .../org/apache/sis/geometries/operation/To3D.java  | 16 +++----
 .../sis/geometries/operation/ToPrimitive.java      | 14 +++---
 .../apache/sis/geometries/operation/Transform.java | 12 +++---
 .../simplify/greedyinsert/TINBuilder.java          |  4 +-
 .../simplify/greedyinsert/TinDistance.java         |  4 +-
 .../operation/simplify/greedyinsert/WTriangle.java |  6 +--
 .../operation/spatialanalysis2d/ISOBand.java       |  4 +-
 .../operation/spatialanalysis2d/ISOLine.java       |  4 +-
 .../triangulate/delaunay/OrientedEdge.java         | 10 ++---
 .../triangulate/delaunay/OrientedTriangle.java     |  8 ++--
 .../main/org/apache/sis/gml/AbstractGMLWriter.java |  4 +-
 .../main/org/apache/sis/gml/GML2Writer.java        |  6 +--
 .../main/org/apache/sis/gml/GML3Writer.java        |  4 +-
 .../org/apache/sis/gml/PositionListBuilder.java    |  6 +--
 .../org/apache/sis/geometries/TriangleTest.java    |  2 +-
 .../sis/geometries/adapter/ShapeAdapterTest.java   | 16 +++----
 .../sis/geometries/adapter/ShapeConverterTest.java |  4 +-
 .../internal/shared/ArraySequenceTest.java         | 10 ++---
 .../sis/geometries/operation/ToPrimitiveTest.java  | 16 +++----
 .../test/org/apache/sis/gml/GML2ReaderTest.java    |  4 +-
 .../test/org/apache/sis/gml/GML2WriterTest.java    |  4 +-
 .../test/org/apache/sis/gml/GML3ReaderTest.java    |  4 +-
 .../test/org/apache/sis/gml/GML3WriterTest.java    |  4 +-
 .../test/org/apache/sis/gml/GeometryAssert.java    |  6 +--
 .../apache/sis/gml/JAXBGeometryAdapterTest.java    |  4 +-
 .../storage/dggs/DiscreteGlobalGridSystems.java    |  6 +--
 .../sis/referencing/dggs/AbstractDggrsTest.java    |  4 +-
 68 files changed, 346 insertions(+), 269 deletions(-)

diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeInterpolation.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeInterpolation.java
new file mode 100644
index 0000000000..756a80b27b
--- /dev/null
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeInterpolation.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.geometries;
+
+/**
+ * Defines how geometry attribute should be interpolation on the curves, surfaces or in volumes.
+ * This information will be used by geometry transforming operations.
+ *
+ * TODO : experimentale but needed
+ *
+ * @author Johann Sorel (Geomatys)
+ */
+public enum AttributeInterpolation {
+
+    /**
+     * Used for any attribute which is in the geometry coordinate reference system.
+     * Attribute must be in a compatible CRS.
+     */
+    TRANSLATE,
+    /**
+     * Computed value should be the value of the nearest geometric point
+     */
+    NEAREST,
+    /**
+     * Computed value should be linearly interpolated between geometric points.
+     * It must follow the curve (distance along the curve) or surface.
+     */
+    LINEAR,
+    /**
+     * An attribute value applies to the whole segment until the next point.
+     * For a curve of two points [A..B] this means the value should be used on the [A..B[ interval, excluding B.
+     * For a surface or volume, the first attribute value applies to the whole surface or volume.
+     */
+    LEADING
+
+}
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeTransformation.java
similarity index 60%
copy from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
copy to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeTransformation.java
index 4edcf32b76..1847f4f332 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributeTransformation.java
@@ -14,32 +14,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.internal.shared;
-
-import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.PointSequence;
-
+package org.apache.sis.geometries;
 
 /**
+ * Defines how geometry attribute should be transformed on the curves, surfaces or in volumes.
+ * This information will be used by geometry transforming operations.
+ *
+ * TODO : experimentale but needed
  *
  * @author Johann Sorel (Geomatys)
  */
-public class DefaultLineString extends AbstractGeometry implements LineString {
-
-    private final PointSequence points;
-
-    public DefaultLineString(PointSequence points) {
-        this.points = points;
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return points.isEmpty();
-    }
-
-    @Override
-    public PointSequence getDataPoints() {
-        return points;
-    }
+public enum AttributeTransformation {
+
+    /**
+     * Value remains unchanged.
+     */
+    NONE,
+    /**
+     * Any coordinate transformation applies to the attribute values.
+     */
+    TRANSFORM,
+    /**
+     * The value should be rotated using the rotation matrix of the transform at the given point.
+     */
+    ROTATE
 
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
index b9aeefc8c3..7cfc34e7e5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
@@ -70,6 +70,24 @@ public interface AttributesType {
      */
     DataType getAttributeType(String name);
 
+    /**
+     * Get how values should be interpolation in geometric operations.
+     *
+     * TODO : experimentale but needed
+     */
+    default AttributeInterpolation getAttributeInterpolation(String name) {
+        return AttributeInterpolation.NEAREST;
+    }
+
+    /**
+     * Get how values should be transformed in geometric operations.
+     *
+     * TODO : experimentale but needed
+     */
+    default AttributeTransformation getAttributeTransformation(String name) {
+        return AttributeTransformation.NONE;
+    }
+
     /**
      * Returns attribute names.
      *
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
index 0574932512..fe135f738b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
@@ -42,14 +42,14 @@ public interface Curve extends Orientable {
      *
      * <p>
      * Difference with ISO-19107 : The type has been changed from
-     * a list of direct positions to a PointSequence.
+     * a list of direct positions to DataPoints.
      * This change allows to accomodate addition attributes like in GLTF or GPU models.
      * </p>
      *
      * @return curve data points.
      */
     @UML(identifier="dataPoint", specification=ISO_19107) // section 6.4.18.3
-    PointSequence getDataPoints();
+    DataPoints getDataPoints();
 
     /**
      * The length of this Curve in its associated spatial reference.
@@ -70,7 +70,7 @@ public interface Curve extends Orientable {
      */
     @UML(identifier="startPoint", specification=ISO_19107) // section 6.4.18.6
     default Point getStartPoint() {
-        final PointSequence points = getDataPoints();
+        final DataPoints points = getDataPoints();
         if (points.isEmpty()) return null;
         return points.getPoint(0);
     }
@@ -83,7 +83,7 @@ public interface Curve extends Orientable {
      */
     @UML(identifier="endPoint", specification=ISO_19107) // section 6.4.18.7
     default Point getEndPoint() {
-        final PointSequence points = getDataPoints();
+        final DataPoints points = getDataPoints();
         if (points.isEmpty()) return null;
         return points.getPoint(points.size()-1);
     }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PointSequence.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
similarity index 89%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PointSequence.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
index b217d3bbda..f746b022d4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PointSequence.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
@@ -26,10 +26,23 @@ import org.apache.sis.geometries.math.Array;
 
 
 /**
+ * Enriched version of ISO-19107 DataPoints with multiple attributes capabilities.
+ *
+ * <p>
+ * ISO-19107 defines DataPoints on Curves as a List of DirectPosition.
+ * We extent this list with additional property support.
+ * By doing this we can store the old 'M' value as a properly separated information
+ * but also all 'normal','color','tangent','wight'.... informations which exist
+ * in other specifications.
+ * </p>
+ *
+ * <p>
+ * The ISO-19107 DirectPosition becomes the POSITION attribute.
+ * </p>
  *
  * @author Johann Sorel (Geomatys)
  */
-public interface PointSequence {
+public interface DataPoints {
 
     /**
      * Get geometry coordinate system.
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
index a973bc6b06..3cec7571ea 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
@@ -31,7 +31,7 @@ import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.Vector;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.internal.shared.DefaultArcByBulge;
 import org.apache.sis.geometries.internal.shared.DefaultArcByCenterPoint;
 import org.apache.sis.geometries.internal.shared.DefaultCircularString;
@@ -99,15 +99,15 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
         return new DefaultPoint(ss, position);
     }
 
-    public static Point createPoint(PointSequence sequence) {
+    public static Point createPoint(DataPoints sequence) {
         return new DefaultPoint(sequence);
     }
 
-    public static LineString createLineString(PointSequence sequence) {
+    public static LineString createLineString(DataPoints sequence) {
         return new DefaultLineString(sequence);
     }
 
-    public static LinearRing createLinearRing(PointSequence sequence) {
+    public static LinearRing createLinearRing(DataPoints sequence) {
         return new DefaultLinearRing(sequence);
     }
 
@@ -119,7 +119,7 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
         return new DefaultTriangle(exterior);
     }
 
-    public static MultiPoint createMultiPoint(PointSequence sequence) {
+    public static MultiPoint createMultiPoint(DataPoints sequence) {
         return new DefaultMultiPoint(sequence);
     }
 
@@ -192,7 +192,7 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
         return new DefaultCompoundCurve(crs, curves);
     }
 
-    public static CircularString createCircularString(PointSequence sequence) {
+    public static CircularString createCircularString(DataPoints sequence) {
         return new DefaultCircularString(sequence);
     }
 
@@ -220,7 +220,7 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
      * @param  bulge   distance from the midpoint of the chord to the arc, along {@code normal}.
      * @param  normal  direction the arc bulges towards, perpendicular to the chord.
      */
-    public static ArcByBulge createArcByBulge(PointSequence points, double bulge, Vector<?> normal) {
+    public static ArcByBulge createArcByBulge(DataPoints points, double bulge, Vector<?> normal) {
         return new DefaultArcByBulge(points, bulge, normal);
     }
 
@@ -272,12 +272,12 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
         return new DefaultReversedSurface(base);
     }
 
-    public static PointSequence createSequence(Array positions) {
+    public static DataPoints createSequence(Array positions) {
         return createSequence(Collections.singletonMap(AttributesType.ATT_POSITION, positions));
     }
 
-    public static PointSequence createSequence(Map<String, Array> attributes) {
-        return new ArraySequence(attributes);
+    public static DataPoints createSequence(Map<String, Array> attributes) {
+        return new ArrayDataPoints(attributes);
     }
 
     // ////////////////////////////////////////////////////////////////////////
@@ -362,21 +362,21 @@ public final class GeometryFactory extends org.apache.sis.geometry.wrapper.Geome
 
     @Override
     public Point createPoint(boolean isFloat, Dimensions dimensions, DoubleBuffer coordinates) {
-        final ArraySequence points;
+        final ArrayDataPoints points;
 
         if (!dimensions.hasZ) {
             final SampleSystem ss = SampleSystem.ofSize(2);
             if (isFloat) {
-                points = new ArraySequence(NDArrays.of(ss, (float) coordinates.get(0), (float) coordinates.get(1)));
+                points = new ArrayDataPoints(NDArrays.of(ss, (float) coordinates.get(0), (float) coordinates.get(1)));
             } else {
-                points = new ArraySequence(NDArrays.of(ss, coordinates.get(0), coordinates.get(1)));
+                points = new ArrayDataPoints(NDArrays.of(ss, coordinates.get(0), coordinates.get(1)));
             }
         } else {
             final SampleSystem ss = SampleSystem.ofSize(3);
             if (isFloat) {
-                points = new ArraySequence(NDArrays.of(ss, (float) coordinates.get(0), (float) coordinates.get(1), (float) coordinates.get(2)));
+                points = new ArrayDataPoints(NDArrays.of(ss, (float) coordinates.get(0), (float) coordinates.get(1), (float) coordinates.get(2)));
             } else {
-                points = new ArraySequence(NDArrays.of(ss, coordinates.get(0), coordinates.get(1), coordinates.get(2)));
+                points = new ArrayDataPoints(NDArrays.of(ss, coordinates.get(0), coordinates.get(1), coordinates.get(2)));
             }
         }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
index 4e2bccf616..fb59c93d19 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
@@ -120,7 +120,7 @@ public class GeometryVisitor {
         }
     }
 
-    public void visit(PointSequence sequence) {
+    public void visit(DataPoints sequence) {
         for (int i = 0, n = sequence.size(); i < n; i++) {
             visit(sequence.getPoint(i));
         }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
index ef1abdadd5..4553a59472 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LineString.java
@@ -108,7 +108,7 @@ public interface LineString extends Curve {
 
     @Override
     default Envelope getEnvelope() {
-        PointSequence points = getDataPoints();
+        DataPoints points = getDataPoints();
         if (points.isEmpty()) {
             return null;
         }
@@ -118,7 +118,7 @@ public interface LineString extends Curve {
     @Override
     default String asText() {
         final StringBuilder sb = new StringBuilder("LINESTRING (");
-        final PointSequence points = getDataPoints();
+        final DataPoints points = getDataPoints();
         AbstractGeometry.toText(sb, points);
         sb.append(')');
         return sb.toString();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
index 3e281f2087..6653e45315 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/LinearRing.java
@@ -37,7 +37,7 @@ public interface LinearRing extends LineString {
     @Override
     default String asText() {
         final StringBuilder sb = new StringBuilder("LINEARRING (");
-        final PointSequence points = getDataPoints();
+        final DataPoints points = getDataPoints();
         for (int i = 0, n = points.size() ; i < n; i++) {
             final Tuple pt = points.getPosition(i);
             if (i > 0) sb.append(',');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
index 474f9878bb..addf68ed1c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
@@ -41,7 +41,7 @@ public interface MultiLineString extends MultiCurve<LineString> {
             if (k > 0) sb.append(',');
             sb.append('(');
             final LineString line = getGeometryN(k);
-            final PointSequence points = line.getDataPoints();
+            final DataPoints points = line.getDataPoints();
             for (int i = 0, n = points.size() ; i < n; i++) {
                 final Tuple pos = points.getPosition(i);
                 if (i > 0) sb.append(',');
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
index 9e226fb898..13bf30c526 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
@@ -43,8 +43,8 @@ public interface MultiPoint<T extends Point> extends GeometryCollection<T>{
     /**
      * View this multipoint as a point sequence
      */
-    default PointSequence asDataPoints() {
-        return new PointSequence() {
+    default DataPoints asDataPoints() {
+        return new DataPoints() {
             @Override
             public CoordinateReferenceSystem getCoordinateReferenceSystem() {
                 return MultiPoint.this.getCoordinateReferenceSystem();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
index d177155b2e..5e1c3d53d6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
@@ -56,8 +56,8 @@ public interface Point extends Primitive {
     /**
      * View this point as a single point sequence
      */
-    default PointSequence asPointSequence() {
-        return new PointSequence() {
+    default DataPoints asDataPoint() {
+        return new DataPoints() {
             @Override
             public CoordinateReferenceSystem getCoordinateReferenceSystem() {
                 return Point.this.getCoordinateReferenceSystem();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
index d1b1c7f33b..856943ae5b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
@@ -341,7 +341,7 @@ public interface PreparedTIN extends TIN {
                 final Iterator<Triangle> iterator = triangles.iterator();
                 while (iterator.hasNext()) {
                     final Triangle triangle = iterator.next();
-                    final PointSequence points = triangle.getExteriorRing().getDataPoints();
+                    final DataPoints points = triangle.getExteriorRing().getDataPoints();
                     final Tuple a = points.getPosition(0);
                     final Tuple b = points.getPosition(1);
                     final Tuple c = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
index c70e581062..2ea5c5b47c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
@@ -51,7 +51,7 @@ public interface TIN extends TriangulatedSurface<Triangle> {
                 sb.append(',');
             }
             sb.append("((");
-            final PointSequence points = triangle.getExteriorRing().getDataPoints();
+            final DataPoints points = triangle.getExteriorRing().getDataPoints();
             corner = points.getPosition(0);
             AbstractGeometry.toText(sb, corner);
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
index 4134b0891d..6bbaddb517 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
@@ -72,7 +72,7 @@ public interface Triangle extends Polygon {
 
     @Override
     default Envelope getEnvelope() {
-        final PointSequence exterior = getExteriorRing().getDataPoints();
+        final DataPoints exterior = getExteriorRing().getDataPoints();
         final Tuple<?> first = exterior.getPosition(0);
         final BBox env = new BBox(first, first);
         env.add(exterior.getPosition(1));
@@ -83,7 +83,7 @@ public interface Triangle extends Polygon {
 
     @Override
     default double getArea() {
-        final PointSequence points = getExteriorRing().getDataPoints();
+        final DataPoints points = getExteriorRing().getDataPoints();
         final Tuple<?> a = points.getPosition(0);
         final Tuple<?> b = points.getPosition(1);
         final Tuple<?> c = points.getPosition(2);
@@ -101,7 +101,7 @@ public interface Triangle extends Polygon {
      * @return point distance to triangle
      */
     default double distance(Tuple pt) {
-        final PointSequence exterior = getExteriorRing().getDataPoints();
+        final DataPoints exterior = getExteriorRing().getDataPoints();
         final Tuple<?> p0 = exterior.getPosition(0);
         final Tuple<?> p1 = exterior.getPosition(1);
         final Tuple<?> p2 = exterior.getPosition(2);
@@ -214,7 +214,7 @@ public interface Triangle extends Polygon {
 
     @Override
     default String asText() {
-        final PointSequence exterior = getExteriorRing().getDataPoints();
+        final DataPoints exterior = getExteriorRing().getDataPoints();
         final StringBuilder sb = new StringBuilder("TRIANGLE ((");
         AbstractGeometry.toText(sb, exterior.getPosition(0));
         sb.append(',');
@@ -265,7 +265,7 @@ public interface Triangle extends Polygon {
 
         @Override
         public Tuple getPosition() {
-            final PointSequence points = triangle.getExteriorRing().getDataPoints();
+            final DataPoints points = triangle.getExteriorRing().getDataPoints();
             switch (cornerIdx) {
                 case -1 :
                     return interpolate(
@@ -286,7 +286,7 @@ public interface Triangle extends Polygon {
          */
         @Override
         public Tuple getAttribute(String name) {
-            final PointSequence points = triangle.getExteriorRing().getDataPoints();
+            final DataPoints points = triangle.getExteriorRing().getDataPoints();
             switch (cornerIdx) {
                 case -1 :
                     return interpolate(
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
index 3b73d4f1d4..3c866e2e87 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
@@ -32,7 +32,7 @@ import org.opengis.filter.SpatialOperatorName;
 import org.opengis.filter.DistanceOperatorName;
 import org.apache.sis.filter.sqlmm.SQLMM;
 import org.apache.sis.geometries.math.Tuple;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.wrapper.Geometries;
 import org.apache.sis.geometry.wrapper.GeometryType;
@@ -308,7 +308,7 @@ public final class Wrapper extends GeometryWrapper {
     /**
      * View SIS Geometry as a JTS Geometry.
      * Only the matching JTS geometry types are supported.
-     * The created geometry references the original geometry PointSequences, so modifications
+     * The created geometry references the original geometry DataPoints, so modifications
      * are forwarded to the original but all metadata change, like the CRS, will not be preserved if changed
      * after the JTS view has been made.
      *
@@ -322,7 +322,7 @@ public final class Wrapper extends GeometryWrapper {
     /**
      * View SIS Geometry as a JTS Geometry.
      * Only the matching JTS geometry types are supported.
-     * The created geometry references the original geometry PointSequences, so modifications
+     * The created geometry references the original geometry DataPoints, so modifications
      * are forwarded to the original but all metadata change, like the CRS, will not be preserved if changed
      * after the JTS view has been made.
      *
@@ -335,7 +335,7 @@ public final class Wrapper extends GeometryWrapper {
         final org.locationtech.jts.geom.Geometry jts;
 
         if (geometry instanceof Point cdt){
-            jts = gf.createPoint(new JTSSequence(cdt.asPointSequence()));
+            jts = gf.createPoint(new JTSSequence(cdt.asDataPoint()));
         } else if (geometry instanceof LinearRing cdt) {
             jts = gf.createLinearRing(new JTSSequence(cdt.getDataPoints()));
         } else if (geometry instanceof LineString cdt) {
@@ -375,13 +375,13 @@ public final class Wrapper extends GeometryWrapper {
         return jts;
     }
     /**
-     * Decorate a PointSequence as a JTS CoordinateSequence
+     * Decorate a DataPoint as a JTS CoordinateSequence
      */
     private static class JTSSequence implements CoordinateSequence {
 
-        private final PointSequence ps;
+        private final DataPoints ps;
 
-        public JTSSequence(PointSequence ps) {
+        public JTSSequence(DataPoints ps) {
             this.ps = ps;
         }
 
@@ -455,7 +455,7 @@ public final class Wrapper extends GeometryWrapper {
 
         @Override
         public CoordinateSequence copy() {
-            final PointSequence cp = new ArraySequence(ps.getAttributeArray(AttributesType.ATT_POSITION));
+            final DataPoints cp = new ArrayDataPoints(ps.getAttributeArray(AttributesType.ATT_POSITION));
             return new JTSSequence(cp);
         }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
index eaf95556e9..2ba71918ab 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
@@ -30,7 +30,7 @@ import org.apache.sis.geometries.math.Vector;
 import org.apache.sis.geometries.math.Vectors;
 import org.apache.sis.geometries.math.Cursor;
 import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.locationtech.jts.geom.CoordinateXY;
 
 
@@ -62,16 +62,16 @@ public final class JTSAdapter {
         if (jts == null) {
             return null;
         } else if (jts instanceof org.locationtech.jts.geom.Point cdt) {
-            return GeometryFactory.createPoint(toPointSequence(cdt.getCoordinateSequence(), crs, copy));
+            return GeometryFactory.createPoint(toDataPoints(cdt.getCoordinateSequence(), crs, copy));
 
         } else if (jts instanceof org.locationtech.jts.geom.MultiPoint cdt) {
-            return GeometryFactory.createMultiPoint(toPointSequence(jts.getFactory().getCoordinateSequenceFactory().create(cdt.getCoordinates()), crs, copy));
+            return GeometryFactory.createMultiPoint(toDataPoints(jts.getFactory().getCoordinateSequenceFactory().create(cdt.getCoordinates()), crs, copy));
 
         } else if (jts instanceof org.locationtech.jts.geom.LinearRing cdt) {
-            return GeometryFactory.createLinearRing(toPointSequence(cdt.getCoordinateSequence(), crs, copy));
+            return GeometryFactory.createLinearRing(toDataPoints(cdt.getCoordinateSequence(), crs, copy));
 
         } else if (jts instanceof org.locationtech.jts.geom.LineString cdt) {
-            return GeometryFactory.createLineString(toPointSequence(cdt.getCoordinateSequence(), crs, copy));
+            return GeometryFactory.createLineString(toDataPoints(cdt.getCoordinateSequence(), crs, copy));
 
         } else if (jts instanceof org.locationtech.jts.geom.MultiLineString cdt) {
             final LineString[] strings = new LineString[cdt.getNumGeometries()];
@@ -119,7 +119,7 @@ public final class JTSAdapter {
         if (geom == null) {
             return null;
         } else if (geom instanceof Point cdt) {
-            final CoordinateSequence cs = toCoordinateSequence(cdt.asPointSequence(), copy, gf);
+            final CoordinateSequence cs = toCoordinateSequence(cdt.asDataPoint(), copy, gf);
             jts = new org.locationtech.jts.geom.Point(cs, gf);
         } else if (geom instanceof MultiPoint cdt) {
             final CoordinateSequence cs = toCoordinateSequence(cdt.asDataPoints(), copy, gf);
@@ -165,10 +165,10 @@ public final class JTSAdapter {
     }
 
     /**
-     * Convert JTS coordinate sequence to SIS PointSequence.
+     * Convert JTS coordinate sequence to SIS DataPoints.
      * @param copy if true create a copy of the coordinate sequence, otherwise create a view
      */
-    private static PointSequence toPointSequence(CoordinateSequence cs, CoordinateReferenceSystem crs, boolean copy) {
+    private static DataPoints toDataPoints(CoordinateSequence cs, CoordinateReferenceSystem crs, boolean copy) {
         final int size = cs.size();
         final int dimension = crs.getCoordinateSystem().getDimension();
 
@@ -186,13 +186,13 @@ public final class JTSAdapter {
                 }
                 i++;
             }
-            return new ArraySequence(positions);
+            return new ArrayDataPoints(positions);
         } else {
-            return new JTSSequence(cs, crs);
+            return new JTSDataPoints(cs, crs);
         }
     }
 
-    private static CoordinateSequence toCoordinateSequence(PointSequence ps, boolean copy, org.locationtech.jts.geom.GeometryFactory gf) {
+    private static CoordinateSequence toCoordinateSequence(DataPoints ps, boolean copy, org.locationtech.jts.geom.GeometryFactory gf) {
         final CoordinateReferenceSystem crs = ps.getCoordinateReferenceSystem();
         final int dimension = ps.getDimension();
         if (copy) {
@@ -211,14 +211,14 @@ public final class JTSAdapter {
         }
     }
 
-    private static class JTSSequence implements PointSequence {
+    private static class JTSDataPoints implements DataPoints {
 
         private final CoordinateSequence jts;
         private final CoordinateReferenceSystem crs;
         private final int dim;
         private final AttributesType type;
 
-        private JTSSequence(CoordinateSequence jts, CoordinateReferenceSystem crs) {
+        private JTSDataPoints(CoordinateSequence jts, CoordinateReferenceSystem crs) {
             this.jts = jts;
             this.crs = crs;
             this.dim = jts.getDimension();
@@ -293,10 +293,10 @@ public final class JTSAdapter {
      */
     private static class JTSPoint implements Point {
 
-        private final JTSSequence parent;
+        private final JTSDataPoints parent;
         private final int index;
 
-        public JTSPoint(JTSSequence geometry, int index) {
+        public JTSPoint(JTSDataPoints geometry, int index) {
             this.parent = geometry;
             this.index = index;
         }
@@ -346,9 +346,9 @@ public final class JTSAdapter {
 
     private static class SISSequence implements CoordinateSequence {
 
-        private final PointSequence points;
+        private final DataPoints points;
 
-        public SISSequence(PointSequence points) {
+        public SISSequence(DataPoints points) {
             this.points = points;
         }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
index 93fb55d4c7..b0bdad4b9f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
@@ -25,11 +25,11 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -49,13 +49,13 @@ final class PathIteratorAdapter implements PathIterator {
     /**
      * Provider of point sequences.
      */
-    private final Iterator<PointSequence> sequences;
+    private final Iterator<DataPoints> sequences;
 
     /**
      * The sequence of point tuples to return,
      * or {@code null} if the iteration is finished.
      */
-    private PointSequence coordinates;
+    private DataPoints coordinates;
 
     /**
      * Number of points to return in the sequence.
@@ -175,12 +175,12 @@ final class PathIteratorAdapter implements PathIterator {
      * @param  geometry  the geometry for which to get coordinate sequences.
      * @return coordinate sequences over the given geometry.
      */
-    private static Iterator<PointSequence> iterator(final Geometry geometry) {
-        final Collection<PointSequence> sequences;
+    private static Iterator<DataPoints> iterator(final Geometry geometry) {
+        final Collection<DataPoints> sequences;
         if (geometry instanceof LineString) {
             sequences = List.of(((LineString) geometry).getDataPoints());
         } else if (geometry instanceof Point) {
-            sequences = List.of(((Point) geometry).asPointSequence());
+            sequences = List.of(((Point) geometry).asDataPoint());
         } else if (geometry instanceof Polygon) {
             return new RingIterator((Polygon) geometry);
         } else if (geometry instanceof GeometryCollection) {
@@ -196,7 +196,7 @@ final class PathIteratorAdapter implements PathIterator {
      * The first coordinate sequence is the exterior ring and
      * all other sequences are interior rings.
      */
-    private static final class RingIterator implements Iterator<PointSequence> {
+    private static final class RingIterator implements Iterator<DataPoints> {
         /** The polygon for which to return rings. */
         private final Polygon polygon;
 
@@ -215,7 +215,7 @@ final class PathIteratorAdapter implements PathIterator {
         }
 
         /** Returns the coordinate sequence of the next ring. */
-        @Override public PointSequence next() {
+        @Override public DataPoints next() {
             final LineString current;
             if (interior < 0) {
                 current = polygon.getExteriorRing();
@@ -230,7 +230,7 @@ final class PathIteratorAdapter implements PathIterator {
     /**
      * An iterator over the coordinate sequences of a geometry collection.
      */
-    private static final class GeomIterator implements Iterator<PointSequence> {
+    private static final class GeomIterator implements Iterator<DataPoints> {
         /** The collection for which to return geometries. */
         private final GeometryCollection collection;
 
@@ -238,7 +238,7 @@ final class PathIteratorAdapter implements PathIterator {
         private int index;
 
         /** Coordinate sequences of the current geometry. */
-        private Iterator<PointSequence> current;
+        private Iterator<DataPoints> current;
 
         /** Created a new iterator for the given collection. */
         GeomIterator(final GeometryCollection collection) {
@@ -262,7 +262,7 @@ final class PathIteratorAdapter implements PathIterator {
         }
 
         /** Returns the coordinate sequence of the next geometry. */
-        @Override public PointSequence next() {
+        @Override public DataPoints next() {
             return current.next();
         }
     }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
index c34fb3a600..f712e2871b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
@@ -27,8 +27,7 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.DataType;
 import org.apache.sis.geometries.math.NDArrays;
@@ -37,6 +36,7 @@ import org.apache.sis.geometry.wrapper.j2d.EmptyShape;
 import org.apache.sis.referencing.internal.shared.AbstractShape;
 import org.apache.sis.referencing.internal.shared.IntervalRectangle;
 import org.opengis.geometry.Envelope;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -154,7 +154,7 @@ public final class ShapeAdapter extends AbstractShape {
             xmax, ymin,
             xmin, ymin
         });
-        final PointSequence ps = new ArraySequence(positions);
+        final DataPoints ps = new ArrayDataPoints(positions);
         final LinearRing ring = GeometryFactory.createLinearRing(ps);
         return GeometryFactory.createPolygon(ring, null);
     }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
index 7546d296a1..a1eaf7622d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
@@ -27,13 +27,13 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Surface;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.referencing.internal.shared.AbstractShape;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -154,13 +154,13 @@ public abstract class ShapeConverter {
         }
 
         /** Returns a copy of current coordinate values as a SIS coordinate sequence. */
-        @Override PointSequence toSequence(final boolean close) {
+        @Override DataPoints toSequence(final boolean close) {
             if (close && !Arrays.equals(buffer, 0, 2, buffer, length - 2, length)) {
                 addPoint(buffer);
             }
 
             final Array array = NDArrays.of(SampleSystem.cartesian(2), Arrays.copyOf(buffer, length));
-            return new ArraySequence(array);
+            return new ArrayDataPoints(array);
         }
     }
 
@@ -202,12 +202,12 @@ public abstract class ShapeConverter {
         }
 
         /** Returns a copy of current coordinate values as a SIS coordinate sequence. */
-        @Override PointSequence toSequence(final boolean close) {
+        @Override DataPoints toSequence(final boolean close) {
             if (close && !Arrays.equals(buffer, 0, 2, buffer, length - 2, length)) {
                 addPoint(buffer);
             }
             final Array array = NDArrays.of(SampleSystem.cartesian(2), Arrays.copyOf(buffer, length));
-            return new ArraySequence(array);
+            return new ArrayDataPoints(array);
         }
     }
 
@@ -231,7 +231,7 @@ public abstract class ShapeConverter {
      * @param  close  whether to ensure that the first point is repeated as the last point.
      * @return a SIS coordinate sequence containing a copy of current coordinate values.
      */
-    abstract PointSequence toSequence(boolean close);
+    abstract DataPoints toSequence(boolean close);
 
     /**
      * Iterates over all coordinates given by the {@link #iterator} and stores them in a SIS geometry.
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
index 95b18f3891..5a66f80ca3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Arc.java
@@ -17,11 +17,11 @@
 package org.apache.sis.geometries.conics;
 
 import java.util.List;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -40,7 +40,7 @@ public interface Arc extends Conic {
 
     @UML(identifier="dataPoints", specification=ISO_19107) // section 7.9.2.4
     @Override
-    PointSequence getDataPoints();
+    DataPoints getDataPoints();
 
     @UML(identifier="radius", specification=ISO_19107) // section 7.9.2.5
     List<Vector> getRadius();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
index d3d1530ed1..9d288ae7d2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/CircularString.java
@@ -21,8 +21,8 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -67,7 +67,7 @@ public interface CircularString extends Curve {
      * @return the control points, never null. Its size is odd and at least 3, or 0 if empty.
      */
     @Override
-    PointSequence getDataPoints();
+    DataPoints getDataPoints();
 
     /**
      * @return null, a CircularString has no control points
@@ -109,7 +109,7 @@ public interface CircularString extends Curve {
 
     @Override
     default boolean isClosed() {
-        final PointSequence points = getDataPoints();
+        final DataPoints points = getDataPoints();
         final int size = points.size();
         if (size == 0) {
             return false;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
index f7275e7923..0fd7603870 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/conics/Conic.java
@@ -19,8 +19,8 @@ package org.apache.sis.geometries.conics;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -32,7 +32,7 @@ public interface Conic extends Curve {
 
     @UML(identifier="dataPoints", specification=ISO_19107) // section 7.9.5.2
     @Override
-    PointSequence getDataPoints();
+    DataPoints getDataPoints();
     
     @UML(identifier="controlPoints", specification=ISO_19107) // section 7.9.5.2
     @Override
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
index 80d08a36a2..2c8f980769 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
@@ -21,9 +21,9 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -55,7 +55,7 @@ public interface ArcByBulge extends Curve {
      * @return the start and end points, never null and always of size 2.
      */
     @Override
-    PointSequence getDataPoints();
+    DataPoints getDataPoints();
 
     /**
      * Returns the distance from the midpoint of the chord joining the two end points to the arc,
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
index ed9bcfaa9a..1f37ad75af 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
@@ -22,8 +22,8 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -104,7 +104,7 @@ public interface ArcByCenterPoint extends Curve {
     }
 
     @Override
-    public default PointSequence getDataPoints() {
+    public default DataPoints getDataPoints() {
         throw new UnsupportedOperationException("Not supported yet");
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
index d765953328..8ce0480fd7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
@@ -19,12 +19,12 @@ package org.apache.sis.geometries.internal.shared;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Cursor;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.opengis.geometry.Envelope;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -69,7 +69,7 @@ public abstract class AbstractGeometry implements Geometry {
         }
     }
 
-    public static void toText(StringBuilder sb, PointSequence array) {
+    public static void toText(StringBuilder sb, DataPoints array) {
         final int size = array.size();
         if (size == 0) return;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArraySequence.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
similarity index 94%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArraySequence.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
index a7ab7bd092..77cabddb79 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArraySequence.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
@@ -21,12 +21,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.DataType;
 import org.apache.sis.geometries.math.Tuple;
@@ -34,22 +32,23 @@ import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Cursor;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
  *
  * @author Johann Sorel (Geomatys)
  */
-public final class ArraySequence implements PointSequence, AttributesType {
+public final class ArrayDataPoints implements DataPoints, AttributesType {
 
     private Array positions;
     private final Map<String,Array> attributes = new HashMap<>(1);
 
-    public ArraySequence(Array positions) {
+    public ArrayDataPoints(Array positions) {
         this(Collections.singletonMap(AttributesType.ATT_POSITION, positions));
     }
 
-    public ArraySequence(Map<String, Array> attributes) {
+    public ArrayDataPoints(Map<String, Array> attributes) {
         this.attributes.putAll(attributes);
         this.positions = attributes.get(AttributesType.ATT_POSITION);
         ArgumentChecks.ensureNonNull("positions", this.positions);
@@ -167,10 +166,10 @@ public final class ArraySequence implements PointSequence, AttributesType {
      */
     public static class Indexed implements Point {
 
-        private final ArraySequence parent;
+        private final ArrayDataPoints parent;
         private final int index;
 
-        public Indexed(ArraySequence geometry, int index) {
+        public Indexed(ArrayDataPoints geometry, int index) {
             this.parent = geometry;
             this.index = index;
         }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
index 54f09dc058..4a26fb49eb 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
@@ -17,9 +17,9 @@
 package org.apache.sis.geometries.internal.shared;
 
 import org.opengis.geometry.Envelope;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -28,7 +28,7 @@ import org.apache.sis.geometries.math.Vector;
  */
 public class DefaultArcByBulge extends AbstractGeometry implements ArcByBulge {
 
-    private final PointSequence points;
+    private final DataPoints points;
     private final double bulge;
     private final Vector<?> normal;
 
@@ -41,7 +41,7 @@ public class DefaultArcByBulge extends AbstractGeometry implements ArcByBulge {
      * @throws IllegalArgumentException if the number of points is not 2, if the bulge is not a
      *         real number, or if no normal is given.
      */
-    public DefaultArcByBulge(final PointSequence points, final double bulge, final Vector<?> normal) {
+    public DefaultArcByBulge(final DataPoints points, final double bulge, final Vector<?> normal) {
         if (points == null || points.size() != 2) {
             throw new IllegalArgumentException("An arc by bulge is defined by exactly 2 points"
                     + " (its start and its end), but got " + ((points != null) ? points.size() : 0) + '.');
@@ -59,7 +59,7 @@ public class DefaultArcByBulge extends AbstractGeometry implements ArcByBulge {
     }
 
     @Override
-    public PointSequence getDataPoints() {
+    public DataPoints getDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
index 04fd89e57f..070e3587a5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.conics.CircularString;
 import org.opengis.geometry.Envelope;
+import org.apache.sis.geometries.DataPoints;
 
 /**
  * A curve made of circular arcs, each defined by three of the control points.
@@ -27,7 +27,7 @@ import org.opengis.geometry.Envelope;
  */
 public class DefaultCircularString extends AbstractGeometry implements CircularString {
 
-    private final PointSequence points;
+    private final DataPoints points;
 
     /**
      * Creates a circular string from the given control points.
@@ -36,7 +36,7 @@ public class DefaultCircularString extends AbstractGeometry implements CircularS
      *                 point. Its size must be odd and at least 3, or 0 for an empty circular string.
      * @throws IllegalArgumentException if the number of points cannot describe a whole number of arcs.
      */
-    public DefaultCircularString(PointSequence points) {
+    public DefaultCircularString(DataPoints points) {
         final int size = points.size();
         if (size != 0 && (size < 3 || (size % 2) == 0)) {
             throw new IllegalArgumentException("A circular string needs an odd number of at least 3 points "
@@ -46,7 +46,7 @@ public class DefaultCircularString extends AbstractGeometry implements CircularS
     }
 
     @Override
-    public PointSequence getDataPoints() {
+    public DataPoints getDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
index 02fd790bc0..1a743fe4ec 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
@@ -21,8 +21,8 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.CompoundCurve;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Array;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -112,7 +112,7 @@ public class DefaultCompoundCurve extends AbstractGeometry implements CompoundCu
     }
 
     @Override
-    public PointSequence getDataPoints() {
+    public DataPoints getDataPoints() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPointSequence.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
similarity index 90%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPointSequence.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
index 9c8ba267f4..1fe84eb74d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPointSequence.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
@@ -21,28 +21,28 @@ import java.util.List;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
- * Point sequence backed by a list of Point.
+ * Datas points backed by a list of Point.
  * @author Johann Sorel (Geomatys)
  */
-public final class DefaultPointSequence implements PointSequence {
+public final class DefaultDataPoints implements DataPoints {
 
     private final List<Point> points;
 
     /**
      * @param points list will be used directly.
      */
-    public DefaultPointSequence(List<Point> points) {
+    public DefaultDataPoints(List<Point> points) {
         ArgumentChecks.ensureNonEmpty("points", points);
         this.points = points;
     }
 
-    public DefaultPointSequence(Point... points) {
+    public DefaultDataPoints(Point... points) {
         this(Arrays.asList(points));
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
index 4edcf32b76..4ba9337abc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries.internal.shared;
 
 import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.PointSequence;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -26,9 +26,9 @@ import org.apache.sis.geometries.PointSequence;
  */
 public class DefaultLineString extends AbstractGeometry implements LineString {
 
-    private final PointSequence points;
+    private final DataPoints points;
 
-    public DefaultLineString(PointSequence points) {
+    public DefaultLineString(DataPoints points) {
         this.points = points;
     }
 
@@ -38,7 +38,7 @@ public class DefaultLineString extends AbstractGeometry implements LineString {
     }
 
     @Override
-    public PointSequence getDataPoints() {
+    public DataPoints getDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
index e93b9badff..139592ade9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries.internal.shared;
 
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -27,7 +27,7 @@ import org.apache.sis.geometries.PointSequence;
  */
 public class DefaultLinearRing extends DefaultLineString implements LinearRing{
 
-    public DefaultLinearRing(PointSequence points) {
+    public DefaultLinearRing(DataPoints points) {
         super(points);
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
index ec3ab6f861..3615896438 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
@@ -21,7 +21,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -30,9 +30,9 @@ import org.apache.sis.geometries.PointSequence;
  */
 public class DefaultMultiPoint extends AbstractGeometry implements MultiPoint<Point> {
 
-    private final PointSequence points;
+    private final DataPoints points;
 
-    public DefaultMultiPoint(PointSequence points) {
+    public DefaultMultiPoint(DataPoints points) {
         this.points = points;
     }
 
@@ -67,7 +67,7 @@ public class DefaultMultiPoint extends AbstractGeometry implements MultiPoint<Po
     }
 
     @Override
-    public PointSequence asDataPoints() {
+    public DataPoints asDataPoints() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
index c4b56b87fd..6e1d19b8ae 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
@@ -20,11 +20,11 @@ import java.util.Objects;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.DataType;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.NDArrays;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -34,29 +34,29 @@ import org.apache.sis.geometries.math.NDArrays;
  */
 public class DefaultPoint extends AbstractGeometry implements Point {
 
-    private final PointSequence points;
+    private final DataPoints points;
 
     /**
      * @param crs geometry coordinate system, not null.
      */
     public DefaultPoint(CoordinateReferenceSystem crs) {
-        points = new ArraySequence(NDArrays.of(SampleSystem.of(crs), DataType.DOUBLE, 1));
+        points = new ArrayDataPoints(NDArrays.of(SampleSystem.of(crs), DataType.DOUBLE, 1));
     }
 
     public DefaultPoint(Tuple position) {
-        points = new ArraySequence(NDArrays.of(position.getSampleSystem(), position.getDataType(), 1));
+        points = new ArrayDataPoints(NDArrays.of(position.getSampleSystem(), position.getDataType(), 1));
         points.setPosition(0, position);
     }
 
     public DefaultPoint(CoordinateReferenceSystem crs, double... position) {
-        points = new ArraySequence(NDArrays.of(crs, position));
+        points = new ArrayDataPoints(NDArrays.of(crs, position));
     }
 
     public DefaultPoint(SampleSystem ss, double... position) {
-        points = new ArraySequence(NDArrays.of(ss, position));
+        points = new ArrayDataPoints(NDArrays.of(ss, position));
     }
 
-    public DefaultPoint(PointSequence ps) {
+    public DefaultPoint(DataPoints ps) {
         if (ps.size() != 1) {
             throw new IllegalArgumentException("Point sequence must contain one point");
         }
@@ -64,7 +64,7 @@ public class DefaultPoint extends AbstractGeometry implements Point {
     }
 
     @Override
-    public PointSequence asPointSequence() {
+    public DataPoints asDataPoint() {
         return points;
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
index 8691a0bcb2..bbce828cff 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
@@ -24,9 +24,9 @@ import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Primitive;
 import org.apache.sis.geometries.math.Array;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -138,7 +138,7 @@ public class DefaultReversedCurve extends AbstractGeometry implements Curve {
     }
 
     @Override
-    public PointSequence getDataPoints() {
+    public DataPoints getDataPoints() {
         return base.getDataPoints();
     }
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
index ecd8900166..c2d1a55e59 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
@@ -18,8 +18,8 @@ package org.apache.sis.geometries.internal.shared;
 
 import java.util.Objects;
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -34,7 +34,7 @@ public class DefaultTriangle extends DefaultPolygon implements Triangle {
      */
     public DefaultTriangle(LinearRing exterior) {
         super(exterior);
-        final PointSequence points = exterior.getDataPoints();
+        final DataPoints points = exterior.getDataPoints();
         final int size = points.size();
         switch (size) {
             case 0: //empty triangle
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
index 328bd23280..5f66b7c1f0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
@@ -41,7 +41,6 @@ import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.DataType;
@@ -58,6 +57,7 @@ import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.collection.Containers;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -794,7 +794,7 @@ public interface MeshPrimitive extends Geometry {
 
                 @Override
                 protected void visit(Triangle candidate) {
-                    final PointSequence points = candidate.getExteriorRing().getDataPoints();
+                    final DataPoints points = candidate.getExteriorRing().getDataPoints();
                     long idx0 = ((MeshPrimitive.Vertex)points.getPoint(0)).getIndex();
                     long idx1 = ((MeshPrimitive.Vertex)points.getPoint(1)).getIndex();
                     long idx2 = ((MeshPrimitive.Vertex)points.getPoint(2)).getIndex();
@@ -828,7 +828,7 @@ public interface MeshPrimitive extends Geometry {
 
                 @Override
                 protected void visit(LineString candidate) {
-                    final PointSequence points = candidate.getDataPoints();
+                    final DataPoints points = candidate.getDataPoints();
                     long idx0 = ((MeshPrimitive.Vertex)points.getPoint(0)).getIndex();
                     long idx1 = ((MeshPrimitive.Vertex)points.getPoint(1)).getIndex();
                     positions.get(idx0, pos0);
@@ -1051,7 +1051,7 @@ public interface MeshPrimitive extends Geometry {
         }
     }
 
-    public static final class Sequence implements PointSequence {
+    public static final class Sequence implements DataPoints {
 
         private final Abs primitive;
         public final int[] index;
@@ -1159,7 +1159,7 @@ public interface MeshPrimitive extends Geometry {
         }
 
         @Override
-        public PointSequence getDataPoints() {
+        public DataPoints getDataPoints() {
             //select all points, duplicate first point as last
             int[] indices;
             if (index == null) {
@@ -1181,7 +1181,7 @@ public interface MeshPrimitive extends Geometry {
         }
 
         @Override
-        public PointSequence getDataPoints() {
+        public DataPoints getDataPoints() {
             final int[] indices;
             if (index == null) {
                 indices = new int[Math.toIntExact(getPositions().getLength())];
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
index 622f28f802..56713299af 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
@@ -24,12 +24,12 @@ import java.util.Objects;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.referencing.CRS;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -254,12 +254,12 @@ public final class MeshPrimitiveComparator {
     private static boolean isDegenerated(Object candidate) {
         if (candidate instanceof LineString) {
             final LineString cdt = (LineString) candidate;
-            final PointSequence points = cdt.getDataPoints();
+            final DataPoints points = cdt.getDataPoints();
             return points.getPosition(0).equals(points.getPosition(1));
 
         } else if (candidate instanceof Triangle) {
             final Triangle cdt = (Triangle) candidate;
-            final PointSequence points = cdt.getExteriorRing().getDataPoints();
+            final DataPoints points = cdt.getExteriorRing().getDataPoints();
             final Tuple c0 = points.getPosition(0);
             final Tuple c1 = points.getPosition(1);
             final Tuple c2 = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
index 80361048ce..6cd423c814 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
@@ -21,12 +21,12 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Cursor;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -204,7 +204,7 @@ public abstract class MeshPrimitiveVisitor {
      * Override this method to process a triangle.
      */
     protected void visit(Triangle candidate) {
-        final PointSequence points = candidate.getExteriorRing().getDataPoints();
+        final DataPoints points = candidate.getExteriorRing().getDataPoints();
         visit((MeshPrimitive.Vertex) points.getPoint(0));
         visit((MeshPrimitive.Vertex) points.getPoint(1));
         visit((MeshPrimitive.Vertex) points.getPoint(2));
@@ -214,7 +214,7 @@ public abstract class MeshPrimitiveVisitor {
      * Override this method to process a line.
      */
     protected void visit(LineString candidate) {
-        final PointSequence points = candidate.getDataPoints();
+        final DataPoints points = candidate.getDataPoints();
         visit((MeshPrimitive.Vertex) points.getPoint(0));
         visit((MeshPrimitive.Vertex) points.getPoint(1));
     }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
index c20a2661c1..8573ae6f55 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
@@ -31,7 +31,7 @@ import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.PreparedTIN;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.internal.shared.DefaultPointSequence;
+import org.apache.sis.geometries.internal.shared.DefaultDataPoints;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
@@ -182,7 +182,7 @@ public final class Intersection {
                         final double[] bary2 = Triangle.getBarycentricValue2D(x1, y1, x2, y2, x3, y3, p2.get(0), p2.get(1), 0.0, false);
                         final Point point1 = triangle.interpolate(bary1);
                         final Point point2 = triangle.interpolate(bary2);
-                        segments.add(GeometryFactory.createLineString(new DefaultPointSequence(point1, point2)));
+                        segments.add(GeometryFactory.createLineString(new DefaultDataPoints(point1, point2)));
                     }
                 }
             } catch (TransformException ex) {
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
index 2aef6747d7..b974153ad9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
@@ -25,16 +25,16 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Cursor;
 import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -52,17 +52,17 @@ public final class To3D {
         }
     }
 
-    private static ArraySequence copy(PointSequence ps) {
+    private static ArrayDataPoints copy(DataPoints ps) {
         final Map<String,Array> attributes = new HashMap<>();
         for (String name : ps.getAttributesType().getAttributeNames()) {
             attributes.put(name, ps.getAttributeArray(name).copy());
         }
-        return new ArraySequence(attributes);
+        return new ArrayDataPoints(attributes);
     }
 
-    private static ArraySequence to3d(PointSequence base, CoordinateReferenceSystem crs3d, Consumer<Tuple> Zeditor) {
+    private static ArrayDataPoints to3d(DataPoints base, CoordinateReferenceSystem crs3d, Consumer<Tuple> Zeditor) {
 
-        final ArraySequence ps = copy(base);
+        final ArrayDataPoints ps = copy(base);
 
         if (Zeditor == null) {
             Zeditor = (Tuple t) -> t.set(2, 0.0);
@@ -119,7 +119,7 @@ public final class To3D {
      * Add Z axis to Point.
      */
     public static Point to3D(Point base, CoordinateReferenceSystem crs3d, Consumer<Tuple> zeditor) {
-        final PointSequence copy3d = to3d(base.asPointSequence(), crs3d, zeditor);
+        final DataPoints copy3d = to3d(base.asDataPoint(), crs3d, zeditor);
         return GeometryFactory.createPoint(copy3d);
     }
 
@@ -127,7 +127,7 @@ public final class To3D {
      * Add Z axis to LineString.
      */
     public static LineString to3D(LineString base, CoordinateReferenceSystem crs3d, Consumer<Tuple> zeditor) {
-        final PointSequence copy3d = to3d(base.getDataPoints(), crs3d, zeditor);
+        final DataPoints copy3d = to3d(base.getDataPoints(), crs3d, zeditor);
         return GeometryFactory.createLineString(copy3d);
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
index 113bc64288..f42dd656af 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
@@ -26,14 +26,14 @@ import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.geometries.operation.triangulate.EarClipping;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -44,12 +44,12 @@ public final class ToPrimitive {
 
     private ToPrimitive(){}
 
-    private static ArraySequence toArraySequence(PointSequence points) {
+    private static ArrayDataPoints toArraySequence(DataPoints points) {
         final Map<String,Array> attributes = new HashMap<>();
         for (String name : points.getAttributesType().getAttributeNames()) {
             attributes.put(name, points.getAttributeArray(name));
         }
-        return new ArraySequence(attributes);
+        return new ArrayDataPoints(attributes);
     }
 
     /**
@@ -71,7 +71,7 @@ public final class ToPrimitive {
      */
     public static MeshPrimitive.LineStrip toPrimitive(LineString geometry) throws OperationException {
         final MeshPrimitive.LineStrip primitive = new MeshPrimitive.LineStrip();
-        final ArraySequence array = toArraySequence(geometry.getDataPoints());
+        final ArrayDataPoints array = toArraySequence(geometry.getDataPoints());
         for (String name : array.getAttributeNames()) {
             primitive.setAttribute(name, array.getAttribute(name));
         }
@@ -90,7 +90,7 @@ public final class ToPrimitive {
      * Transform MultiPoint to Primitive.
      */
     public static MeshPrimitive.Points toPrimitive(MultiPoint geometry) throws OperationException {
-        final ArraySequence array = toArraySequence(geometry.asDataPoints());
+        final ArrayDataPoints array = toArraySequence(geometry.asDataPoints());
         final MeshPrimitive.Points primitive = new MeshPrimitive.Points();
         for (String name : array.getAttributeNames()) {
             primitive.setAttribute(name, array.getAttribute(name));
@@ -118,7 +118,7 @@ public final class ToPrimitive {
 
             for (int i = 0, k = 0; i < numGeometries; i++, k += 2) {
                 final org.apache.sis.geometries.LineString line = geometry.getGeometryN(i);
-                final PointSequence points = line.getDataPoints();
+                final DataPoints points = line.getDataPoints();
                 for (String name : attributesType.getAttributeNames()) {
                     Array att = primitive.getAttribute(name);
                     att.set(k, points.getAttribute(0, name));
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
index b0bf221c01..1a6d9834ac 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
@@ -24,7 +24,6 @@ import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.SampleSystem;
@@ -32,12 +31,13 @@ import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.Vector;
 import org.apache.sis.geometries.math.Vectors;
 import org.apache.sis.geometries.math.Array;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.MathTransform;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -79,10 +79,10 @@ public final class Transform {
 
     public static LinearRing transform(LinearRing r, CoordinateReferenceSystem crs, MathTransform transform) throws OperationException {
 
-        PointSequence ps = r.getDataPoints();
+        DataPoints ps = r.getDataPoints();
         final Array reference = ps.getAttributeArray(AttributesType.ATT_POSITION);
         final Array positions = transform(reference, crs, transform);
-        final ArraySequence cp = new ArraySequence(positions);
+        final ArrayDataPoints cp = new ArrayDataPoints(positions);
         for (String name : ps.getAttributesType().getAttributeNames()) {
             if (!AttributesType.ATT_POSITION.equals(name)) {
                 cp.setAttribute(name, ps.getAttributeArray(name).copy());
@@ -186,11 +186,11 @@ public final class Transform {
     }
 
     public static Triangle transform(Triangle p, CoordinateReferenceSystem crs, MathTransform transform) throws OperationException {
-        final PointSequence ps = p.getExteriorRing().getDataPoints();
+        final DataPoints ps = p.getExteriorRing().getDataPoints();
 
         final Array reference = ps.getAttributeArray(AttributesType.ATT_POSITION);
         final Array positions = transform(reference, crs, transform);
-        final ArraySequence cp = new ArraySequence(positions);
+        final ArrayDataPoints cp = new ArrayDataPoints(positions);
         for (String name : ps.getAttributesType().getAttributeNames()) {
             if (!AttributesType.ATT_POSITION.equals(name)) {
                 cp.setAttribute(name, ps.getAttributeArray(name).copy());
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
index b7f4ee3db3..1d01b6fe55 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
@@ -31,7 +31,6 @@ import java.util.logging.Logger;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.Maths;
 import org.apache.sis.geometries.math.Tuple;
@@ -40,6 +39,7 @@ import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -124,7 +124,7 @@ public final class TINBuilder {
         for (int i = 0, n = finished.size(); i < n; i++) {
             final WTriangle t = finished.get(i);
             final Array positions = NDArrays.of(Arrays.asList(t.p0, t.p1, t.p2, t.p0), t.p0.getSampleSystem(), t.p0.getDataType());
-            final PointSequence points = GeometryFactory.createSequence(positions);
+            final DataPoints points = GeometryFactory.createSequence(positions);
             final LinearRing exterior = GeometryFactory.createLinearRing(points);
             triangles.add(GeometryFactory.createTriangle(exterior));
         }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
index 44ca406453..9593102321 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
@@ -17,11 +17,11 @@
 package org.apache.sis.geometries.operation.simplify.greedyinsert;
 
 import java.util.function.BiFunction;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.math.Maths;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Vector;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -32,7 +32,7 @@ final class TinDistance implements BiFunction<Tuple,Triangle,Double> {
 
     @Override
     public Double apply(Tuple pt, Triangle triangle) {
-        final PointSequence points = triangle.getExteriorRing().getDataPoints();
+        final DataPoints points = triangle.getExteriorRing().getDataPoints();
         final Tuple p0 = points.getPosition(0);
         final Tuple p1 = points.getPosition(1);
         final Tuple p2 = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
index f67b94eb31..65acf3f355 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
@@ -23,13 +23,13 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.math.Maths;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.operation.OperationException;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -39,7 +39,7 @@ import org.apache.sis.geometries.operation.OperationException;
  */
 final class WTriangle extends AbstractGeometry implements Triangle {
 
-    private final LinearRing ring = GeometryFactory.createLinearRing(new PointSequence() {
+    private final LinearRing ring = GeometryFactory.createLinearRing(new DataPoints() {
         @Override
         public CoordinateReferenceSystem getCoordinateReferenceSystem() {
             return p0.getCoordinateReferenceSystem();
@@ -62,7 +62,7 @@ final class WTriangle extends AbstractGeometry implements Triangle {
 
         @Override
         public Point getPoint(final int index) {
-            final PointSequence ps = this;
+            final DataPoints ps = this;
             switch (index) {
                 case 0 :
                 case 1 :
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
index 64e6bc0059..8a97cf1701 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
@@ -28,7 +28,6 @@ import org.locationtech.jts.geom.TopologyException;
 import org.locationtech.jts.geom.impl.PackedCoordinateSequence;
 import org.locationtech.jts.geom.impl.PackedCoordinateSequenceFactory;
 import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
@@ -36,6 +35,7 @@ import static org.apache.sis.geometries.operation.spatialanalysis2d.ISOLine.inte
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.measure.NumberRange;
 import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -79,7 +79,7 @@ public final class ISOBand {
         final MeshPrimitiveVisitor visitor = new MeshPrimitiveVisitor(triangles) {
             @Override
             protected void visit(Triangle candidate) {
-                final PointSequence points = candidate.getExteriorRing().getDataPoints();
+                final DataPoints points = candidate.getExteriorRing().getDataPoints();
                 Tuple t0 = points.getPosition(0);
                 Tuple t1 = points.getPosition(1);
                 Tuple t2 = points.getPosition(2);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
index f6858aa876..ddc33a15b2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
@@ -22,7 +22,6 @@ import java.util.List;
 import org.locationtech.jts.geom.Coordinate;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
@@ -34,6 +33,7 @@ import org.apache.sis.geometries.math.Vectors;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -55,7 +55,7 @@ public final class ISOLine {
         final MeshPrimitiveVisitor visitor = new MeshPrimitiveVisitor(triangles) {
             @Override
             protected void visit(Triangle candidate) {
-                final PointSequence points = candidate.getExteriorRing().getDataPoints();
+                final DataPoints points = candidate.getExteriorRing().getDataPoints();
                 final double[] p0 = points.getPosition(0).toArrayDouble();
                 final double[] p1 = points.getPosition(1).toArrayDouble();
                 final double[] p2 = points.getPosition(2).toArrayDouble();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
index 4c01968fe8..5aaeef6de1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
@@ -21,12 +21,12 @@ import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.LineString;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.math.Maths;
 import org.apache.sis.geometries.math.Tuple;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -35,7 +35,7 @@ import org.apache.sis.geometries.math.Tuple;
  *
  * @author Johann Sorel (Geomatys)
  */
-final class OrientedEdge extends AbstractGeometry implements LineString, PointSequence {
+final class OrientedEdge extends AbstractGeometry implements LineString, DataPoints {
 
     /**
      * Structure is shared by the two opposite directional edges.
@@ -181,7 +181,7 @@ final class OrientedEdge extends AbstractGeometry implements LineString, PointSe
     }
 
     @Override
-    public PointSequence getDataPoints() {
+    public DataPoints getDataPoints() {
         return this;
     }
 
@@ -197,7 +197,7 @@ final class OrientedEdge extends AbstractGeometry implements LineString, PointSe
     }
 
     ////////////////////////////////////////////////////////////////////////////
-    // PointSequence ///////////////////////////////////////////////////////////
+    // DataPoint ///////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////
 
     @Override
@@ -222,7 +222,7 @@ final class OrientedEdge extends AbstractGeometry implements LineString, PointSe
      */
     @Override
     public Envelope getEnvelope() {
-        return PointSequence.super.getEnvelope();
+        return DataPoints.super.getEnvelope();
     }
 
     @Override
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
index 244d4c1de6..90bbc8cdaf 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
@@ -22,7 +22,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
@@ -31,13 +30,14 @@ import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.operation.OperationException;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.referencing.internal.shared.ShapeUtilities;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
  *
  * @author Johann Sorel (Geomatys)
  */
-final class OrientedTriangle extends AbstractGeometry implements Triangle, PointSequence {
+final class OrientedTriangle extends AbstractGeometry implements Triangle, DataPoints {
 
     private final LinearRing ring = GeometryFactory.createLinearRing(this);
 
@@ -225,7 +225,7 @@ final class OrientedTriangle extends AbstractGeometry implements Triangle, Point
     }
 
     ////////////////////////////////////////////////////////////////////////////
-    // PointSequence ///////////////////////////////////////////////////////////
+    // DataPoint ///////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////
 
     @Override
@@ -250,7 +250,7 @@ final class OrientedTriangle extends AbstractGeometry implements Triangle, Point
      */
     @Override
     public Envelope getEnvelope() {
-        return PointSequence.super.getEnvelope();
+        return DataPoints.super.getEnvelope();
     }
 
     @Override
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
index c7fd8c1d2b..81e2180154 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
@@ -29,7 +29,6 @@ import org.apache.sis.geometries.MultiCurve;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Surface;
 import org.apache.sis.geometries.math.Tuple;
@@ -38,6 +37,7 @@ import org.apache.sis.storage.DataStoreReferencingException;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -257,7 +257,7 @@ abstract class AbstractGMLWriter implements GMLGeometryWriter {
     /**
      * Appends every tuple of the given sequence to the given buffer, all separated by spaces.
      */
-    protected static void appendSequence(final StringBuilder sb, final PointSequence points) {
+    protected static void appendSequence(final StringBuilder sb, final DataPoints points) {
         for (int i = 0, n = points.size(); i < n; i++) {
             if (i != 0) sb.append(' ');
             appendTuple(sb, points.getPosition(i));
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
index 9077a54855..66bc194a62 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
@@ -29,10 +29,10 @@ import org.apache.sis.geometries.MultiCurve;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -88,7 +88,7 @@ public final class GML2Writer extends AbstractGMLWriter {
     @Override
     protected void writePoint(final Point g, final String srsName, final boolean declareNamespace) throws XMLStreamException {
         writeStart(GML2Tags.POINT, srsName, declareNamespace);
-        writeCoordinates(g.asPointSequence());
+        writeCoordinates(g.asDataPoint());
         writer.writeEndElement();
     }
 
@@ -251,7 +251,7 @@ public final class GML2Writer extends AbstractGMLWriter {
      * Writes a {@code <gml:coordinates>} element containing the given coordinate tuples, using the
      * GML 2.0 default separators (a comma between the ordinates of a tuple, a space between tuples).
      */
-    private void writeCoordinates(final PointSequence points) throws XMLStreamException {
+    private void writeCoordinates(final DataPoints points) throws XMLStreamException {
         final StringBuilder sb = new StringBuilder();
         for (int i=0, n=points.size(); i<n; i++) {
             if (i != 0) sb.append(GML2Tags.DEFAULT_TS);
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
index 25b8bddc58..1988d81d12 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
@@ -38,7 +38,6 @@ import org.apache.sis.geometries.MultiPolyhedron;
 import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.PolyhedralSurface;
 import org.apache.sis.geometries.Polyhedron;
@@ -50,6 +49,7 @@ import org.apache.sis.geometries.conics.CircularString;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -267,7 +267,7 @@ public final class GML3Writer extends AbstractGMLWriter {
      * Writes a {@code <gml:posList>} element containing the given coordinate tuples, with an
      * explicit {@code srsDimension} attribute taken from the width of the sequence itself.
      */
-    private void writePosList(final PointSequence points) throws XMLStreamException {
+    private void writePosList(final DataPoints points) throws XMLStreamException {
         writer.writeStartElement(GML3Tags.POS_LIST);
         writer.writeAttribute(GML3Tags.SRS_DIMENSION, String.valueOf(points.getDimension()));
         final StringBuilder sb = new StringBuilder();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
index c874b47320..89f5207269 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
@@ -18,7 +18,6 @@ package org.apache.sis.gml;
 
 import java.util.Arrays;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.DataType;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
@@ -27,11 +26,12 @@ import org.apache.sis.storage.DataStoreReferencingException;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
  * Accumulator of coordinate tuples read from a GML document, and factory of the
- * {@link PointSequence} that the Apache SIS geometry model is built upon.
+ * {@link DataPoints} that the Apache SIS geometry model is built upon.
  *
  * <p>Coordinates are accumulated as a single flat {@code double[]} of {@code size() × dimension()}
  * ordinates, which is the layout that {@link NDArrays#of(SampleSystem, double...)} expects. The
@@ -170,7 +170,7 @@ final class PositionListBuilder {
      * @throws DataStoreContentException if the accumulated tuple width contradicts {@code inScope}.
      * @throws DataStoreReferencingException if the CRS needed to reconcile the two cannot be created.
      */
-    final PointSequence build(final CoordinateReferenceSystem inScope)
+    final DataPoints build(final CoordinateReferenceSystem inScope)
             throws DataStoreContentException, DataStoreReferencingException
     {
         /*
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
index 4ad61def8d..d74753ac37 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
@@ -38,7 +38,7 @@ public class TriangleTest {
     public void constructorTest() {
 
         final Array positions = NDArrays.of(CommonCRS.WGS84.normalizedGeographic(), new double[]{0,0, 1,0, 0,1, 0,0});
-        final PointSequence points = GeometryFactory.createSequence(positions);
+        final DataPoints points = GeometryFactory.createSequence(positions);
         final LinearRing exterior = GeometryFactory.createLinearRing(points);
         final Triangle triangle = GeometryFactory.createTriangle(exterior);
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
index d99cb1193b..c3cfc605d0 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
@@ -23,7 +23,7 @@ import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.geometry.wrapper.j2d.DecimatedShape;
@@ -108,7 +108,7 @@ public final class ShapeAdapterTest {
      */
     @Test
     public void testLineString() {
-        initialize(GeometryFactory.createLineString(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        initialize(GeometryFactory.createLineString(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             3,1,
             7,6,
             5,2
@@ -124,11 +124,11 @@ public final class ShapeAdapterTest {
      */
     @Test
     public void testMultiLineString() {
-        final LineString line1 = GeometryFactory.createLineString(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        final LineString line1 = GeometryFactory.createLineString(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             10, 12,
             5, 2
         })));
-        final LineString line2 = GeometryFactory.createLineString(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        final LineString line2 = GeometryFactory.createLineString(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             3, 1,
             7, 6,
             5, 2
@@ -147,7 +147,7 @@ public final class ShapeAdapterTest {
      */
     @Test
     public void testPolygon() {
-        final LinearRing ring = GeometryFactory.createLinearRing(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        final LinearRing ring = GeometryFactory.createLinearRing(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             3, 1,
             7, 6,
             5, 2,
@@ -166,13 +166,13 @@ public final class ShapeAdapterTest {
      */
     @Test
     public void testMultiPolygon() {
-        final LinearRing ring1 = GeometryFactory.createLinearRing(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        final LinearRing ring1 = GeometryFactory.createLinearRing(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             3, 1,
             7, 6,
             5, 2,
             3, 1
         })));
-        final LinearRing ring2 = GeometryFactory.createLinearRing(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        final LinearRing ring2 = GeometryFactory.createLinearRing(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             12, 3,
             1, 9,
             4, 6,
@@ -201,7 +201,7 @@ public final class ShapeAdapterTest {
      */
     @Test
     public void testAsDecimatedShapeLineString() {
-        final LineString line = GeometryFactory.createLineString(new ArraySequence(NDArrays.of(CARTESIAN_2D, new double[]{
+        final LineString line = GeometryFactory.createLineString(new ArrayDataPoints(NDArrays.of(CARTESIAN_2D, new double[]{
             0, 0,
             1, 0,
             2, 0
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
index c2fba9a30d..a2b9ae92ad 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
@@ -36,7 +36,6 @@ import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Vector2D;
@@ -45,6 +44,7 @@ import org.apache.sis.geometries.math.Vector2D;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.*;
 import org.opengis.geometry.Envelope;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -97,7 +97,7 @@ public final class ShapeConverterTest {
         } else if (geom instanceof Point pt) {
             lst.add(new Vector2D.Double(pt.getPosition().toArrayDouble()));
         } else if (geom instanceof LineString ls) {
-            PointSequence ps = ls.getDataPoints();
+            DataPoints ps = ls.getDataPoints();
             for (int i = 0, n = ps.size(); i < n; i++) {
                 lst.add(new Vector2D.Double(ps.getPosition(i).toArrayDouble()));
             }
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java
index 5aa6f6cd57..516dac2c99 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/internal/shared/ArraySequenceTest.java
@@ -46,7 +46,7 @@ public class ArraySequenceTest {
     public void constructorNoCrsTest() {
         final Array positions = NDArrays.of(2, new double[]{0,0, 1,0, 0,1, 0,0});
         assertThrows(NullPointerException.class, ()->{
-            ArraySequence array = new ArraySequence(positions);
+            ArrayDataPoints array = new ArrayDataPoints(positions);
         });
     }
 
@@ -56,7 +56,7 @@ public class ArraySequenceTest {
     @Test
     public void constructorCrsTest() {
         final Array positions = NDArrays.of(CommonCRS.WGS84.normalizedGeographic(), new double[]{0,0, 1,0, 0,1, 0,0});
-        ArraySequence array = new ArraySequence(positions);
+        ArrayDataPoints array = new ArrayDataPoints(positions);
     }
 
     /**
@@ -68,7 +68,7 @@ public class ArraySequenceTest {
         final Map<String,Array> attributes = new HashMap<>();
         attributes.put(AttributesType.ATT_NORMAL, normals);
         assertThrows(NullPointerException.class, ()->{
-            ArraySequence array = new ArraySequence(attributes);
+            ArrayDataPoints array = new ArrayDataPoints(attributes);
         });
     }
 
@@ -82,7 +82,7 @@ public class ArraySequenceTest {
         final Map<String,Array> attributes = new HashMap<>();
         attributes.put(AttributesType.ATT_POSITION, positions);
         attributes.put(AttributesType.ATT_NORMAL, normals);
-        ArraySequence array = new ArraySequence(attributes);
+        ArrayDataPoints array = new ArrayDataPoints(attributes);
     }
 
     /**
@@ -97,7 +97,7 @@ public class ArraySequenceTest {
         final Map<String,Array> attributes = new HashMap<>();
         attributes.put(AttributesType.ATT_POSITION, positions);
         attributes.put(AttributesType.ATT_NORMAL, normals);
-        final ArraySequence array = new ArraySequence(attributes);
+        final ArrayDataPoints array = new ArrayDataPoints(attributes);
 
         assertEquals(CommonCRS.WGS84.normalizedGeographic(), array.getCoordinateReferenceSystem());
         assertEquals(2, array.getDimension());
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
index 9c16611ee8..3a502a1dd0 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
@@ -25,7 +25,6 @@ import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
@@ -36,6 +35,7 @@ import org.apache.sis.referencing.CommonCRS;
 // Test dependencies
 import static org.junit.jupiter.api.Assertions.*;
 import org.junit.jupiter.api.Test;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -58,7 +58,7 @@ public class ToPrimitiveTest {
     @Test
     public void testLineString() {
         final Array positions = NDArrays.of(CRS2D, new double[]{0,1,2,3});
-        final PointSequence points = GeometryFactory.createSequence(positions);
+        final DataPoints points = GeometryFactory.createSequence(positions);
         final LineString line = GeometryFactory.createLineString(points);
         final Geometry result = new GeometryProcessor().toPrimitive(line);
         assertTrue(result instanceof MeshPrimitive);
@@ -69,7 +69,7 @@ public class ToPrimitiveTest {
     @Test
     public void testPolygon() {
         final Array positions = NDArrays.of(CRS2D, new double[]{0,1,2,3});
-        final PointSequence points = GeometryFactory.createSequence(positions);
+        final DataPoints points = GeometryFactory.createSequence(positions);
         final LinearRing exterior = GeometryFactory.createLinearRing(points);
         final Polygon point = GeometryFactory.createPolygon(exterior, null);
         final Geometry result = new GeometryProcessor().toPrimitive(point);
@@ -82,11 +82,11 @@ public class ToPrimitiveTest {
     public void testMultiLineString() {
         { //one line has 3 points, so we must obtain a MultiPrimitive
             final Array positions1 = NDArrays.of(CRS2D, new double[]{0,1,2,3});
-            final PointSequence points1 = GeometryFactory.createSequence(positions1);
+            final DataPoints points1 = GeometryFactory.createSequence(positions1);
             final LineString line1 = GeometryFactory.createLineString(points1);
 
             final Array positions2 = NDArrays.of(CRS2D, new double[]{3,4,5,6,7,8});
-            final PointSequence points2 = GeometryFactory.createSequence(positions2);
+            final DataPoints points2 = GeometryFactory.createSequence(positions2);
             final LineString line2 = GeometryFactory.createLineString(points2);
 
             final MultiLineString mlines = GeometryFactory.createMultiLineString(line1, line2);
@@ -106,11 +106,11 @@ public class ToPrimitiveTest {
         }
         { //all linestrings are lines, we must obtain a Primitive.Lines
             final Array positions1 = NDArrays.of(CRS2D, new double[]{0,1,2,3});
-            final PointSequence points1 = GeometryFactory.createSequence(positions1);
+            final DataPoints points1 = GeometryFactory.createSequence(positions1);
             final LineString line1 = GeometryFactory.createLineString(points1);
 
             final Array positions2 = NDArrays.of(CRS2D, new double[]{3,4,5,6});
-            final PointSequence points2 = GeometryFactory.createSequence(positions2);
+            final DataPoints points2 = GeometryFactory.createSequence(positions2);
             final LineString line2 = GeometryFactory.createLineString(points2);
 
             final MultiLineString mlines = GeometryFactory.createMultiLineString(line1, line2);
@@ -129,7 +129,7 @@ public class ToPrimitiveTest {
     @Test
     public void testMultiPoint() {
         final Array positions1 = NDArrays.of(CRS2D, new double[]{0,1,2,3});
-        final PointSequence points = GeometryFactory.createSequence(positions1);
+        final DataPoints points = GeometryFactory.createSequence(positions1);
         final MultiPoint mpoints = GeometryFactory.createMultiPoint(points);
 
         final Geometry result = new GeometryProcessor().toPrimitive(mpoints);
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
index 85a5f5dcd1..1df8583a69 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
@@ -31,7 +31,6 @@ import org.apache.sis.geometries.MultiLineString;
 import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
@@ -48,6 +47,7 @@ import static org.apache.sis.gml.GeometryAssert.assertUndefinedCRS;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -93,7 +93,7 @@ public final class GML2ReaderTest {
     /**
      * Creates a point sequence in the {@link #wgs84} CRS from a flat list of ordinates.
      */
-    private PointSequence sequence(final double... ordinates) {
+    private DataPoints sequence(final double... ordinates) {
         return GeometryFactory.createSequence(NDArrays.of(SampleSystem.of(wgs84), ordinates));
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
index 6a1b434145..42e4dd119c 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2WriterTest.java
@@ -26,7 +26,6 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
 import org.apache.sis.referencing.CRS;
@@ -37,6 +36,7 @@ import static org.junit.jupiter.api.Assertions.*;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -71,7 +71,7 @@ public final class GML2WriterTest extends TestCase {
     /**
      * Creates a point sequence in the {@link #wgs84} CRS from a flat list of ordinates.
      */
-    private PointSequence sequence(final double... ordinates) {
+    private DataPoints sequence(final double... ordinates) {
         return GeometryFactory.createSequence(NDArrays.of(SampleSystem.of(wgs84), ordinates));
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
index fc16763ec9..1424477af7 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
@@ -37,7 +37,6 @@ import org.apache.sis.geometries.MultiPolygon;
 import org.apache.sis.geometries.MultiPolyhedron;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.PolyhedralSurface;
 import org.apache.sis.geometries.Polyhedron;
@@ -62,6 +61,7 @@ import static org.apache.sis.gml.GeometryAssert.assertUndefinedCRS;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -107,7 +107,7 @@ public final class GML3ReaderTest {
     /**
      * Creates a point sequence in the {@link #wgs84} CRS from a flat list of ordinates.
      */
-    private PointSequence sequence(final double... ordinates) {
+    private DataPoints sequence(final double... ordinates) {
         return GeometryFactory.createSequence(NDArrays.of(SampleSystem.of(wgs84), ordinates));
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
index d1851e7954..500ef0f136 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
@@ -28,7 +28,6 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
@@ -42,6 +41,7 @@ import static org.junit.jupiter.api.Assertions.*;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -76,7 +76,7 @@ public final class GML3WriterTest extends TestCase {
     /**
      * Creates a point sequence in the {@link #wgs84} CRS from a flat list of ordinates.
      */
-    private PointSequence sequence(final double... ordinates) {
+    private DataPoints sequence(final double... ordinates) {
         return GeometryFactory.createSequence(NDArrays.of(SampleSystem.of(wgs84), ordinates));
     }
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
index 6dab0e0591..add8bc35e6 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
@@ -23,7 +23,6 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.referencing.CRS;
 
@@ -32,6 +31,7 @@ import static org.junit.jupiter.api.Assertions.*;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -84,7 +84,7 @@ final class GeometryAssert {
 
         if (expected instanceof Point e) {
             final Point a = (Point) actual;
-            assertSequenceEquals(e.asPointSequence(), a.asPointSequence(), tolerance);
+            assertSequenceEquals(e.asDataPoint(), a.asDataPoint(), tolerance);
         } else if (expected instanceof LineString e) {                  // Also covers LinearRing.
             final LineString a = (LineString) actual;
             assertSequenceEquals(e.getDataPoints(), a.getDataPoints(), tolerance);
@@ -111,7 +111,7 @@ final class GeometryAssert {
      * tolerance. Delegates to {@code Array.equals(Array, double)}, which also compares the tuple
      * width and the sample system, and therefore the coordinate reference system.
      */
-    private static void assertSequenceEquals(final PointSequence expected, final PointSequence actual,
+    private static void assertSequenceEquals(final DataPoints expected, final DataPoints actual,
             final double tolerance)
     {
         assertEquals(expected.size(), actual.size(), "number of points");
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
index 5cb9d917cc..3ce55b610e 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
@@ -24,7 +24,6 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometries.math.SampleSystem;
@@ -47,6 +46,7 @@ import static org.apache.sis.gml.GeometryAssert.assertGeometryEquals;
 
 // Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -128,7 +128,7 @@ public final class JAXBGeometryAdapterTest {
     /**
      * Creates a point sequence in the {@link #wgs84} CRS from a flat list of ordinates.
      */
-    private PointSequence sequence(final double... ordinates) {
+    private DataPoints sequence(final double... ordinates) {
         return GeometryFactory.createSequence(NDArrays.of(SampleSystem.of(wgs84), ordinates));
     }
 
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
index e20e151149..ed5750363a 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
@@ -38,8 +38,7 @@ import org.opengis.referencing.datum.Ellipsoid;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
-import org.apache.sis.geometries.internal.shared.ArraySequence;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.math.Array;
 import org.apache.sis.geometries.math.NDArrays;
 import org.apache.sis.geometry.Envelopes;
@@ -66,6 +65,7 @@ import org.apache.sis.storage.rs.CodedResource;
 import org.apache.sis.storage.rs.internal.shared.CodedCoverageAsFeatureSet;
 import org.apache.sis.storage.rs.internal.shared.s2.Factory;
 import org.apache.sis.storage.rs.internal.shared.s2.S2;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -258,7 +258,7 @@ public final class DiscreteGlobalGridSystems {
         if (s2 == null) return null;
         final double[] coords = S2.toArray(s2.loop(0));
         final Array positions = NDArrays.of(CommonCRS.WGS84.normalizedGeographic(), coords);
-        final PointSequence sequence = new ArraySequence(positions);
+        final DataPoints sequence = new ArrayDataPoints(positions);
         final LinearRing exterior = org.apache.sis.geometries.GeometryFactory.createLinearRing(sequence);
         return org.apache.sis.geometries.GeometryFactory.createPolygon(exterior, null);
     }
diff --git a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
index 4ad1283843..2d981134bc 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
@@ -33,7 +33,6 @@ import org.apache.sis.coverage.grid.GridExtent;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.coverage.grid.GridOrientation;
 import org.apache.sis.geometries.LinearRing;
-import org.apache.sis.geometries.PointSequence;
 import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.math.Tuple;
 import org.apache.sis.geometries.math.Vector2D;
@@ -51,6 +50,7 @@ import org.apache.sis.storage.rs.CodeIterator;
 import static org.junit.jupiter.api.Assertions.*;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -187,7 +187,7 @@ public abstract class AbstractDggrsTest {
                 final Polygon geometry = (Polygon) DiscreteGlobalGridSystems.toSISPolygon(z.getGeographicExtent());
                 final DirectPosition center = z.getPosition();
                 final LinearRing exterior = (LinearRing) geometry.getExteriorRing();
-                final PointSequence ps = exterior.getDataPoints();
+                final DataPoints ps = exterior.getDataPoints();
                 for (int i = 0; i < ps.size(); i++) {
                     final Tuple corner = ps.getPosition(i);
 


(sis) 06/06: refactor(Geometry): regroup point,curve,surface,solid in dedicated pacakages

Posted by js...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3967f8b54314088a43377bf0e374b3039ef319c3
Author: jsorel <jo...@geomatys.com>
AuthorDate: Mon Sep 7 10:12:12 2026 +0200

    refactor(Geometry): regroup point,curve,surface,solid in dedicated pacakages
---
 .../org.apache.sis.geometry/main/module-info.java  |   4 +
 .../org/apache/sis/geometries/AttributesType.java  |   2 +-
 .../main/org/apache/sis/geometries/BBox.java       |   6 +-
 .../main/org/apache/sis/geometries/Curve.java      |   4 +-
 .../main/org/apache/sis/geometries/DataPoints.java |  10 +-
 .../main/org/apache/sis/geometries/Geometries.java |  42 +++---
 .../apache/sis/geometries/GeometryCollection.java  |   2 +-
 .../org/apache/sis/geometries/GeometryFactory.java |  31 ++--
 .../org/apache/sis/geometries/GeometryVisitor.java |  12 +-
 .../geometries/{Frustrum.java => HyperPlane.java}  |  28 ++--
 .../main/org/apache/sis/geometries/OBBox.java      |   5 +-
 .../main/org/apache/sis/geometries/Plane.java      |   2 +-
 .../main/org/apache/sis/geometries/Point.java      |   6 +-
 .../main/org/apache/sis/geometries/Ray.java        |   3 +-
 .../main/org/apache/sis/geometries/Surface.java    |   2 +-
 .../main/org/apache/sis/geometries/Wrapper.java    | 160 ++-------------------
 .../apache/sis/geometries/adapter/JTSAdapter.java  |  31 ++--
 .../geometries/adapter/PathIteratorAdapter.java    |  14 +-
 .../sis/geometries/adapter/ShapeAdapter.java       |  10 +-
 .../sis/geometries/adapter/ShapeConverter.java     |  12 +-
 .../main/org/apache/sis/geometries/curve/Arc.java  |   4 +-
 .../apache/sis/geometries/curve/ArcByBulge.java    |   5 +-
 .../sis/geometries/curve/ArcByCenterPoint.java     |   5 +-
 .../{splines => curve}/BSplineCurve.java           |   3 +-
 .../sis/geometries/{splines => curve}/Bezier.java  |   3 +-
 .../sis/geometries/curve/CircularString.java       |   4 +-
 .../sis/geometries/{ => curve}/CompoundCurve.java  |   5 +-
 .../org/apache/sis/geometries/curve/Conic.java     |   8 +-
 .../geometries/{splines => curve}/CubicSpline.java |   2 +-
 .../{polynomials => curve}/FunctionArc.java        |   6 +-
 .../{polynomials => curve}/FunctionCurve.java      |   4 +-
 .../org/apache/sis/geometries/curve/Geodesic.java  |   4 +-
 .../geometries/{splines => curve}/KnotType.java    |   2 +-
 .../apache/sis/geometries/curve/LineString.java    |   4 +-
 .../sis/geometries/{ => curve}/MultiCurve.java     |   5 +-
 .../geometries/{ => curve}/MultiLineString.java    |   4 +-
 .../sis/geometries/{splines => curve}/NURB.java    |   2 +-
 .../{polynomials => curve}/PolynomialArc.java      |   2 +-
 .../{polynomials => curve}/PolynomialCurve.java    |   2 +-
 .../{splines => curve}/PolynomialSpline.java       |   2 +-
 .../sis/geometries/{ => curve}/ProductCurve.java   |   8 +-
 .../{polynomials => curve}/RealFunction.java       |   4 +-
 .../{polynomials => curve}/RealPolynomial.java     |   4 +-
 .../org/apache/sis/geometries/curve/Rhumb.java     |   7 +-
 .../org/apache/sis/geometries/curve/Spiral.java    |   5 +-
 .../geometries/{splines => curve}/SplineCurve.java |   5 +-
 .../{splines => curve}/SplineCurveForm.java        |   2 +-
 .../internal/shared/AbstractGeometry.java          |   8 +-
 .../internal/shared/AbstractOrientedGeometry.java  |   2 +-
 .../internal/shared/ArrayDataPoints.java           |  12 +-
 .../internal/shared/DefaultArcByBulge.java         |   4 +-
 .../internal/shared/DefaultArcByCenterPoint.java   |   2 +-
 .../internal/shared/DefaultCircularString.java     |   2 +-
 .../internal/shared/DefaultCompoundCurve.java      |   8 +-
 .../internal/shared/DefaultCurvePolygon.java       |   8 +-
 .../internal/shared/DefaultDataPoints.java         |   4 +-
 .../internal/shared/DefaultGeometryCollection.java |   2 +-
 .../internal/shared/DefaultLineString.java         |   3 +-
 .../internal/shared/DefaultLinearRing.java         |   3 +-
 .../internal/shared/DefaultMultiCurve.java         |   4 +-
 .../internal/shared/DefaultMultiLineString.java    |   4 +-
 .../internal/shared/DefaultMultiPoint.java         |   8 +-
 .../internal/shared/DefaultMultiPolygon.java       |   4 +-
 .../internal/shared/DefaultMultiPolyhedron.java    |   4 +-
 .../internal/shared/DefaultMultiSurface.java       |   4 +-
 .../geometries/internal/shared/DefaultPoint.java   |   8 +-
 .../geometries/internal/shared/DefaultPolygon.java |   6 +-
 .../internal/shared/DefaultPolyhedralSurface.java  |   6 +-
 .../internal/shared/DefaultPolyhedron.java         |   8 +-
 .../internal/shared/DefaultRawMultiPoint.java      |   4 +-
 .../internal/shared/DefaultReversedCurve.java      |   6 +-
 .../internal/shared/DefaultReversedSurface.java    |   4 +-
 .../internal/shared/DefaultTriangle.java           |   4 +-
 .../shared/DefaultTriangulatedSurface.java         |   4 +-
 .../apache/sis/geometries/mesh/MeshPrimitive.java  |  24 ++--
 .../geometries/mesh/MeshPrimitiveComparator.java   |   8 +-
 .../sis/geometries/mesh/MeshPrimitiveIndexes.java  |   4 +-
 .../sis/geometries/mesh/MeshPrimitiveVisitor.java  |  10 +-
 .../sis/geometries/mesh/MultiMeshPrimitive.java    |   4 +-
 .../sis/geometries/operation/ComputeAttribute.java |   6 +-
 .../apache/sis/geometries/operation/Contains.java  |   8 +-
 .../apache/sis/geometries/operation/Distance.java  |   1 -
 .../geometries/operation/GeometryProcessor.java    |  16 +--
 .../sis/geometries/operation/Intersection.java     |  22 +--
 .../sis/geometries/operation/ProcessorUtils.java   |   4 +-
 .../org/apache/sis/geometries/operation/To3D.java  |  18 +--
 .../sis/geometries/operation/ToPrimitive.java      |  14 +-
 .../apache/sis/geometries/operation/Transform.java |  18 +--
 .../simplify/greedyinsert/TINBuilder.java          |  12 +-
 .../simplify/greedyinsert/TinDistance.java         |   4 +-
 .../operation/simplify/greedyinsert/WTriangle.java |  12 +-
 .../operation/spatialanalysis2d/ISOBand.java       |  16 +--
 .../operation/spatialanalysis2d/ISOLine.java       |  14 +-
 .../operation/triangulate/EarClipping.java         |   8 +-
 .../operation/triangulate/delaunay/Delaunay.java   |  12 +-
 .../triangulate/delaunay/OrientedEdge.java         |   8 +-
 .../triangulate/delaunay/OrientedTriangle.java     |  14 +-
 .../sis/geometries/{ => point}/MultiPoint.java     |   8 +-
 .../package-info.java => point/PointCloud.java}    |   9 +-
 .../{griddedsolid => solid}/BSolidSpline.java      |   2 +-
 .../apache/sis/geometries/{ => solid}/Capsule.java |   5 +-
 .../sis/geometries/{ => solid}/Cylinder.java       |   5 +-
 .../sis/geometries/{ => solid}/Frustrum.java       |   6 +-
 .../geometries/{ => solid}/MultiPolyhedron.java    |   4 +-
 .../ParametricCurveSolid.java                      |   8 +-
 .../sis/geometries/{ => solid}/Polyhedron.java     |   5 +-
 .../apache/sis/geometries/{ => solid}/Sphere.java  |  21 +--
 .../{ellipsoidal => solid}/package-info.java       |   7 +-
 .../{ => solid}/polyhedron/AbstractPolyhedron.java |  16 +--
 .../{ => solid}/polyhedron/Dodecahedron.java       |   4 +-
 .../{ => solid}/polyhedron/Hexahedron.java         |   4 +-
 .../{ => solid}/polyhedron/Icosahedron.java        |   4 +-
 .../{ => solid}/polyhedron/Octahedron.java         |   4 +-
 .../polyhedron/RhombicTriacontahedron.java         |   4 +-
 .../{ => solid}/polyhedron/Tetrahedron.java        |   4 +-
 .../polyhedron/TruncatedIcosahedron.java           |   4 +-
 .../{ => solid}/polyhedron/package-info.java       |   2 +-
 .../sis/geometries/spherical/GreatCircleArc.java   |   2 +-
 .../spherical/SphericalConvexPolygon.java          |   2 +-
 .../geometries/spherical/SphericalTriangle.java    |   2 +-
 .../{splines => surface}/BSplineSurface.java       |   9 +-
 .../{splines => surface}/BSplineSurfaceForm.java   |   2 +-
 .../sis/geometries/{ => surface}/BilinearGrid.java |   3 +-
 .../sis/geometries/{ => surface}/CurvePolygon.java |   7 +-
 .../sis/geometries/{ => surface}/MultiPolygon.java |   2 +-
 .../sis/geometries/{ => surface}/MultiSurface.java |   6 +-
 .../{ => surface}/ParametricCurveSurface.java      |   6 +-
 .../sis/geometries/{ => surface}/Polygon.java      |   8 +-
 .../{ => surface}/PolyhedralSurface.java           |   4 +-
 .../sis/geometries/{ => surface}/PreparedTIN.java  |  24 ++--
 .../apache/sis/geometries/{ => surface}/TIN.java   |   3 +-
 .../sis/geometries/{ => surface}/Triangle.java     |  16 ++-
 .../{ => surface}/TriangulatedSurface.java         |   2 +-
 .../main/org/apache/sis/gml/AbstractGMLReader.java |   2 -
 .../main/org/apache/sis/gml/AbstractGMLWriter.java |  18 ++-
 .../org/apache/sis/gml/DOMXMLStreamReader.java     |   2 -
 .../main/org/apache/sis/gml/GML2Reader.java        |  12 +-
 .../main/org/apache/sis/gml/GML2Writer.java        |  12 +-
 .../main/org/apache/sis/gml/GML3Reader.java        |  40 +++---
 .../main/org/apache/sis/gml/GML3Writer.java        |  32 ++---
 .../main/org/apache/sis/gml/GMLCRS.java            |   2 -
 .../main/org/apache/sis/gml/GMLGeometryWriter.java |   2 -
 .../main/org/apache/sis/gml/GMLReader.java         |   1 -
 .../main/org/apache/sis/gml/GMLWriter.java         |   3 -
 .../org/apache/sis/gml/PositionListBuilder.java    |   4 +-
 .../operation/simplify => scene}/TextureAtlas.java |   2 +-
 .../org/apache/sis/geometries/PreparedTINTest.java |   1 +
 .../org/apache/sis/geometries/TriangleTest.java    |   1 +
 .../sis/geometries/adapter/ShapeAdapterTest.java   |   2 +-
 .../sis/geometries/adapter/ShapeConverterTest.java |   4 +-
 .../sis/geometries/mesh/PrimitiveVisitorTest.java  |   4 +-
 .../sis/geometries/operation/ToPrimitiveTest.java  |   6 +-
 .../operation/simplify/TextureAtlasTest.java       |   1 +
 .../geometries/spherical/GreatCircleArcTest.java   |   2 +-
 .../spherical/SphericalConvexPolygonTest.java      |   2 +-
 .../spherical/SphericalTriangleTest.java           |   2 +-
 .../test/org/apache/sis/gml/GML2ReaderTest.java    |   8 +-
 .../test/org/apache/sis/gml/GML3ReaderTest.java    |  20 +--
 .../test/org/apache/sis/gml/GML3WriterTest.java    |   4 +-
 .../test/org/apache/sis/gml/GMLReaderTest.java     |   2 +-
 .../test/org/apache/sis/gml/GeometryAssert.java    |   2 +-
 .../apache/sis/gml/JAXBGeometryAdapterTest.java    |   2 +-
 .../storage/dggs/DiscreteGlobalGridSystems.java    |   4 +-
 .../sis/referencing/dggs/AbstractDggrsTest.java    |   2 +-
 .../org/apache/sis/referencing/dggs/s2/S2Test.java |   2 +-
 165 files changed, 617 insertions(+), 700 deletions(-)

diff --git a/incubator/src/org.apache.sis.geometry/main/module-info.java b/incubator/src/org.apache.sis.geometry/main/module-info.java
index d83edffcb0..53e2b9255f 100644
--- a/incubator/src/org.apache.sis.geometry/main/module-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/module-info.java
@@ -33,6 +33,10 @@ module org.apache.sis.geometry {
     exports org.apache.sis.geometries;
     exports org.apache.sis.geometries.curve;
     exports org.apache.sis.geometries.operation;
+    exports org.apache.sis.geometries.point;
+    exports org.apache.sis.geometries.surface;
+    exports org.apache.sis.geometries.solid;
+    exports org.apache.sis.geometries.solid.polyhedron;
     exports org.apache.sis.maths;
     exports org.apache.sis.scene;
     exports org.apache.sis.scene.light;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
index 3cc50c33ba..2f143201c8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/AttributesType.java
@@ -21,8 +21,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.SampleSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
index 1c5dbe6bbc..972df633b2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BBox.java
@@ -18,12 +18,12 @@ package org.apache.sis.geometries;
 
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vectors;
 import org.opengis.coordinate.MismatchedDimensionException;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.Vectors;
-import org.apache.sis.geometry.GeneralEnvelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
index 91c614d76f..832a0a918f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Curve.java
@@ -16,14 +16,14 @@
  */
 package org.apache.sis.geometries;
 
-import org.apache.sis.geometries.curve.LineString;
 import java.util.List;
 import javax.measure.quantity.Length;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Vector;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
-import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
index 01969685e0..e2d27baf12 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/DataPoints.java
@@ -16,13 +16,13 @@
  */
 package org.apache.sis.geometries;
 
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
-import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java
index 6f271a1a1c..86236ba510 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Geometries.java
@@ -29,35 +29,21 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
-import org.locationtech.jts.geom.Coordinate;
-import org.locationtech.jts.geom.CoordinateSequence;
 import javax.measure.Unit;
 import org.apache.sis.geometries.adapter.JTSAdapter;
 import org.apache.sis.geometries.adapter.ShapeAdapter;
 import org.apache.sis.geometries.adapter.ShapeConverter;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.IdentifiedObject;
-import static org.opengis.referencing.IdentifiedObject.ALIAS_KEY;
-import static org.opengis.referencing.IdentifiedObject.NAME_KEY;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.cs.AxisDirection;
-import org.opengis.referencing.cs.CoordinateSystem;
-import org.opengis.referencing.cs.CoordinateSystemAxis;
-import org.opengis.referencing.datum.EngineeringDatum;
-import org.opengis.referencing.operation.MathTransform;
-import org.opengis.util.FactoryException;
-import org.opengis.util.InternationalString;
+import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
+import org.apache.sis.geometry.wrapper.jts.JTS;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Matrix3D;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vector3D;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Array;
-import org.apache.sis.maths.Matrix3D;
-import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
-import org.apache.sis.geometry.wrapper.jts.JTS;
 import org.apache.sis.measure.Units;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.crs.DefaultEngineeringCRS;
@@ -65,10 +51,24 @@ import org.apache.sis.referencing.cs.DefaultCartesianCS;
 import org.apache.sis.referencing.cs.DefaultCoordinateSystemAxis;
 import org.apache.sis.referencing.cs.DefaultLinearCS;
 import org.apache.sis.referencing.datum.DefaultEngineeringDatum;
-import org.apache.sis.referencing.operation.transform.LinearTransform;
 import org.apache.sis.referencing.internal.shared.AxisDirections;
+import org.apache.sis.referencing.operation.transform.LinearTransform;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.SimpleInternationalString;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.CoordinateSequence;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.IdentifiedObject;
+import static org.opengis.referencing.IdentifiedObject.ALIAS_KEY;
+import static org.opengis.referencing.IdentifiedObject.NAME_KEY;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.cs.AxisDirection;
+import org.opengis.referencing.cs.CoordinateSystem;
+import org.opengis.referencing.cs.CoordinateSystemAxis;
+import org.opengis.referencing.datum.EngineeringDatum;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.util.FactoryException;
+import org.opengis.util.InternationalString;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryCollection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryCollection.java
index 7f58353071..8d985fcf66 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryCollection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryCollection.java
@@ -17,10 +17,10 @@
 package org.apache.sis.geometries;
 
 import java.util.Set;
+import org.apache.sis.geometry.GeneralEnvelope;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
-import org.apache.sis.geometry.GeneralEnvelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
index 662e070b67..66343471a9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryFactory.java
@@ -16,24 +16,23 @@
  */
 package org.apache.sis.geometries;
 
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.curve.LineString;
 import java.nio.ByteBuffer;
 import java.nio.DoubleBuffer;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import javax.measure.Unit;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.curve.Circle;
 import org.apache.sis.geometries.curve.CircularString;
+import org.apache.sis.geometries.curve.Clothoid;
+import org.apache.sis.geometries.curve.CompoundCurve;
 import org.apache.sis.geometries.curve.Geodesic;
-import org.apache.sis.maths.SampleSystem;
-import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Array;
-import org.apache.sis.maths.Vector;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.MultiCurve;
+import org.apache.sis.geometries.curve.MultiLineString;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.internal.shared.DefaultArcByBulge;
 import org.apache.sis.geometries.internal.shared.DefaultArcByCenterPoint;
@@ -60,13 +59,27 @@ import org.apache.sis.geometries.internal.shared.DefaultReversedCurve;
 import org.apache.sis.geometries.internal.shared.DefaultReversedSurface;
 import org.apache.sis.geometries.internal.shared.DefaultTriangle;
 import org.apache.sis.geometries.internal.shared.DefaultTriangulatedSurface;
-import org.apache.sis.maths.DataType;
-import org.apache.sis.geometries.curve.Clothoid;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.solid.MultiPolyhedron;
+import org.apache.sis.geometries.solid.Polyhedron;
+import org.apache.sis.geometries.surface.CurvePolygon;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.MultiSurface;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.PolyhedralSurface;
+import org.apache.sis.geometries.surface.TIN;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.geometry.wrapper.Capability;
 import org.apache.sis.geometry.wrapper.Dimensions;
 import org.apache.sis.geometry.wrapper.GeometryType;
 import org.apache.sis.geometry.wrapper.GeometryWrapper;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Vector;
 import org.apache.sis.setup.GeometryLibrary;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
index 004dc428f3..dd7cae2a0a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryVisitor.java
@@ -16,9 +16,17 @@
  */
 package org.apache.sis.geometries;
 
-import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.curve.LineString;
-
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.MultiCurve;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.MultiSurface;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.PolyhedralSurface;
+import org.apache.sis.geometries.surface.TIN;
+import org.apache.sis.geometries.surface.Triangle;
 
 /**
  *
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
similarity index 74%
copy from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
copy to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
index 864602c55a..bddc525cfa 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/HyperPlane.java
@@ -16,28 +16,28 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
+import static org.opengis.annotation.Specification.ISO_12113;
+import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 
 
 /**
- * A Frustum is a delimited space defined by one or many planes.
- * It is often used to clip models outside the camera visible area.
+ * A hyperplane centered at the origin in local space, with normal along the +Y axis in local space.
+ * The hyper plane divised the geometric space in two.
  *
- * @author Johann Sorel
+ * @author Johann Sorel (Geomatys)
  */
-public final class Frustrum extends AbstractGeometry {
+@UML(identifier="Plane", specification=ISO_12113)
+public final class HyperPlane extends AbstractOrientedGeometry {
 
-    private final Plane[] planes;
-
-    public Frustrum(Plane[] planes) {
-        this.planes = planes;
+    public HyperPlane() {
     }
 
     @Override
     public String getGeometryType() {
-        return "FRUSTRUM";
+        return "HYPERPLANE";
     }
 
     @Override
@@ -45,10 +45,6 @@ public final class Frustrum extends AbstractGeometry {
         return false;
     }
 
-    public Plane[] getPlanes() {
-        return planes;
-    }
-
     @Override
     public CoordinateReferenceSystem getCoordinateReferenceSystem() {
         throw new UnsupportedOperationException("Not supported yet.");
@@ -64,9 +60,9 @@ public final class Frustrum extends AbstractGeometry {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
+
     @Override
-    public Envelope getEnvelope() {
+    public Envelope getUnorientedEnvelope() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
-
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java
index 2325c42070..f8b13e29ad 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/OBBox.java
@@ -16,13 +16,12 @@
  */
 package org.apache.sis.geometries;
 
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.geometry.GeneralEnvelope;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java
index c914ab52f9..166a1edb41 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Plane.java
@@ -16,11 +16,11 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
 import static org.opengis.annotation.Specification.ISO_12113;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
index 0acd43aa20..9483df251f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Point.java
@@ -16,14 +16,14 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
index 7053cd2077..2726862b7f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Ray.java
@@ -17,12 +17,11 @@
 package org.apache.sis.geometries;
 
 import java.util.Objects;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java
index 58744465f0..74e501b7c2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Surface.java
@@ -18,10 +18,10 @@ package org.apache.sis.geometries;
 
 import java.util.List;
 import javax.measure.quantity.Length;
+import org.apache.sis.maths.Vector;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
-import org.apache.sis.maths.Vector;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
index f8247dddff..8678f3468f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Wrapper.java
@@ -16,30 +16,28 @@
  */
 package org.apache.sis.geometries;
 
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.curve.LineString;
 import java.awt.Shape;
 import java.util.Iterator;
 import java.util.OptionalInt;
-import org.locationtech.jts.geom.Coordinate;
-import org.locationtech.jts.geom.CoordinateSequence;
-import org.locationtech.jts.geom.Envelope;
-import org.opengis.util.FactoryException;
-import org.opengis.geometry.DirectPosition;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.operation.CoordinateOperation;
-import org.opengis.referencing.operation.MathTransform;
-import org.opengis.referencing.operation.TransformException;
-import org.opengis.filter.SpatialOperatorName;
-import org.opengis.filter.DistanceOperatorName;
 import org.apache.sis.filter.sqlmm.SQLMM;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
+import org.apache.sis.geometries.adapter.JTSAdapter;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.geometry.wrapper.Geometries;
 import org.apache.sis.geometry.wrapper.GeometryType;
 import org.apache.sis.geometry.wrapper.GeometryWrapper;
 import org.apache.sis.util.Debug;
+import org.opengis.filter.DistanceOperatorName;
+import org.opengis.filter.SpatialOperatorName;
+import org.opengis.geometry.DirectPosition;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.operation.CoordinateOperation;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
+import org.opengis.util.FactoryException;
 
 
 /**
@@ -334,136 +332,6 @@ public final class Wrapper extends GeometryWrapper {
      */
     public static org.locationtech.jts.geom.Geometry asJTS(Geometry geometry, org.locationtech.jts.geom.GeometryFactory gf) {
         if (gf == null) gf = new org.locationtech.jts.geom.GeometryFactory();
-        final org.locationtech.jts.geom.Geometry jts;
-
-        if (geometry instanceof Point cdt){
-            jts = gf.createPoint(new JTSSequence(cdt.asDataPoint()));
-        } else if (geometry instanceof LinearRing cdt) {
-            jts = gf.createLinearRing(new JTSSequence(cdt.getDataPoints()));
-        } else if (geometry instanceof LineString cdt) {
-            jts = gf.createLineString(new JTSSequence(cdt.getDataPoints()));
-        } else if (geometry instanceof Polygon cdt) {
-            final org.locationtech.jts.geom.LinearRing exterior = (org.locationtech.jts.geom.LinearRing) asJTS(cdt.getExteriorRing(), gf);
-            final org.locationtech.jts.geom.LinearRing[] inners = new org.locationtech.jts.geom.LinearRing[cdt.getNumInteriorRing()];
-            for (int i = 0; i < inners.length; i++) {
-                inners[i] = (org.locationtech.jts.geom.LinearRing) asJTS(cdt.getInteriorRingN(i), gf);
-            }
-            jts = gf.createPolygon(exterior, inners);
-        } else if (geometry instanceof MultiPoint<?> cdt) {
-            jts = gf.createMultiPoint(new JTSSequence(cdt.asDataPoints()));
-        } else if (geometry instanceof MultiLineString cdt) {
-            final org.locationtech.jts.geom.LineString[] children = new org.locationtech.jts.geom.LineString[cdt.getNumGeometries()];
-            for (int i = 0; i < children.length; i++) {
-                children[i] = (org.locationtech.jts.geom.LineString) asJTS(cdt.getGeometryN(i), gf);
-            }
-            jts = gf.createMultiLineString(children);
-        } else if (geometry instanceof MultiPolygon cdt) {
-            final org.locationtech.jts.geom.Polygon[] children = new org.locationtech.jts.geom.Polygon[cdt.getNumGeometries()];
-            for (int i = 0; i < children.length; i++) {
-                children[i] = (org.locationtech.jts.geom.Polygon) asJTS(cdt.getGeometryN(i), gf);
-            }
-            jts = gf.createMultiPolygon(children);
-        } else if (geometry instanceof MultiPolygon cdt) {
-            final org.locationtech.jts.geom.Geometry[] children = new org.locationtech.jts.geom.Geometry[cdt.getNumGeometries()];
-            for (int i = 0; i < children.length; i++) {
-                children[i] = (org.locationtech.jts.geom.Geometry) asJTS(cdt.getGeometryN(i), gf);
-            }
-            jts = gf.createGeometryCollection(children);
-        } else {
-            throw new UnsupportedOperationException("Geometry type " + geometry.getClass().getName() + " has no match in JTS library");
-        }
-
-        jts.setUserData(geometry.getCoordinateReferenceSystem());
-        return jts;
-    }
-    /**
-     * Decorate a DataPoint as a JTS CoordinateSequence
-     */
-    private static class JTSSequence implements CoordinateSequence {
-
-        private final DataPoints ps;
-
-        public JTSSequence(DataPoints ps) {
-            this.ps = ps;
-        }
-
-        @Override
-        public int getDimension() {
-            return ps.getDimension();
-        }
-
-        @Override
-        public Coordinate getCoordinate(int i) {
-            return getCoordinateCopy(i);
-        }
-
-        @Override
-        public Coordinate getCoordinateCopy(int i) {
-            final Coordinate crd = createCoordinate();
-            getCoordinate(i, crd);
-            return crd;
-        }
-
-        @Override
-        public void getCoordinate(int idx, Coordinate crdnt) {
-            Tuple tuple = ps.getPosition(idx);
-            for (int i = 0; i < tuple.getDimension(); i++) {
-                crdnt.setOrdinate(i, tuple.get(i));
-            }
-        }
-
-        @Override
-        public double getX(int i) {
-            return ps.getPosition(i).get(0);
-        }
-
-        @Override
-        public double getY(int i) {
-            return ps.getPosition(i).get(1);
-        }
-
-        @Override
-        public double getOrdinate(int i, int i1) {
-            return ps.getPosition(i).get(i1);
-        }
-
-        @Override
-        public int size() {
-            return ps.size();
-        }
-
-        @Override
-        public void setOrdinate(int i, int i1, double d) {
-            Tuple position = ps.getPosition(i);
-            position.set(i1, d);
-            ps.setPosition(i, position);
-        }
-
-        @Override
-        public Coordinate[] toCoordinateArray() {
-            final Coordinate[] coords = new Coordinate[ps.size()];
-            for (int i = 0;  i < coords.length; i++) {
-                coords[i] = getCoordinateCopy(i);
-            }
-            return coords;
-        }
-
-        @Override
-        public Envelope expandEnvelope(Envelope envlp) {
-            final org.opengis.geometry.Envelope env = ps.getEnvelope();
-            envlp.expandToInclude(new Envelope(env.getMinimum(0), env.getMaximum(0), env.getMinimum(1), env.getMaximum(1)));
-            return envlp;
-        }
-
-        @Override
-        public CoordinateSequence copy() {
-            final DataPoints cp = new ArrayDataPoints(ps.getAttributeArray(AttributesType.ATT_POSITION));
-            return new JTSSequence(cp);
-        }
-
-        public Object clone(){
-            return copy();
-        }
+        return JTSAdapter.asJTS(geometry, false, gf);
     }
-
 }
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
index 3a9282399e..c273887fce 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/JTSAdapter.java
@@ -16,24 +16,35 @@
  */
 package org.apache.sis.geometries.adapter;
 
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.*;
 import java.util.ArrayList;
 import java.util.List;
-import org.locationtech.jts.geom.Coordinate;
-import org.locationtech.jts.geom.CoordinateSequence;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.BBox;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.Geometries;
+import org.apache.sis.geometries.Geometry;
+import org.apache.sis.geometries.GeometryCollection;
+import org.apache.sis.geometries.GeometryFactory;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
-import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.CoordinateSequence;
 import org.locationtech.jts.geom.CoordinateXY;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
index 0b7a4d1eef..81ac9db6a2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/PathIteratorAdapter.java
@@ -16,20 +16,20 @@
  */
 package org.apache.sis.geometries.adapter;
 
-import java.util.List;
-import java.util.Iterator;
-import java.util.Collection;
-import java.awt.geom.PathIterator;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.util.Classes;
 import org.apache.sis.util.resources.Errors;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
index 9a3f7d0209..5e2e760a41 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeAdapter.java
@@ -16,27 +16,27 @@
  */
 package org.apache.sis.geometries.adapter;
 
-import java.awt.Shape;
 import java.awt.Rectangle;
-import java.awt.geom.Rectangle2D;
-import java.awt.geom.PathIterator;
+import java.awt.Shape;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.PathIterator;
 import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
 import java.util.Objects;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
+import org.apache.sis.geometry.wrapper.j2d.EmptyShape;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
-import org.apache.sis.geometry.wrapper.j2d.EmptyShape;
 import org.apache.sis.referencing.internal.shared.AbstractShape;
 import org.apache.sis.referencing.internal.shared.IntervalRectangle;
 import org.opengis.geometry.Envelope;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
index 19af5f80a4..0541eb6939 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/adapter/ShapeConverter.java
@@ -17,23 +17,23 @@
 package org.apache.sis.geometries.adapter;
 
 import java.awt.Shape;
-import java.util.List;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.awt.geom.PathIterator;
 import java.awt.geom.IllegalPathStateException;
+import java.awt.geom.PathIterator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Surface;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.internal.shared.AbstractShape;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
index bc91d8cb80..c29f93f144 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Arc.java
@@ -17,11 +17,11 @@
 package org.apache.sis.geometries.curve;
 
 import java.util.List;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Vector;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.maths.Vector;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
index c6e16f79f8..238998b3cc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByBulge.java
@@ -16,14 +16,13 @@
  */
 package org.apache.sis.geometries.curve;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
-import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.Vector;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
index 7d95b40a68..0bbc9a163c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ArcByCenterPoint.java
@@ -17,14 +17,13 @@
 package org.apache.sis.geometries.curve;
 
 import javax.measure.Unit;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.maths.Array;
-import org.apache.sis.geometries.DataPoints;
-
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 /**
  * A single circular arc described by the centre of its circle, the radius of that circle and the
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/BSplineCurve.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/BSplineCurve.java
index 05fd5e82cc..412a1f298c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/BSplineCurve.java
@@ -14,12 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 
-
 /**
  *
  * @author Johann Sorel (Geomatys)
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/Bezier.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Bezier.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/Bezier.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Bezier.java
index 05e9c3cae5..8069be3419 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/Bezier.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Bezier.java
@@ -14,12 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 
-
 /**
  *
  * @author Johann Sorel (Geomatys)
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
index 3f0cff9b13..5c779bf439 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CircularString.java
@@ -16,13 +16,13 @@
  */
 package org.apache.sis.geometries.curve;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.maths.Array;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CompoundCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CompoundCurve.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CompoundCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CompoundCurve.java
index 019f8b6ca3..b2c7cdce25 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CompoundCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CompoundCurve.java
@@ -14,10 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.Point;
 
 /**
  * A curve made of several curves joined end to end, each of which may use a different
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
index 695e874a3d..c1ed8a642c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Conic.java
@@ -16,11 +16,11 @@
  */
 package org.apache.sis.geometries.curve;
 
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.maths.Array;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
 
 
 /**
@@ -33,7 +33,7 @@ public interface Conic extends Curve {
     @UML(identifier="dataPoints", specification=ISO_19107) // section 7.9.5.2
     @Override
     DataPoints getDataPoints();
-    
+
     @UML(identifier="controlPoints", specification=ISO_19107) // section 7.9.5.2
     @Override
     Array getControlPoints();
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/CubicSpline.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CubicSpline.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/CubicSpline.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CubicSpline.java
index f63647768a..a76abc004b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/CubicSpline.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/CubicSpline.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/FunctionArc.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/FunctionArc.java
index d2fe25432e..c193267cf4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/FunctionArc.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polynomials;
+package org.apache.sis.geometries.curve;
 
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.measure.Range;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/FunctionCurve.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/FunctionCurve.java
index fca71cb56c..4512b1a6e6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/FunctionCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/FunctionCurve.java
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polynomials;
+package org.apache.sis.geometries.curve;
 
+import org.apache.sis.geometries.Curve;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.Curve;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
index f60d2151b6..d336a91b32 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Geodesic.java
@@ -17,14 +17,14 @@
 package org.apache.sis.geometries.curve;
 
 import org.apache.sis.geometries.AttributesType;
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Array;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/KnotType.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/KnotType.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/KnotType.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/KnotType.java
index 78104be3cf..86ae454f64 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/KnotType.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/KnotType.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
index 643e752690..a3d80f8d41 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/LineString.java
@@ -22,12 +22,12 @@ import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
 import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.maths.Array;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/MultiCurve.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/MultiCurve.java
index 1c5d5e65bc..0de7723f3c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/MultiCurve.java
@@ -14,7 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
+
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.GeometryCollection;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/MultiLineString.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/MultiLineString.java
index f786ab4013..284b835870 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/MultiLineString.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
-import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Tuple;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/NURB.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/NURB.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/NURB.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/NURB.java
index b11f976bf6..9d7ccf9bf2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/NURB.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/NURB.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/PolynomialArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialArc.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/PolynomialArc.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialArc.java
index 25a6c7abc1..d1bc9c5f75 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/PolynomialArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialArc.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polynomials;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/PolynomialCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialCurve.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/PolynomialCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialCurve.java
index fb27e94c30..2891965cb9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/PolynomialCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialCurve.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polynomials;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialSpline.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialSpline.java
index 829abe9227..9d927a4306 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/PolynomialSpline.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/PolynomialSpline.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ProductCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ProductCurve.java
similarity index 91%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ProductCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ProductCurve.java
index 199ad7bcb3..459987f3ab 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ProductCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/ProductCurve.java
@@ -14,13 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.curve;
 
 import java.util.List;
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.cs.Projection;
 import org.apache.sis.measure.Range;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/RealFunction.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/RealFunction.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/RealFunction.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/RealFunction.java
index c280e1405e..a7ee93d8dd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/RealFunction.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/RealFunction.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polynomials;
+package org.apache.sis.geometries.curve;
 
 import java.net.URI;
 import java.util.List;
+import org.apache.sis.measure.Range;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.util.GenericName;
-import org.apache.sis.measure.Range;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/RealPolynomial.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/RealPolynomial.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/RealPolynomial.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/RealPolynomial.java
index 4afea452a7..777e6b2b3d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polynomials/RealPolynomial.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/RealPolynomial.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polynomials;
+package org.apache.sis.geometries.curve;
 
 import java.net.URI;
 import java.util.List;
+import org.apache.sis.measure.Range;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.util.GenericName;
-import org.apache.sis.measure.Range;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java
index 52fab47881..e5cb5760a6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Rhumb.java
@@ -16,14 +16,11 @@
  */
 package org.apache.sis.geometries.curve;
 
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
-import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.CurveInterpolation;
-import org.apache.sis.geometries.Bearing;
 import org.apache.sis.geometries.Bearing;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
index 9eef4c8fb3..d5ccc7533f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/Spiral.java
@@ -17,11 +17,10 @@
 package org.apache.sis.geometries.curve;
 
 import java.util.List;
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.polynomials.RealFunction;
 import org.apache.sis.maths.Vector;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/SplineCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/SplineCurve.java
similarity index 94%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/SplineCurve.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/SplineCurve.java
index 04158026d1..7704f533fa 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/SplineCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/SplineCurve.java
@@ -14,13 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import java.util.List;
+import org.apache.sis.geometries.Knot;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.Knot;
-import org.apache.sis.geometries.polynomials.PolynomialCurve;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/SplineCurveForm.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/SplineCurveForm.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/SplineCurveForm.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/SplineCurveForm.java
index 0a5ec2e23a..d3326b403a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/SplineCurveForm.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/curve/SplineCurveForm.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.curve;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
index fd4c828b03..34333af122 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractGeometry.java
@@ -18,13 +18,13 @@ package org.apache.sis.geometries.internal.shared;
 
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
 import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.Tuple;
 import org.opengis.geometry.Envelope;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
index 371e8062cd..0b63a35906 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/AbstractOrientedGeometry.java
@@ -16,10 +16,10 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.OrientedGeometry;
 import org.apache.sis.maths.Similarity;
 import org.apache.sis.maths.Similarity3D;
+import org.opengis.geometry.Envelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
index d5c3759271..eb51c4d586 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/ArrayDataPoints.java
@@ -21,18 +21,18 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.BBox;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
-import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
index 7c6561c17b..904f4ef54a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByBulge.java
@@ -16,10 +16,10 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.geometry.Envelope;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.maths.Vector;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.geometry.Envelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByCenterPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByCenterPoint.java
index e67a2a451c..f4cc3c85b8 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByCenterPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultArcByCenterPoint.java
@@ -17,9 +17,9 @@
 package org.apache.sis.geometries.internal.shared;
 
 import javax.measure.Unit;
-import org.opengis.geometry.Envelope;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
+import org.opengis.geometry.Envelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
index d48ce638a2..3d9c38e343 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCircularString.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.curve.CircularString;
 import org.opengis.geometry.Envelope;
-import org.apache.sis.geometries.DataPoints;
 
 /**
  * A curve made of circular arcs, each defined by three of the control points.
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
index 5ce7475978..57f3991380 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCompoundCurve.java
@@ -16,13 +16,13 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.CompoundCurve;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.curve.CompoundCurve;
+import org.apache.sis.maths.Array;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCurvePolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCurvePolygon.java
index 05a9a7bb89..aae88b2abc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCurvePolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultCurvePolygon.java
@@ -18,16 +18,16 @@ package org.apache.sis.geometries.internal.shared;
 
 import java.util.List;
 import java.util.Objects;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.CurvePolygon;
 import org.apache.sis.geometries.Geometries;
+import org.apache.sis.geometries.surface.CurvePolygon;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
  * A planar surface whose boundary rings may use any interpolation, not only the linear one that a
- * {@link org.apache.sis.geometries.Polygon} is restricted to.
+ * {@link org.apache.sis.geometries.surface.Polygon} is restricted to.
  *
  * @author Johann Sorel (Geomatys)
  */
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
index df6b6b5a85..93f2bc25c6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultDataPoints.java
@@ -18,12 +18,12 @@ package org.apache.sis.geometries.internal.shared;
 
 import java.util.Arrays;
 import java.util.List;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeometryCollection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeometryCollection.java
index 7fd7ba5fd5..a4fcb8774d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeometryCollection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultGeometryCollection.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
index de17d5ba39..1dace6d4f7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLineString.java
@@ -16,9 +16,8 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.DataPoints;
-
+import org.apache.sis.geometries.curve.LineString;
 
 /**
  *
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
index d50e13f119..dab2846a36 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultLinearRing.java
@@ -16,9 +16,8 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.DataPoints;
-
+import org.apache.sis.geometries.curve.LinearRing;
 
 /**
  * TODO : add linear ring constraints.
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiCurve.java
index 3da9597157..cb9bb397a2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiCurve.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.MultiCurve;
+import org.apache.sis.geometries.curve.MultiCurve;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java
index 63db5cace6..55651990fd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiLineString.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.MultiLineString;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
index 3615896438..f19566cfb4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPoint.java
@@ -16,12 +16,12 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolygon.java
index cff7054b0d..2751a0d103 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolygon.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.Polygon;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolyhedron.java
index fb52a4c671..f0b008a981 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiPolyhedron.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
+import org.apache.sis.geometries.solid.MultiPolyhedron;
+import org.apache.sis.geometries.solid.Polyhedron;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.MultiPolyhedron;
-import org.apache.sis.geometries.Polyhedron;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiSurface.java
index a9ba2b8711..b9659c7936 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultMultiSurface.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Surface;
+import org.apache.sis.geometries.surface.MultiSurface;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
index 2964573057..4f2830f34a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPoint.java
@@ -17,14 +17,14 @@
 package org.apache.sis.geometries.internal.shared;
 
 import java.util.Objects;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.DataType;
-import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.NDArrays;
-import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java
index 3b805092d2..f95c8dff6d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolygon.java
@@ -18,13 +18,13 @@ package org.apache.sis.geometries.internal.shared;
 
 import java.util.List;
 import java.util.Objects;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.locationtech.jts.geom.GeometryFactory;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedralSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedralSurface.java
index 1f458071c8..083ff38ea7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedralSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedralSurface.java
@@ -16,11 +16,11 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.PolyhedralSurface;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.PolyhedralSurface;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedron.java
index c96b04d20d..19ffda3b23 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedron.java
@@ -23,12 +23,12 @@ import javax.measure.quantity.Area;
 import javax.measure.quantity.Volume;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.Knot;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.Polyhedron;
 import org.apache.sis.geometries.SolidInterpolation;
+import org.apache.sis.geometries.solid.Polyhedron;
+import org.apache.sis.geometries.surface.MultiPolygon;
 import org.opengis.geometry.DirectPosition;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultRawMultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultRawMultiPoint.java
index b1ddf3cfbb..57b0d38616 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultRawMultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultRawMultiPoint.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
index 61f9be6797..bcf75c1e16 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedCurve.java
@@ -17,16 +17,16 @@
 package org.apache.sis.geometries.internal.shared;
 
 import java.util.Objects;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.Primitive;
 import org.apache.sis.maths.Array;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedSurface.java
index c7cf50c7a1..6884f499db 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultReversedSurface.java
@@ -17,12 +17,12 @@
 package org.apache.sis.geometries.internal.shared;
 
 import java.util.Objects;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Primitive;
 import org.apache.sis.geometries.Surface;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
index bb2a8e5b60..c0be84017a 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangle.java
@@ -17,9 +17,9 @@
 package org.apache.sis.geometries.internal.shared;
 
 import java.util.Objects;
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.surface.Triangle;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangulatedSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangulatedSurface.java
index f9b3458733..99c05fdc42 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangulatedSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultTriangulatedSurface.java
@@ -16,9 +16,9 @@
  */
 package org.apache.sis.geometries.internal.shared;
 
+import org.apache.sis.geometries.surface.TIN;
+import org.apache.sis.geometries.surface.Triangle;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.TIN;
-import org.apache.sis.geometries.Triangle;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
index 77b48bb4d2..e1607ca28d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitive.java
@@ -30,34 +30,34 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.BBox;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.TIN;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.TIN;
+import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.Maths;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vector1D;
 import org.apache.sis.maths.Vector3D;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
-import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.util.collection.Containers;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
index 87e60ec745..ab5ece3bd5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveComparator.java
@@ -21,15 +21,15 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
-import org.apache.sis.maths.Tuple;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.referencing.CRS;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java
index afac329553..40e90b772d 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveIndexes.java
@@ -25,11 +25,11 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.Vector1D;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
index ada79d1044..6c233654ca 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MeshPrimitiveVisitor.java
@@ -17,16 +17,16 @@
 package org.apache.sis.geometries.mesh;
 
 import java.util.HashSet;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Triangle;
-import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Cursor;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MultiMeshPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MultiMeshPrimitive.java
index 77b5e75ca8..e18ae9dbd3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MultiMeshPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/mesh/MultiMeshPrimitive.java
@@ -24,13 +24,13 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.util.ArgumentChecks;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.operation.TransformException;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java
index 5cd998981d..62548e0fb4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ComputeAttribute.java
@@ -21,14 +21,14 @@ import java.util.List;
 import java.util.function.Function;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
-import org.apache.sis.maths.NDArrays;
+import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
+import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
index b40c9e18d6..3fbcffb5a9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Contains.java
@@ -17,14 +17,14 @@
 package org.apache.sis.geometries.operation;
 
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java
index 295af4df76..b343647fe7 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Distance.java
@@ -17,7 +17,6 @@
 package org.apache.sis.geometries.operation;
 
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.operation.ProcessorUtils;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vectors;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
index f1e70bdfda..74f51dcf87 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/GeometryProcessor.java
@@ -28,21 +28,21 @@ import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
+import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
+import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
-import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
index fc3f64990d..3aa91e0f7e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Intersection.java
@@ -22,23 +22,23 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Stream;
-import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometries;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.PreparedTIN;
-import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.GeometryFactory;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.MultiLineString;
 import org.apache.sis.geometries.internal.shared.DefaultDataPoints;
-import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
-import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Cursor;
+import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
+import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
+import org.apache.sis.geometries.surface.PreparedTIN;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Tuple;
+import org.opengis.referencing.operation.TransformException;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ProcessorUtils.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ProcessorUtils.java
index 22098cd059..40ec9da5fa 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ProcessorUtils.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ProcessorUtils.java
@@ -18,11 +18,11 @@ package org.apache.sis.geometries.operation;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.sis.geometries.Geometry;
+import org.apache.sis.referencing.CRS;
 import org.opengis.referencing.crs.CompoundCRS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.Geometry;
-import org.apache.sis.referencing.CRS;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
index 8279f9f03a..ec0bf24470 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/To3D.java
@@ -19,22 +19,22 @@ package org.apache.sis.geometries.operation;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Consumer;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.util.FactoryException;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.maths.SampleSystem;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Cursor;
-import org.apache.sis.maths.Array;
+import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.Cursor;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.util.FactoryException;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
index ae21088fbe..f1a8602810 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/ToPrimitive.java
@@ -20,20 +20,20 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Array;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.MultiLineString;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.geometries.operation.triangulate.EarClipping;
-import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.NDArrays;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
index 64e46921a0..d875b34d45 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/Transform.java
@@ -20,24 +20,24 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.opengis.referencing.operation.TransformException;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.Triangle;
-import org.apache.sis.maths.SampleSystem;
-import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Vector;
-import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Array;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.maths.Array;
+import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vectors;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.MathTransform;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.operation.TransformException;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
index 5ba5f4fe77..aafe0b1f7f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TINBuilder.java
@@ -28,18 +28,18 @@ import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.operation.OperationException;
+import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.maths.Array;
 import org.apache.sis.maths.Maths;
-import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.NDArrays;
-import org.apache.sis.maths.Array;
-import org.apache.sis.geometries.operation.OperationException;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
index e249a8a3ed..7a785c2c23 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/TinDistance.java
@@ -17,11 +17,11 @@
 package org.apache.sis.geometries.operation.simplify.greedyinsert;
 
 import java.util.function.BiFunction;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
index cde8a6ca0a..d4ee2b81c2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/greedyinsert/WTriangle.java
@@ -19,17 +19,17 @@ package org.apache.sis.geometries.operation.simplify.greedyinsert;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.BiFunction;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.GeometryFactory;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.geometries.operation.OperationException;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.geometries.operation.OperationException;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
index f6bfe0d4b8..cdd26c1b03 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOBand.java
@@ -20,6 +20,14 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
+import static org.apache.sis.geometries.operation.spatialanalysis2d.ISOLine.interpolateToArray;
+import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.measure.NumberRange;
+import org.apache.sis.util.ArgumentChecks;
 import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.geom.GeometryCollection;
 import org.locationtech.jts.geom.GeometryFactory;
@@ -28,14 +36,6 @@ import org.locationtech.jts.geom.TopologyException;
 import org.locationtech.jts.geom.impl.PackedCoordinateSequence;
 import org.locationtech.jts.geom.impl.PackedCoordinateSequenceFactory;
 import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.Triangle;
-import org.apache.sis.geometries.mesh.MeshPrimitive;
-import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
-import static org.apache.sis.geometries.operation.spatialanalysis2d.ISOLine.interpolateToArray;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.measure.NumberRange;
-import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
index 0a61b6bd0d..094fd22e0f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/spatialanalysis2d/ISOLine.java
@@ -19,21 +19,21 @@ package org.apache.sis.geometries.operation.spatialanalysis2d;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
-import org.locationtech.jts.geom.Coordinate;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.util.FactoryException;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
+import org.apache.sis.geometries.surface.Triangle;
+import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
-import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.maths.Vector3D;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Array;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.referencing.CommonCRS;
-import org.apache.sis.geometries.DataPoints;
+import org.locationtech.jts.geom.Coordinate;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.util.FactoryException;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
index e37cc46cd9..f49c0c5ba2 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/EarClipping.java
@@ -23,14 +23,14 @@ import java.util.List;
 import org.apache.sis.geometries.AttributesType;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.maths.Array;
 import org.apache.sis.maths.Maths;
-import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector2D;
-import org.apache.sis.maths.Array;
 import static org.apache.sis.maths.Vectors.*;
-import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.util.ArraysExt;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java
index 1d4b1df675..192ae45310 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/Delaunay.java
@@ -23,19 +23,19 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.opengis.geometry.Envelope;
+import org.apache.sis.geometries.index.KdTree;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
-import org.apache.sis.geometries.index.KdTree;
+import org.apache.sis.geometries.operation.OperationException;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.maths.Array;
 import org.apache.sis.maths.Maths;
-import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.NDArrays;
+import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
-import org.apache.sis.maths.Array;
-import org.apache.sis.geometries.operation.OperationException;
-import org.apache.sis.geometry.GeneralEnvelope;
 import org.apache.sis.util.ArgumentChecks;
+import org.opengis.geometry.Envelope;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
index 4cf6696409..b20b67819e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedEdge.java
@@ -17,16 +17,16 @@
 package org.apache.sis.geometries.operation.triangulate.delaunay;
 
 import java.util.Iterator;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.Tuple;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
index 3c15a74cc0..dd619b3252 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/triangulate/delaunay/OrientedTriangle.java
@@ -17,20 +17,20 @@
 package org.apache.sis.geometries.operation.triangulate.delaunay;
 
 import java.awt.geom.Point2D;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.AttributesType;
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.GeometryFactory;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
-import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
+import org.apache.sis.geometries.mesh.MeshPrimitive.Vertex;
 import org.apache.sis.geometries.operation.OperationException;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.referencing.internal.shared.ShapeUtilities;
-import org.apache.sis.geometries.DataPoints;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
similarity index 94%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
index 5459a53f4a..661f8bcb42 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPoint.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/MultiPoint.java
@@ -14,11 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.point;
 
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.GeometryCollection;
+import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Tuple;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/PointCloud.java
similarity index 81%
copy from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java
copy to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/PointCloud.java
index 009f19b13e..e35a7411c9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/point/PointCloud.java
@@ -14,10 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.sis.geometries.point;
 
 /**
- * This package contains ellipsoidal trigonometry functions and classes.
+ * TODO
  *
- * @see https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid
+ * @author Johann Sorel (Geomatys)
  */
-package org.apache.sis.geometries.ellipsoidal;
+public class PointCloud {
+
+}
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/griddedsolid/BSolidSpline.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/BSolidSpline.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/griddedsolid/BSolidSpline.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/BSolidSpline.java
index df95e242fa..c8f9ae6b00 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/griddedsolid/BSolidSpline.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/BSolidSpline.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.griddedsolid;
+package org.apache.sis.geometries.solid;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Capsule.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Capsule.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
index 5e1b2b4e31..ac89d6f9f4 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Capsule.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.solid;
 
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
 import static org.opengis.annotation.Specification.ISO_12113;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
index 4daca93ba3..b8cf13e02f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Cylinder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.solid;
 
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
 import static org.opengis.annotation.Specification.ISO_12113;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractOrientedGeometry;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Frustrum.java
similarity index 94%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Frustrum.java
index 864602c55a..d69751c372 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Frustrum.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Frustrum.java
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.solid;
 
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.Plane;
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.opengis.geometry.Envelope;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/MultiPolyhedron.java
similarity index 93%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolyhedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/MultiPolyhedron.java
index e4fb4cff40..39bd819820 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/MultiPolyhedron.java
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.solid;
+
+import org.apache.sis.geometries.GeometryCollection;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/griddedsolid/ParametricCurveSolid.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/ParametricCurveSolid.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/griddedsolid/ParametricCurveSolid.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/ParametricCurveSolid.java
index 458414b552..c3ccc4af66 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/griddedsolid/ParametricCurveSolid.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/ParametricCurveSolid.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.griddedsolid;
+package org.apache.sis.geometries.solid;
 
 import java.util.List;
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
-import org.opengis.geometry.DirectPosition;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.GeometryType;
 import org.apache.sis.geometries.Solid;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
+import org.opengis.geometry.DirectPosition;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Polyhedron.java
similarity index 92%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polyhedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Polyhedron.java
index 77f244f756..83356cb580 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Polyhedron.java
@@ -14,9 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.solid;
 
 import java.util.List;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.Solid;
+import org.apache.sis.geometries.surface.MultiPolygon;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
similarity index 94%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
index fa6280b90f..2e00e0c927 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Sphere.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java
@@ -14,22 +14,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.solid;
 
 import java.util.List;
-import org.opengis.geometry.Envelope;
-import org.opengis.geometry.DirectPosition;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.BBox;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.Geometries;
+import org.apache.sis.geometries.GeometryType;
+import org.apache.sis.geometries.Knot;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.geometries.surface.ParametricCurveSurface;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
 import org.apache.sis.util.ArgumentChecks;
-
-// Specific to the geoapi-4.0 branch:
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
+import org.opengis.geometry.DirectPosition;
+import org.opengis.geometry.Envelope;
 import org.opengis.metadata.Identifier;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/package-info.java
similarity index 76%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/package-info.java
index 009f19b13e..ed6763cc75 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ellipsoidal/package-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/package-info.java
@@ -16,8 +16,9 @@
  */
 
 /**
- * This package contains ellipsoidal trigonometry functions and classes.
+ * Package for all Solid subtypes.
  *
- * @see https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid
+ * ISO-19107 separate them in different packages which result in packages with one or two classes.
+ * Grouping all types in a single package simplify management and search.
  */
-package org.apache.sis.geometries.ellipsoidal;
+package org.apache.sis.geometries.solid;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java
index 59a4ac7509..875616eda9 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/AbstractPolyhedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java
@@ -14,23 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
 import java.util.List;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.Polyhedron;
-import org.apache.sis.geometries.Sphere;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
+import org.apache.sis.geometries.solid.Polyhedron;
+import org.apache.sis.geometries.solid.Sphere;
+import org.apache.sis.geometries.spherical.SphericalConvexPolygon;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector3D;
-import org.apache.sis.geometries.spherical.SphericalConvexPolygon;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Dodecahedron.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Dodecahedron.java
index e66ab9c530..a79ffe04bd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Dodecahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Dodecahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Hexahedron.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Hexahedron.java
index 1aa79d8af0..c89f800214 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Hexahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Hexahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Icosahedron.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Icosahedron.java
index 8e95911023..83df0b730c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Icosahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Icosahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Octahedron.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Octahedron.java
index 9ab1181a74..af98108e87 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Octahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Octahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/RhombicTriacontahedron.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/RhombicTriacontahedron.java
index 3425a17fe1..ea05f96ff3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/RhombicTriacontahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/RhombicTriacontahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Tetrahedron.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Tetrahedron.java
index fd782c7b03..d6b88ee4c6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/Tetrahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/Tetrahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/TruncatedIcosahedron.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/TruncatedIcosahedron.java
index f6fa4b2aab..b05ec4b539 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/TruncatedIcosahedron.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/TruncatedIcosahedron.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
 
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ArrayFactoryJava;
 import org.apache.sis.maths.DataType;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/package-info.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/package-info.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/package-info.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/package-info.java
index 9cfd88ec24..bd895652e3 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/polyhedron/package-info.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/package-info.java
@@ -25,4 +25,4 @@
  * <p>
  * Some practical use cases include : DGGRS
  */
-package org.apache.sis.geometries.polyhedron;
+package org.apache.sis.geometries.solid.polyhedron;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java
index b6b61493a2..0d553ed186 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/GreatCircleArc.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.spherical;
 
-import org.apache.sis.geometries.Sphere;
+import org.apache.sis.geometries.solid.Sphere;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.ReadOnly;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java
index 59327c55b3..7dd163507b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalConvexPolygon.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.spherical;
 
-import org.apache.sis.geometries.Sphere;
+import org.apache.sis.geometries.solid.Sphere;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector3D;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java
index 2d9fce0b98..19d696db85 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/spherical/SphericalTriangle.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.spherical;
 
-import org.apache.sis.geometries.Sphere;
+import org.apache.sis.geometries.solid.Sphere;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.ReadOnly;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BSplineSurface.java
similarity index 92%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineSurface.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BSplineSurface.java
index 9a0870b024..3af033f45c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BSplineSurface.java
@@ -14,15 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.surface;
 
 import java.util.List;
+import org.apache.sis.geometries.GeometryType;
+import org.apache.sis.geometries.Knot;
+import org.apache.sis.geometries.curve.KnotType;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.Knot;
-import org.apache.sis.geometries.GeometryType;
-import org.apache.sis.geometries.ParametricCurveSurface;
-import org.apache.sis.geometries.splines.KnotType;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineSurfaceForm.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BSplineSurfaceForm.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineSurfaceForm.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BSplineSurfaceForm.java
index 80b780f072..8441bcfbc1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/splines/BSplineSurfaceForm.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BSplineSurfaceForm.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.splines;
+package org.apache.sis.geometries.surface;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BilinearGrid.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BilinearGrid.java
similarity index 92%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BilinearGrid.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BilinearGrid.java
index 42d80f182b..0df805cbbf 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/BilinearGrid.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/BilinearGrid.java
@@ -14,11 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.ParametricCurveSurface;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/CurvePolygon.java
similarity index 95%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/CurvePolygon.java
index b71d06da2a..bc3e2eac2c 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/CurvePolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/CurvePolygon.java
@@ -14,13 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import java.util.List;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.Surface;
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.coordinate.GriddedSurface;
-import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/MultiPolygon.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/MultiPolygon.java
index e993092a43..e690fb410b 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiPolygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/MultiPolygon.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/MultiSurface.java
similarity index 94%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiSurface.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/MultiSurface.java
index 01ce887dcc..dbcc60ba12 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/MultiSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/MultiSurface.java
@@ -14,7 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
+
+import org.apache.sis.geometries.GeometryCollection;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.Surface;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ParametricCurveSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java
similarity index 91%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ParametricCurveSurface.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java
index fe21d7eabd..0b1d8695e1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/ParametricCurveSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java
@@ -14,9 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import java.util.List;
+import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.GeometryType;
+import org.apache.sis.geometries.Knot;
+import org.apache.sis.geometries.Surface;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
 import org.opengis.geometry.DirectPosition;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Polygon.java
similarity index 97%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Polygon.java
index b4072fa34a..98cf9d21dc 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Polygon.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Polygon.java
@@ -14,13 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
-import org.apache.sis.geometries.curve.LinearRing;
 import java.util.List;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.Surface;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PolyhedralSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/PolyhedralSurface.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PolyhedralSurface.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/PolyhedralSurface.java
index 4c3b9adc0f..1e6e8313b0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PolyhedralSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/PolyhedralSurface.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
+import org.apache.sis.geometries.Surface;
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
-import org.opengis.referencing.operation.TransformException;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/PreparedTIN.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/PreparedTIN.java
index 246c577dfc..2cd7ffcfe5 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/PreparedTIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/PreparedTIN.java
@@ -14,16 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Optional;
-import java.util.function.ToDoubleFunction;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.Geometries;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometry.Envelopes;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.maths.Tuple;
+import org.apache.sis.maths.Vector;
+import org.apache.sis.maths.Vector2D;
+import org.apache.sis.maths.Vectors;
+import org.apache.sis.referencing.CRS;
+import org.apache.sis.util.ArgumentChecks;
 import org.locationtech.jts.index.quadtree.Quadtree;
 import org.opengis.coverage.CannotEvaluateException;
 import org.opengis.geometry.Envelope;
@@ -31,14 +41,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
-import org.apache.sis.maths.Tuple;
-import org.apache.sis.maths.Vector;
-import org.apache.sis.maths.Vector2D;
-import org.apache.sis.maths.Vectors;
-import org.apache.sis.geometry.Envelopes;
-import org.apache.sis.geometry.GeneralEnvelope;
-import org.apache.sis.referencing.CRS;
-import org.apache.sis.util.ArgumentChecks;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/TIN.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/TIN.java
index 445e8b7d12..739d067b99 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TIN.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/TIN.java
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Tuple;
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
similarity index 98%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
index a1d24855cb..5935e83e44 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Triangle.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Triangle.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
-import org.apache.sis.geometries.curve.LinearRing;
 import java.util.Collections;
 import java.util.List;
-import static org.opengis.annotation.Specification.ISO_19107;
-import org.opengis.annotation.UML;
-import org.opengis.geometry.Envelope;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.geometries.AttributesType;
+import org.apache.sis.geometries.BBox;
+import org.apache.sis.geometries.DataPoints;
+import org.apache.sis.geometries.Point;
+import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.internal.shared.AbstractGeometry;
 import org.apache.sis.maths.Maths;
 import org.apache.sis.maths.Tuple;
@@ -30,6 +30,10 @@ import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vector2D;
 import org.apache.sis.maths.Vector3D;
 import org.apache.sis.maths.Vectors;
+import static org.opengis.annotation.Specification.ISO_19107;
+import org.opengis.annotation.UML;
+import org.opengis.geometry.Envelope;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TriangulatedSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/TriangulatedSurface.java
similarity index 96%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TriangulatedSurface.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/TriangulatedSurface.java
index f1367e2b16..0deb733747 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/TriangulatedSurface.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/TriangulatedSurface.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries;
+package org.apache.sis.geometries.surface;
 
 import static org.opengis.annotation.Specification.ISO_19107;
 import org.opengis.annotation.UML;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLReader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLReader.java
index b8b8d2f8fb..b1a83860a1 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLReader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLReader.java
@@ -27,8 +27,6 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
index b815e25974..4df773ee3e 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/AbstractGMLWriter.java
@@ -20,24 +20,22 @@ import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Curve;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiCurve;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
 import org.apache.sis.geometries.Surface;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.MultiCurve;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiSurface;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -115,7 +113,7 @@ abstract class AbstractGMLWriter implements GMLGeometryWriter {
      * approximating anything.
      *
      * <p>This hook is consulted <em>before</em> the {@link GeometryCollection} catch-all, because
-     * {@link org.apache.sis.geometries.MultiPolyhedron} extends {@code GeometryCollection} and would
+     * {@link org.apache.sis.geometries.solid.MultiPolyhedron} extends {@code GeometryCollection} and would
      * otherwise be swallowed by it. An implementation must therefore return {@code false} for a
      * plain {@code GeometryCollection} it does not specifically recognise, or collections would
      * never reach {@link #writeMultiGeometry writeMultiGeometry(…)}.</p>
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/DOMXMLStreamReader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/DOMXMLStreamReader.java
index eae6f4486e..8a7a2316a0 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/DOMXMLStreamReader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/DOMXMLStreamReader.java
@@ -20,14 +20,12 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-
 import javax.xml.XMLConstants;
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java
index 426f633ab6..1eafa8a063 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Reader.java
@@ -25,17 +25,15 @@ import javax.xml.stream.XMLStreamReader;
 import org.apache.sis.geometries.BBox;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
+import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
index 02f6237114..cb25167d11 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML2Writer.java
@@ -21,18 +21,18 @@ import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import org.apache.sis.geometries.BBox;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.GeometryCollection;
+import org.apache.sis.geometries.Point;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiCurve;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiSurface;
-import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.curve.MultiCurve;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiSurface;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
index bee63993f8..fc3d3ccb87 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Reader.java
@@ -25,32 +25,30 @@ import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import org.apache.sis.geometries.BBox;
-import org.apache.sis.geometries.CompoundCurve;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.CurvePolygon;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.MultiPolyhedron;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.PolyhedralSurface;
-import org.apache.sis.geometries.Polyhedron;
 import org.apache.sis.geometries.Surface;
-import org.apache.sis.geometries.TIN;
-import org.apache.sis.geometries.Triangle;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
+import org.apache.sis.geometries.curve.CompoundCurve;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.solid.MultiPolyhedron;
+import org.apache.sis.geometries.solid.Polyhedron;
+import org.apache.sis.geometries.surface.CurvePolygon;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.PolyhedralSurface;
+import org.apache.sis.geometries.surface.TIN;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.maths.Vector;
 import org.apache.sis.maths.Vectors;
 import org.apache.sis.measure.Units;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
@@ -527,8 +525,8 @@ public final class GML3Reader extends AbstractGMLReader {
      * {@code <gml:MultiLineString>}. Both the per-member ({@code curveMember},
      * {@code lineStringMember}) and the compact ({@code curveMembers}) forms are accepted.
      *
-     * <p>The result is a {@link org.apache.sis.geometries.MultiLineString} when every member is a
-     * {@link LineString}, and the more general {@link org.apache.sis.geometries.MultiCurve}
+     * <p>The result is a {@link org.apache.sis.geometries.curve.MultiLineString} when every member is a
+     * {@link LineString}, and the more general {@link org.apache.sis.geometries.curve.MultiCurve}
      * otherwise. The cursor must be on the element's {@link #START_ELEMENT} event.</p>
      */
     private Geometry parseMultiCurve(final CoordinateReferenceSystem crs, final String enclosingTagName)
@@ -567,8 +565,8 @@ public final class GML3Reader extends AbstractGMLReader {
      * {@code <gml:MultiPolygon>}. Both the per-member ({@code surfaceMember},
      * {@code polygonMember}) and the compact ({@code surfaceMembers}) forms are accepted.
      *
-     * <p>The result is a {@link org.apache.sis.geometries.MultiPolygon} when every member is a
-     * {@link Polygon}, and the more general {@link org.apache.sis.geometries.MultiSurface}
+     * <p>The result is a {@link org.apache.sis.geometries.surface.MultiPolygon} when every member is a
+     * {@link Polygon}, and the more general {@link org.apache.sis.geometries.surface.MultiSurface}
      * otherwise. The cursor must be on the element's {@link #START_ELEMENT} event.</p>
      */
     private Geometry parseMultiSurface(final CoordinateReferenceSystem crs, final String enclosingTagName)
@@ -973,7 +971,7 @@ public final class GML3Reader extends AbstractGMLReader {
      * Parses a {@code <gml:CompositeCurve>} element, whose {@code curveMember} children are joined
      * end to end into a single curve. Unlike {@code gml:MultiCurve}, the members of a composite
      * curve are contiguous, which is why this becomes a {@link CompoundCurve} and not a
-     * {@link org.apache.sis.geometries.MultiCurve}.
+     * {@link org.apache.sis.geometries.curve.MultiCurve}.
      */
     private CompoundCurve parseCompositeCurve(final CoordinateReferenceSystem crs)
             throws XMLStreamException, DataStoreContentException, DataStoreReferencingException
@@ -1027,7 +1025,7 @@ public final class GML3Reader extends AbstractGMLReader {
      * <p>The result is the most specific type the patches allow: a lone planar patch is returned as
      * a {@link Polygon} on its own, all-triangular patches become a {@link TIN}, other planar
      * patches a {@link PolyhedralSurface}. A patch with a non-linear boundary forces a
-     * {@link org.apache.sis.geometries.MultiSurface} instead, because
+     * {@link org.apache.sis.geometries.surface.MultiSurface} instead, because
      * {@code PolyhedralSurface<T extends Polygon>} cannot hold a {@link CurvePolygon} — and with it
      * the guarantee that the patches are contiguous is lost. That is a real degradation, not a
      * relabelling, and the writer consequently emits {@code gml:MultiSurface} for such a surface.</p>
@@ -1136,7 +1134,7 @@ public final class GML3Reader extends AbstractGMLReader {
      * Parses a {@code <gml:CompositeSurface>} element, whose {@code surfaceMember} children are
      * contiguous and together form one surface — the same contract as
      * {@link PolyhedralSurface}, which is therefore what this becomes. A
-     * {@link org.apache.sis.geometries.MultiSurface} would be the wrong choice: it explicitly
+     * {@link org.apache.sis.geometries.surface.MultiSurface} would be the wrong choice: it explicitly
      * places no contiguity constraint on its members, discarding the strongest thing the document
      * says.
      */
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
index 09f7e70c9e..bf6113aedd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GML3Writer.java
@@ -23,33 +23,33 @@ import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import org.apache.sis.geometries.BBox;
-import org.apache.sis.geometries.CompoundCurve;
 import org.apache.sis.geometries.Curve;
-import org.apache.sis.geometries.CurvePolygon;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.Empty;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
-import org.apache.sis.geometries.curve.LineString;
-import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiCurve;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.MultiPolyhedron;
-import org.apache.sis.geometries.MultiSurface;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.PolyhedralSurface;
-import org.apache.sis.geometries.Polyhedron;
 import org.apache.sis.geometries.Surface;
-import org.apache.sis.geometries.TIN;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.curve.CircularString;
+import org.apache.sis.geometries.curve.CompoundCurve;
+import org.apache.sis.geometries.curve.LineString;
+import org.apache.sis.geometries.curve.LinearRing;
+import org.apache.sis.geometries.curve.MultiCurve;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.solid.MultiPolyhedron;
+import org.apache.sis.geometries.solid.Polyhedron;
+import org.apache.sis.geometries.surface.CurvePolygon;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.surface.MultiSurface;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.PolyhedralSurface;
+import org.apache.sis.geometries.surface.TIN;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
@@ -191,7 +191,7 @@ public final class GML3Writer extends AbstractGMLWriter {
     /**
      * Writes a {@code <gml:MultiCurve>} element, with its {@code curveMember} children.
      * This is the non-deprecated GML 3.2 spelling; the legacy {@code MultiLineString} is never
-     * emitted, even for a {@link org.apache.sis.geometries.MultiLineString}.
+     * emitted, even for a {@link org.apache.sis.geometries.curve.MultiLineString}.
      */
     @Override
     protected void writeMultiCurve(final MultiCurve<?> g, final String srsName, final boolean declareNamespace)
@@ -203,7 +203,7 @@ public final class GML3Writer extends AbstractGMLWriter {
     /**
      * Writes a {@code <gml:MultiSurface>} element, with its {@code surfaceMember} children.
      * This is the non-deprecated GML 3.2 spelling; the legacy {@code MultiPolygon} is never
-     * emitted, even for a {@link org.apache.sis.geometries.MultiPolygon}.
+     * emitted, even for a {@link org.apache.sis.geometries.surface.MultiPolygon}.
      */
     @Override
     protected void writeMultiSurface(final MultiSurface<?> g, final String srsName, final boolean declareNamespace)
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLCRS.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLCRS.java
index 0e63569fc1..fae7e19834 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLCRS.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLCRS.java
@@ -24,8 +24,6 @@ import org.apache.sis.referencing.CommonCRS;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.metadata.Identifier;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.crs.GeodeticCRS;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLGeometryWriter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLGeometryWriter.java
index 790880138f..5c595722ee 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLGeometryWriter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLGeometryWriter.java
@@ -20,8 +20,6 @@ import javax.xml.stream.XMLStreamException;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLReader.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLReader.java
index e32b87ba2f..29c6e4aa3f 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLReader.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLReader.java
@@ -21,7 +21,6 @@ import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLWriter.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLWriter.java
index 22a611f092..9d278ca6a6 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLWriter.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/GMLWriter.java
@@ -19,12 +19,9 @@ package org.apache.sis.gml;
 import java.io.OutputStream;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
-
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
index 0c20a59bbb..f7a05cc5fd 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/gml/PositionListBuilder.java
@@ -17,16 +17,14 @@
 package org.apache.sis.gml;
 
 import java.util.Arrays;
+import org.apache.sis.geometries.DataPoints;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.storage.DataStoreContentException;
 import org.apache.sis.storage.DataStoreReferencingException;
-
-// Specific to the geoapi-3.1 and geoapi-4.0 branches:
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.geometries.DataPoints;
 
 
 /**
diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/TextureAtlas.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/TextureAtlas.java
similarity index 99%
rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/TextureAtlas.java
rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/TextureAtlas.java
index b20b12fd6c..f6846d53bf 100644
--- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/operation/simplify/TextureAtlas.java
+++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/scene/TextureAtlas.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.geometries.operation.simplify;
+package org.apache.sis.scene;
 
 import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java
index 23260f1d03..4301893b99 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/PreparedTINTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.surface.PreparedTIN;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.opengis.referencing.operation.TransformException;
 import org.opengis.util.FactoryException;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
index 5a60b4dba0..b209528e6d 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/TriangleTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries;
 
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.Array;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
index acfd4cf750..4a5b18e07f 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeAdapterTest.java
@@ -22,7 +22,7 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.geometries.internal.shared.ArrayDataPoints;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
index b1280bc438..a05b4f6c63 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/adapter/ShapeConverterTest.java
@@ -34,9 +34,9 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiPolygon;
+import org.apache.sis.geometries.surface.MultiPolygon;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector2D;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
index e0dabd6f66..5f095c0ba0 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/mesh/PrimitiveVisitorTest.java
@@ -23,8 +23,8 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
 import org.apache.sis.geometries.Geometries;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.TIN;
-import org.apache.sis.geometries.Triangle;
+import org.apache.sis.geometries.surface.TIN;
+import org.apache.sis.geometries.surface.Triangle;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MeshPrimitiveVisitor;
 import org.apache.sis.maths.SampleSystem;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
index 2a8f242ee5..a27e3e43cc 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/ToPrimitiveTest.java
@@ -22,10 +22,10 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.point.MultiPoint;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.geometries.mesh.MeshPrimitive;
 import org.apache.sis.geometries.mesh.MultiMeshPrimitive;
 import org.apache.sis.maths.NDArrays;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/simplify/TextureAtlasTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/simplify/TextureAtlasTest.java
index 2b1d7abb5a..4f0de0c25b 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/simplify/TextureAtlasTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/operation/simplify/TextureAtlasTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.geometries.operation.simplify;
 
+import org.apache.sis.scene.TextureAtlas;
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java
index d42d5398ab..74457759a5 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/GreatCircleArcTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.spherical;
 
-import org.apache.sis.geometries.Sphere;
+import org.apache.sis.geometries.solid.Sphere;
 import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector3D;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java
index 08225aeb88..d74d5c2fb1 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalConvexPolygonTest.java
@@ -17,7 +17,7 @@
 package org.apache.sis.geometries.spherical;
 
 import java.util.List;
-import org.apache.sis.geometries.Sphere;
+import org.apache.sis.geometries.solid.Sphere;
 import org.apache.sis.maths.Array;
 import org.apache.sis.maths.DataType;
 import org.apache.sis.maths.NDArrays;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java
index 8f21efc756..ac001962a8 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/geometries/spherical/SphericalTriangleTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sis.geometries.spherical;
 
-import org.apache.sis.geometries.Sphere;
+import org.apache.sis.geometries.solid.Sphere;
 import org.apache.sis.maths.ReadOnly;
 import org.apache.sis.maths.Vector3D;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
index 6b3bd4c805..00054280a2 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML2ReaderTest.java
@@ -27,11 +27,11 @@ import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiPolygon;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiPolygon;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
index 6da6a6023c..a826430dc2 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3ReaderTest.java
@@ -22,26 +22,26 @@ import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import org.apache.sis.geometries.BBox;
-import org.apache.sis.geometries.CompoundCurve;
+import org.apache.sis.geometries.curve.CompoundCurve;
 import org.apache.sis.geometries.Curve;
 import org.apache.sis.geometries.CurveInterpolation;
-import org.apache.sis.geometries.CurvePolygon;
+import org.apache.sis.geometries.surface.CurvePolygon;
 import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.MultiLineString;
-import org.apache.sis.geometries.MultiPoint;
-import org.apache.sis.geometries.MultiPolygon;
-import org.apache.sis.geometries.MultiPolyhedron;
+import org.apache.sis.geometries.curve.MultiLineString;
+import org.apache.sis.geometries.point.MultiPoint;
+import org.apache.sis.geometries.surface.MultiPolygon;
+import org.apache.sis.geometries.solid.MultiPolyhedron;
 import org.apache.sis.geometries.Orientable;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
-import org.apache.sis.geometries.PolyhedralSurface;
-import org.apache.sis.geometries.Polyhedron;
+import org.apache.sis.geometries.surface.Polygon;
+import org.apache.sis.geometries.surface.PolyhedralSurface;
+import org.apache.sis.geometries.solid.Polyhedron;
 import org.apache.sis.geometries.Surface;
-import org.apache.sis.geometries.TIN;
+import org.apache.sis.geometries.surface.TIN;
 import org.apache.sis.geometries.curve.ArcByBulge;
 import org.apache.sis.geometries.curve.ArcByCenterPoint;
 import org.apache.sis.geometries.curve.CircularString;
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
index 616865c35b..462e11a88f 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GML3WriterTest.java
@@ -139,7 +139,7 @@ public final class GML3WriterTest extends TestCase {
     }
 
     /**
-     * Tests writing a {@link org.apache.sis.geometries.MultiLineString} as a
+     * Tests writing a {@link org.apache.sis.geometries.curve.MultiLineString} as a
      * {@code <gml:MultiCurve>} element (the non-deprecated GML 3.2 spelling).
      */
     @Test
@@ -151,7 +151,7 @@ public final class GML3WriterTest extends TestCase {
     }
 
     /**
-     * Tests writing a {@link org.apache.sis.geometries.MultiPolygon} as a
+     * Tests writing a {@link org.apache.sis.geometries.surface.MultiPolygon} as a
      * {@code <gml:MultiSurface>} element (the non-deprecated GML 3.2 spelling).
      */
     @Test
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLReaderTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLReaderTest.java
index 61c07c802d..0d69b2748e 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLReaderTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GMLReaderTest.java
@@ -21,7 +21,7 @@ import java.io.ByteArrayInputStream;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.sis.geometries.Geometry;
-import org.apache.sis.geometries.MultiLineString;
+import org.apache.sis.geometries.curve.MultiLineString;
 
 import org.apache.sis.storage.DataStoreContentException;
 
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
index 915c3c96ba..bf872085a7 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/GeometryAssert.java
@@ -23,7 +23,7 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryCollection;
 import org.apache.sis.geometries.curve.LineString;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.referencing.CRS;
 
 // Test dependencies
diff --git a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
index 579a996d9d..b9e31915c8 100644
--- a/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
+++ b/incubator/src/org.apache.sis.geometry/test/org/apache/sis/gml/JAXBGeometryAdapterTest.java
@@ -24,7 +24,7 @@ import org.apache.sis.geometries.Geometry;
 import org.apache.sis.geometries.GeometryFactory;
 import org.apache.sis.geometries.curve.LinearRing;
 import org.apache.sis.geometries.Point;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.NDArrays;
 import org.apache.sis.maths.SampleSystem;
 import org.apache.sis.referencing.CRS;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
index e892d517d7..bc2acde80a 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/main/org/apache/sis/storage/dggs/DiscreteGlobalGridSystems.java
@@ -249,12 +249,12 @@ public final class DiscreteGlobalGridSystems {
         return S2.toJTSPolygon(toS2Polygon(extent));
     }
 
-    public static org.apache.sis.geometries.Polygon toSISPolygon(GeographicExtent extent) {
+    public static org.apache.sis.geometries.surface.Polygon toSISPolygon(GeographicExtent extent) {
         return toSISPolygon(toS2Polygon(extent));
 
     }
 
-    public static org.apache.sis.geometries.Polygon toSISPolygon(S2Polygon s2) {
+    public static org.apache.sis.geometries.surface.Polygon toSISPolygon(S2Polygon s2) {
         if (s2 == null) return null;
         final double[] coords = S2.toArray(s2.loop(0));
         final Array positions = NDArrays.of(CommonCRS.WGS84.normalizedGeographic(), coords);
diff --git a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
index 4981760616..86b0cd7866 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/AbstractDggrsTest.java
@@ -33,7 +33,7 @@ import org.apache.sis.coverage.grid.GridExtent;
 import org.apache.sis.coverage.grid.GridGeometry;
 import org.apache.sis.coverage.grid.GridOrientation;
 import org.apache.sis.geometries.curve.LinearRing;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.maths.Tuple;
 import org.apache.sis.maths.Vector2D;
 import org.apache.sis.maths.NDArrays;
diff --git a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/s2/S2Test.java b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/s2/S2Test.java
index 30c66d4a18..7f7c5714a4 100644
--- a/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/s2/S2Test.java
+++ b/incubator/src/org.apache.sis.referencing.dggs/test/org/apache/sis/referencing/dggs/s2/S2Test.java
@@ -19,7 +19,7 @@ package org.apache.sis.referencing.dggs.s2;
 import org.opengis.geometry.Envelope;
 import org.opengis.metadata.extent.GeographicExtent;
 import org.opengis.referencing.operation.TransformException;
-import org.apache.sis.geometries.Polygon;
+import org.apache.sis.geometries.surface.Polygon;
 import org.apache.sis.referencing.dggs.Zone;
 import org.apache.sis.storage.dggs.DiscreteGlobalGridSystems;