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 70752bf4c861096bce86f6a619f4240cdc40a927 Author: jsorel <[email protected]> AuthorDate: Fri Oct 9 15:51:27 2026 +0200 feat(Geometry): define GeometryType on all GeometryCollection implementation, add DefaultSolid to build solid from surfaces --- .../apache/sis/geometries/GeometryCollection.java | 5 +- .../org/apache/sis/geometries/GeometryFactory.java | 17 +++-- .../org/apache/sis/geometries/GeometryType.java | 8 +-- .../main/org/apache/sis/geometries/Solid.java | 6 +- .../internal/shared/DefaultBSplineSolid.java | 4 +- .../internal/shared/DefaultGeometryCollection.java | 15 +++- .../internal/shared/DefaultMultiCurve.java | 3 +- .../internal/shared/DefaultMultiPolyhedron.java | 3 +- .../internal/shared/DefaultMultiSurface.java | 3 +- .../internal/shared/DefaultPolyhedron.java | 5 +- .../internal/shared/DefaultProductCurve.java | 3 +- .../internal/shared/DefaultRawMultiPoint.java | 3 +- .../{DefaultPolyhedron.java => DefaultSolid.java} | 80 ++++++++++++++-------- .../sis/geometries/mesh/MultiMeshPrimitive.java | 7 ++ .../solid/polyhedron/AbstractPolyhedron.java | 6 +- .../sis/geometries/spherical/GreatCircleArc.java | 2 +- .../spherical/SphericalConvexPolygon.java | 2 +- .../geometries/spherical/SphericalTriangle.java | 2 +- .../sis/geometries/{solid => surface}/Capsule.java | 2 +- .../geometries/{solid => surface}/Cylinder.java | 4 +- .../geometries/{solid => surface}/Ellipsoid.java | 2 +- .../geometries/surface/ParametricCurveSurface.java | 2 - .../sis/geometries/{solid => surface}/Sphere.java | 2 +- .../geometries/spherical/GreatCircleArcTest.java | 2 +- .../spherical/SphericalConvexPolygonTest.java | 2 +- .../spherical/SphericalTriangleTest.java | 2 +- 26 files changed, 123 insertions(+), 69 deletions(-) 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 b58e611cb4..55af9eb961 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 @@ -101,10 +101,7 @@ public sealed interface GeometryCollection<T extends Geometry> extends Geometry * @see ISO 19107:2019 - 6.4.31.2 */ @UML(identifier="elementType", specification=ISO_19107) - default Set<GeometryType> getElementType() { - //TODO - throw new UnsupportedOperationException(); - } + Set<GeometryType> getElementType(); /** * Returns whether this collection has no element. 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 28c33b334c..b5a67540ed 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 @@ -95,14 +95,15 @@ import org.apache.sis.geometries.internal.shared.DefaultRawMultiPoint; import org.apache.sis.geometries.internal.shared.DefaultReversedCurve; import org.apache.sis.geometries.internal.shared.DefaultReversedSurface; import org.apache.sis.geometries.internal.shared.DefaultRhumb; +import org.apache.sis.geometries.internal.shared.DefaultSolid; import org.apache.sis.geometries.internal.shared.DefaultSpiral; import org.apache.sis.geometries.internal.shared.DefaultTriangle; import org.apache.sis.geometries.internal.shared.DefaultTriangulatedSurface; import org.apache.sis.geometries.point.MultiPoint; -import org.apache.sis.geometries.solid.Ellipsoid; +import org.apache.sis.geometries.surface.Ellipsoid; import org.apache.sis.geometries.solid.MultiPolyhedron; import org.apache.sis.geometries.solid.Polyhedron; -import org.apache.sis.geometries.solid.Sphere; +import org.apache.sis.geometries.surface.Sphere; import org.apache.sis.geometries.solid.BSplineSolid; import org.apache.sis.geometries.surface.BSplineSurface; import org.apache.sis.geometries.surface.BSplineSurfaceForm; @@ -684,6 +685,10 @@ public final class GeometryFactory { // Solids ///////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////// + public Solid createSolid(List<Surface> surfaces) { + return new DefaultSolid(surfaces); + } + public Polyhedron createPolyhedron(MultiPolygon exteriorShell, List<MultiPolygon> interiorShells) { return new DefaultPolyhedron(exteriorShell, interiorShells); } @@ -728,11 +733,15 @@ public final class GeometryFactory { // //////////////////////////////////////////////////////////////////////// public <T extends Geometry> GeometryCollection<T> createGeometryCollection(T ... geometries) { - return new DefaultGeometryCollection<>(geometries); + return new DefaultGeometryCollection<>(GeometryType.GEOMETRY, geometries); } public <T extends Geometry> GeometryCollection<T> createGeometryCollection(CoordinateReferenceSystem crs, T ... geometries) { - return new DefaultGeometryCollection<>(crs, geometries); + return new DefaultGeometryCollection<>(GeometryType.GEOMETRY, crs, geometries); + } + + public <T extends Geometry> GeometryCollection<T> createGeometryCollection(GeometryType elementType, CoordinateReferenceSystem crs, T ... geometries) { + return new DefaultGeometryCollection<>(elementType, crs, geometries); } // //////////////////////////////////////////////////////////////////////// diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryType.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryType.java index 1c158f2b6d..e5ddcaf7a5 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryType.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/GeometryType.java @@ -43,13 +43,13 @@ import org.apache.sis.geometries.curve.Spiral; import org.apache.sis.geometries.curve.SplineCurve; import org.apache.sis.geometries.point.MultiPoint; import org.apache.sis.geometries.solid.BSplineSolid; -import org.apache.sis.geometries.solid.Capsule; -import org.apache.sis.geometries.solid.Cylinder; -import org.apache.sis.geometries.solid.Ellipsoid; +import org.apache.sis.geometries.surface.Capsule; +import org.apache.sis.geometries.surface.Cylinder; +import org.apache.sis.geometries.surface.Ellipsoid; import org.apache.sis.geometries.solid.Frustrum; import org.apache.sis.geometries.solid.MultiPolyhedron; import org.apache.sis.geometries.solid.Polyhedron; -import org.apache.sis.geometries.solid.Sphere; +import org.apache.sis.geometries.surface.Sphere; import org.apache.sis.geometries.surface.BSplineSurface; import org.apache.sis.geometries.surface.BilinearGrid; import org.apache.sis.geometries.surface.CurvePolygon; diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Solid.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Solid.java index 730cd187be..90ee93519a 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Solid.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/Solid.java @@ -18,6 +18,7 @@ package org.apache.sis.geometries; import java.util.List; import javax.measure.Quantity; +import org.apache.sis.geometries.internal.shared.DefaultSolid; import static org.opengis.annotation.Specification.ISO_19107; import org.opengis.annotation.UML; import org.opengis.geometry.DirectPosition; @@ -56,7 +57,8 @@ import org.apache.sis.geometries.solid.Polyhedron; */ @UML(identifier="Solid", specification=ISO_19107) public sealed interface Solid extends Primitive - permits ParametricCurveSolid, + permits DefaultSolid, + ParametricCurveSolid, Polyhedron { @@ -101,7 +103,7 @@ public sealed interface Solid extends Primitive */ @UML(identifier="boundary", specification=ISO_19107) @Override - Geometry getBoundary(); + GeometryCollection<? extends Surface> getBoundary(); /** * Sum of the areas of all the boundary surfaces of this solid. diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSolid.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSolid.java index 33dd70764b..0cdd9b695d 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSolid.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSolid.java @@ -26,6 +26,8 @@ import org.apache.sis.geometries.DataPoints; import org.apache.sis.geometries.Geometry; import org.apache.sis.geometries.GeometryType; import org.apache.sis.geometries.DataPointsType; +import org.apache.sis.geometries.GeometryCollection; +import org.apache.sis.geometries.Surface; import org.apache.sis.geometries.solid.BSplineSolid; @@ -176,7 +178,7 @@ public non-sealed class DefaultBSplineSolid extends AbstractGeometry implements } @Override - public Geometry getBoundary() { + public GeometryCollection<? extends Surface> getBoundary() { throw new UnsupportedOperationException("Not supported yet."); } 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 f713514ae1..f5a9c59d25 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,10 +16,12 @@ */ package org.apache.sis.geometries.internal.shared; +import java.util.Set; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.geometries.Geometry; import org.apache.sis.geometries.GeometryCollection; import org.apache.sis.geometries.GeometryFactory; +import org.apache.sis.geometries.GeometryType; import org.apache.sis.geometries.Point; @@ -29,6 +31,7 @@ import org.apache.sis.geometries.Point; */ public non-sealed class DefaultGeometryCollection<T extends Geometry> extends AbstractGeometry implements GeometryCollection<T> { + private final GeometryType elementType; private final T[] geometries; /** @@ -38,19 +41,25 @@ public non-sealed class DefaultGeometryCollection<T extends Geometry> extends Ab */ private CoordinateReferenceSystem fallbackCRS; - public DefaultGeometryCollection(T[] geometries) { - this(null, geometries); + public DefaultGeometryCollection(GeometryType elementType, T[] geometries) { + this(elementType, null, geometries); } /** * Creates a collection which reports the given coordinate reference system * when {@code geometries} is empty. */ - public DefaultGeometryCollection(CoordinateReferenceSystem fallbackCRS, T[] geometries) { + public DefaultGeometryCollection(GeometryType elementType, CoordinateReferenceSystem fallbackCRS, T[] geometries) { + this.elementType = elementType; this.geometries = geometries; this.fallbackCRS = fallbackCRS; } + @Override + public Set<GeometryType> getElementType() { + return Set.of(elementType); + } + @Override public CoordinateReferenceSystem getCoordinateReferenceSystem() { return (geometries.length != 0) ? geometries[0].getCoordinateReferenceSystem() : fallbackCRS; 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 70143d064d..2a261c4594 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 @@ -18,6 +18,7 @@ package org.apache.sis.geometries.internal.shared; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.geometries.Curve; +import org.apache.sis.geometries.GeometryType; import org.apache.sis.geometries.curve.MultiCurve; @@ -32,7 +33,7 @@ public non-sealed class DefaultMultiCurve<T extends Curve> extends DefaultGeomet } public DefaultMultiCurve(CoordinateReferenceSystem fallbackCRS, T[] geometries) { - super(fallbackCRS, geometries); + super(GeometryType.CURVE, fallbackCRS, geometries); } } 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 8e7d1b51cf..b09ceed31a 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,6 +16,7 @@ */ package org.apache.sis.geometries.internal.shared; +import org.apache.sis.geometries.GeometryType; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.geometries.solid.MultiPolyhedron; import org.apache.sis.geometries.solid.Polyhedron; @@ -34,7 +35,7 @@ public non-sealed class DefaultMultiPolyhedron extends DefaultGeometryCollection } public DefaultMultiPolyhedron(CoordinateReferenceSystem fallbackCRS, Polyhedron... solids) { - super(fallbackCRS, solids); + super(GeometryType.POLYHEDRON, fallbackCRS, solids); } } 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 6d66de5cc8..61c80916cc 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,6 +16,7 @@ */ package org.apache.sis.geometries.internal.shared; +import org.apache.sis.geometries.GeometryType; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.geometries.Point; import org.apache.sis.geometries.Surface; @@ -33,7 +34,7 @@ public non-sealed class DefaultMultiSurface<T extends Surface> extends DefaultGe } public DefaultMultiSurface(CoordinateReferenceSystem fallbackCRS, T[] geometries) { - super(fallbackCRS, geometries); + super(GeometryType.SURFACE, fallbackCRS, geometries); } /** 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 37dee66304..633f75bdf6 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 @@ -22,7 +22,8 @@ import javax.measure.Quantity; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; import org.opengis.referencing.crs.CoordinateReferenceSystem; -import org.apache.sis.geometries.Geometry; +import org.apache.sis.geometries.GeometryCollection; +import org.apache.sis.geometries.Surface; import org.apache.sis.geometries.solid.Polyhedron; import org.apache.sis.geometries.surface.MultiPolygon; @@ -84,7 +85,7 @@ public non-sealed class DefaultPolyhedron extends AbstractGeometry implements Po } @Override - public Geometry getBoundary() { + public GeometryCollection<? extends Surface> getBoundary() { throw new UnsupportedOperationException("Not supported yet."); } diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultProductCurve.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultProductCurve.java index 94827b9490..46edccafc8 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultProductCurve.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultProductCurve.java @@ -18,6 +18,7 @@ package org.apache.sis.geometries.internal.shared; import java.util.List; import org.apache.sis.geometries.Curve; +import org.apache.sis.geometries.GeometryType; import org.apache.sis.geometries.cs.Projection; import org.apache.sis.geometries.curve.ProductCurve; import org.apache.sis.maths.Array; @@ -55,7 +56,7 @@ public non-sealed class DefaultProductCurve extends DefaultGeometryCollection<Cu public DefaultProductCurve(final Range<?> parameterRange, final List<Projection> projections, final Curve... elements) { - super(elements); + super(GeometryType.CURVE, elements); this.parameterRange = parameterRange; this.projections = (projections == null) ? List.of() : List.copyOf(projections); } 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 e1c553536e..4d76f442d6 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,6 +16,7 @@ */ package org.apache.sis.geometries.internal.shared; +import org.apache.sis.geometries.GeometryType; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.geometries.Point; import org.apache.sis.geometries.point.MultiPoint; @@ -32,7 +33,7 @@ public non-sealed class DefaultRawMultiPoint extends DefaultGeometryCollection<P } public DefaultRawMultiPoint(CoordinateReferenceSystem fallbackCRS, Point[] geometries) { - super(fallbackCRS, geometries); + super(GeometryType.POINT, fallbackCRS, geometries); } } 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/DefaultSolid.java similarity index 52% copy from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultPolyhedron.java copy to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultSolid.java index 37dee66304..4cc582d057 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/DefaultSolid.java @@ -17,14 +17,19 @@ package org.apache.sis.geometries.internal.shared; import java.util.List; -import java.util.Objects; import javax.measure.Quantity; +import org.apache.sis.geometries.DataPoints; +import org.apache.sis.geometries.DataPointsType; +import org.apache.sis.geometries.Geometry; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.Envelope; import org.opengis.referencing.crs.CoordinateReferenceSystem; -import org.apache.sis.geometries.Geometry; -import org.apache.sis.geometries.solid.Polyhedron; -import org.apache.sis.geometries.surface.MultiPolygon; +import org.apache.sis.geometries.GeometryCollection; +import org.apache.sis.geometries.GeometryFactory; +import org.apache.sis.geometries.GeometryType; +import org.apache.sis.geometries.Solid; +import org.apache.sis.geometries.Surface; +import org.apache.sis.geometry.GeneralEnvelope; /** @@ -32,45 +37,33 @@ import org.apache.sis.geometries.surface.MultiPolygon; * * @author Johann Sorel (Geomatys) */ -public non-sealed class DefaultPolyhedron extends AbstractGeometry implements Polyhedron { +public non-sealed class DefaultSolid extends AbstractGeometry implements Solid { - private final MultiPolygon exterior; - private final List<MultiPolygon> interiors; + private final List<Surface> boundaries; - public DefaultPolyhedron(MultiPolygon exterior) { - this(exterior, null); - } - - public DefaultPolyhedron(MultiPolygon exterior, List<MultiPolygon> interiors) { - this.exterior = Objects.requireNonNull(exterior); - this.interiors = (interiors == null) ? List.of() : List.copyOf(interiors); + public DefaultSolid(List<Surface> boundaries) { + this.boundaries = (boundaries == null) ? List.of() : List.copyOf(boundaries); } @Override - public MultiPolygon getExteriorShell() { - return exterior; - } - - @Override - public List<MultiPolygon> getInteriorShells() { - return interiors; + public GeometryType getGeometryType() { + return GeometryType.SOLID; } @Override public boolean isEmpty() { - return exterior.isEmpty(); + return boundaries.isEmpty(); } @Override public CoordinateReferenceSystem getCoordinateReferenceSystem() { - return exterior.getCoordinateReferenceSystem(); + return boundaries.get(0).getCoordinateReferenceSystem(); } @Override public void setCoordinateReferenceSystem(CoordinateReferenceSystem cs) throws IllegalArgumentException { - exterior.setCoordinateReferenceSystem(cs); - for (final MultiPolygon interior : interiors) { - interior.setCoordinateReferenceSystem(cs); + for (final Surface boundary : boundaries) { + boundary.setCoordinateReferenceSystem(cs); } } @@ -80,12 +73,41 @@ public non-sealed class DefaultPolyhedron extends AbstractGeometry implements Po */ @Override public Envelope getEnvelope() { - return exterior.getEnvelope(); + GeneralEnvelope e = null; + for (int i = 0, n = boundaries.size(); i < n; i++) { + Surface sn = boundaries.get(i); + Envelope envelope = sn.getEnvelope(); + if (envelope != null) { + if (e == null) { + e = new GeneralEnvelope(envelope); + } else { + e.add(envelope); + } + } + } + if (e == null) { + e = new GeneralEnvelope(getCoordinateReferenceSystem()); + e.setToNaN(); + } + return e; } @Override - public Geometry getBoundary() { - throw new UnsupportedOperationException("Not supported yet."); + public DataPoints getDataPoints() { + if (boundaries.isEmpty()) { + return new EmptyDataPoints(getCoordinateReferenceSystem()); + } + return ConcatenatedDataPoints.of(boundaries.toArray(Geometry[]::new)); + } + + @Override + public DataPointsType getDataPointsType() { + return boundaries.get(0).getDataPointsType(); + } + + @Override + public GeometryCollection<? extends Surface> getBoundary() { + return GeometryFactory.DEFAULT.createGeometryCollection(GeometryType.SURFACE, getCoordinateReferenceSystem(), boundaries.toArray(Surface[]::new)); } @Override 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 774c23d703..6637257f8c 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,12 +24,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.TransformException; 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.GeometryType; import org.apache.sis.geometries.internal.shared.AbstractGeometry; import org.apache.sis.geometries.internal.shared.ConcatenatedDataPoints; import org.apache.sis.geometries.internal.shared.EmptyDataPoints; @@ -67,6 +69,11 @@ public final class MultiMeshPrimitive<T extends MeshPrimitive> extends AbstractG append(Arrays.asList(primitives)); } + @Override + public Set<GeometryType> getElementType() { + return Set.of(GeometryType.GEOMETRY); + } + @Override public CoordinateReferenceSystem getCoordinateReferenceSystem() { for (MeshPrimitive p : primitives) { diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java index e3477f7bcd..6b77a450f6 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/polyhedron/AbstractPolyhedron.java @@ -21,11 +21,13 @@ import org.opengis.geometry.Envelope; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.apache.sis.geometries.DataPoints; import org.apache.sis.geometries.Geometry; +import org.apache.sis.geometries.GeometryCollection; import org.apache.sis.geometries.GeometryFactory; +import org.apache.sis.geometries.Surface; import org.apache.sis.geometries.curve.LinearRing; 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.surface.Sphere; import org.apache.sis.geometries.spherical.SphericalConvexPolygon; import org.apache.sis.geometries.surface.MultiPolygon; import org.apache.sis.geometries.surface.Polygon; @@ -99,7 +101,7 @@ public abstract sealed class AbstractPolyhedron extends AbstractGeometry impleme } @Override - public Geometry getBoundary() { + public GeometryCollection<? extends Surface> getBoundary() { throw new UnsupportedOperationException("Not supported yet."); } 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 67075662a5..aa8f8b5b01 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.solid.Sphere; +import org.apache.sis.geometries.surface.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 7dd163507b..373a0aca3a 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.solid.Sphere; +import org.apache.sis.geometries.surface.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 981c965bdf..c5638cfeaf 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.solid.Sphere; +import org.apache.sis.geometries.surface.Sphere; import org.apache.sis.maths.Maths; import org.apache.sis.maths.ReadOnly; import org.apache.sis.util.ArgumentChecks; diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Capsule.java similarity index 99% rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Capsule.java index 3844d76e30..2eff91b59d 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Capsule.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Capsule.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.geometries.solid; +package org.apache.sis.geometries.surface; import java.util.Objects; import static org.opengis.annotation.Specification.ISO_12113; diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Cylinder.java similarity index 99% rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Cylinder.java index afb3967b1e..3651df2c36 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Cylinder.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Cylinder.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.geometries.solid; +package org.apache.sis.geometries.surface; import java.util.Objects; import static org.opengis.annotation.Specification.ISO_12113; @@ -30,8 +30,8 @@ import org.apache.sis.geometries.internal.shared.AbstractGeometry; import org.apache.sis.maths.DataType; import org.apache.sis.maths.NDArrays; import org.apache.sis.maths.ReadOnly; -import org.apache.sis.maths.Vector; import org.apache.sis.maths.Vectors; +import org.apache.sis.maths.Vector; /** diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Ellipsoid.java similarity index 99% rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Ellipsoid.java index 679bcdb8e1..4a87f4321e 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Ellipsoid.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Ellipsoid.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.geometries.solid; +package org.apache.sis.geometries.surface; import java.util.Arrays; import java.util.List; diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java index df0b18c59b..035db3fd45 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/ParametricCurveSurface.java @@ -26,8 +26,6 @@ import org.apache.sis.geometries.DataPoints; import org.apache.sis.geometries.GeometryType; import org.apache.sis.geometries.Surface; import org.apache.sis.geometries.SurfaceInterpolation; -import org.apache.sis.geometries.solid.Ellipsoid; -import org.apache.sis.geometries.solid.Sphere; /** diff --git a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Sphere.java similarity index 99% rename from incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java rename to incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Sphere.java index af09fd9b2a..6049fd9bf3 100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/surface/Sphere.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sis.geometries.solid; +package org.apache.sis.geometries.surface; import java.util.List; import javax.measure.Quantity; 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 d742aa3356..497fc6604f 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.solid.Sphere; +import org.apache.sis.geometries.surface.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 d74d5c2fb1..fd98150822 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.solid.Sphere; +import org.apache.sis.geometries.surface.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 e80fc887b1..8ed5495a34 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.solid.Sphere; +import org.apache.sis.geometries.surface.Sphere; import org.apache.sis.maths.ReadOnly; import org.apache.sis.maths.Vector3D;
