This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch geoapi-3.1 in repository https://gitbox.apache.org/repos/asf/sis.git
commit fac1549bcd691de3a7c8711dc31a440278a12d9a Merge: 80c161ba8d 914b87d356 Author: Martin Desruisseaux <[email protected]> AuthorDate: Wed Sep 30 00:41:35 2026 +0900 Merge branch 'geoapi-4.0' into geoapi-3.1 README.md | 1 + .../org.apache.sis.feature/main/module-info.java | 4 +- .../apache/sis/coverage/grid/GridCRSBuilder.java | 2 +- .../apache/sis/metadata/internal/Resources.java | 5 + .../sis/metadata/internal/Resources.properties | 1 + .../sis/metadata/internal/Resources_fr.properties | 1 + .../metadata/sql/internal/shared/SQLBuilder.java | 10 +- .../main/org/apache/sis/xml/IdentifierSpace.java | 4 +- .../main/org/apache/sis/xml/ReferenceResolver.java | 83 +- .../main/org/apache/sis/xml/XML.java | 30 +- .../main/org/apache/sis/xml/bind/Context.java | 13 +- .../xml/internal/shared/ExternalLinkHandler.java | 31 +- .../sis/xml/internal/shared/InputFactory.java | 49 +- .../apache/sis/xml/internal/shared/URISource.java | 48 +- .../main/org/apache/sis/xml/package-info.java | 2 +- .../sql/internal/shared/SQLBuilderTest.java | 12 + .../org/apache/sis/metadata/xml/TestUsingFile.java | 17 + .../sis/metadata/xml/extern/UsingExternalXLink.xml | 51 + .../org/apache/sis/xml/ReferenceResolverMock.java | 1 + .../org/apache/sis/xml/ReferenceResolverTest.java | 109 +- .../main/org/apache/sis/io/wkt/WKTFormat.java | 5 +- .../sis/parameter/DefaultParameterValue.java | 60 +- .../main/org/apache/sis/parameter/Parameters.java | 11 +- .../factory/ConcurrentAuthorityFactory.java | 8 +- .../referencing/factory/sql/EPSGDataAccess.java | 9 +- .../sis/referencing/factory/sql/EPSGFactory.java | 4 +- .../operation/AbstractSingleOperation.java | 2 +- .../referencing/operation/DefiningConversion.java | 100 +- .../referencing/operation/gridded/GridFile.java | 223 +--- .../referencing/operation/gridded/LoadedGrid.java | 6 +- .../provider/FranceGeocentricInterpolation.java | 12 +- .../sis/referencing/operation/provider/NADCON.java | 16 +- .../sis/referencing/operation/provider/NTv2.java | 35 +- .../transform/InterpolatedGeocentricTransform.java | 4 +- .../InterpolatedGeocentricTransform2D.java | 2 +- .../operation/transform/MathTransformBuilder.java | 59 +- .../xml/bind/referencing/CC_OperationMethod.java | 4 +- .../org/apache/sis/xml/bind/referencing/Code.java | 3 +- .../test/org/apache/sis/io/wkt/ElementTest.java | 3 +- .../operation/gridded/GridFileTest.java | 117 ++ .../operation/provider/DatumShiftTestCase.java | 67 - .../FranceGeocentricInterpolationTest.java | 75 +- .../provider/GeocentricTranslationTest.java | 2 +- .../referencing/operation/provider/NADCONTest.java | 52 +- .../referencing/operation/provider/NTv2Test.java | 49 +- .../provider/PositionVector7ParamTest.java | 3 +- .../InterpolatedGeocentricTransformTest.java | 47 +- .../transform/InterpolatedTransformTest.java | 35 +- .../sis/test/integration/DatumShiftTest.java | 8 +- .../main/module-info.java | 2 +- .../main/org/apache/sis/storage/landsat/Band.java | 36 +- .../apache/sis/storage/landsat/LandsatStore.java | 14 +- .../apache/sis/storage/landsat/MetadataReader.java | 6 +- .../sis/storage/landsat}/internal/Resources.java | 113 +- .../storage/landsat}/internal/Resources.properties | 12 +- .../sis/storage/landsat/internal/Resources_en.java | 19 +- .../sis/storage/landsat/internal/Resources_fr.java | 19 +- .../landsat/internal/Resources_fr.properties} | 17 +- .../sis/storage/landsat/internal/package-info.java | 22 +- .../apache/sis/storage/landsat/package-info.java | 2 +- .../storage/landsat/LandsatStoreProviderTest.java | 92 +- .../sis/storage/landsat/MetadataReaderTest.java | 7 +- .../apache/sis/storage/geotiff/DeferredEntry.java | 29 +- .../org/apache/sis/storage/geotiff/Reader.java | 11 +- .../geotiff/reader/ImageMetadataBuilder.java | 1 + .../apache/sis/storage/netcdf/MetadataReader.java | 11 +- .../sis/storage/netcdf/classic/ChannelDecoder.java | 27 +- .../org.apache.sis.storage/main/module-info.java | 1 + .../main/org/apache/sis/io/stream/ChannelData.java | 11 +- .../org/apache/sis/io/stream/ChannelDataInput.java | 18 + .../main/org/apache/sis/io/stream/IOUtilities.java | 17 + .../org/apache/sis/storage/base/URIDataStore.java | 4 +- .../org/apache/sis/storage/event/WarningEvent.java | 18 +- .../org/apache/sis/storage/event/package-info.java | 4 +- .../main/org/apache/sis/storage/wkt/Store.java | 1 + .../main/org/apache/sis/storage/xml/Store.java | 4 +- .../src/org.apache.sis.util/main/module-info.java | 1 + .../main/org/apache/sis/io/Authorization.java | 71 + .../main/org/apache/sis/io/package-info.java | 34 +- .../main/org/apache/sis/setup/Configuration.java | 38 +- .../main/org/apache/sis/system/DataURI.java | 226 ++++ .../main/org/apache/sis/system/Environment.java | 8 + .../sis/util/internal/AutoMessageFormat.java | 22 +- .../apache/sis/util/internal/shared/Strings.java | 78 ++ .../apache/sis/util/logging/MonolineFormatter.java | 44 +- .../main/org/apache/sis/util/resources/Errors.java | 5 + .../apache/sis/util/resources/Errors.properties | 1 + .../apache/sis/util/resources/Errors_fr.properties | 3 +- .../sis/util/resources/IndexedResourceBundle.java | 18 +- .../org.apache.sis.geometry/main/module-info.java | 19 +- .../sis/geometries/AttributeInterpolation.java | 50 + ...rpolation.java => AttributeTransformation.java} | 31 +- .../main/org/apache/sis/geometries/BBox.java | 14 +- .../org/apache/sis/geometries/BoundaryType.java | 25 + .../main/org/apache/sis/geometries/Curve.java | 635 +++++++-- .../apache/sis/geometries/CurveInterpolation.java | 76 +- .../org/apache/sis/geometries/CurvePolygon.java | 109 -- .../main/org/apache/sis/geometries/DE9IM.java | 512 +++++++ .../{PointSequence.java => DataPoints.java} | 41 +- .../{AttributesType.java => DataPointsType.java} | 130 +- .../main/org/apache/sis/geometries/Empty.java | 137 +- .../main/org/apache/sis/geometries/Geometries.java | 202 ++- .../main/org/apache/sis/geometries/Geometry.java | 953 +++++++++++-- .../apache/sis/geometries/GeometryCollection.java | 129 +- .../org/apache/sis/geometries/GeometryFactory.java | 582 +++++++- .../org/apache/sis/geometries/GeometryType.java | 249 +++- .../org/apache/sis/geometries/GeometryVisitor.java | 19 +- .../geometries/{Frustrum.java => HyperPlane.java} | 32 +- .../main/org/apache/sis/geometries/Knot.java | 34 - .../main/org/apache/sis/geometries/LineString.java | 121 -- .../org/apache/sis/geometries/MultiLineString.java | 55 - .../main/org/apache/sis/geometries/OBBox.java | 17 +- .../org/apache/sis/geometries/OffsetCurve.java | 39 - .../main/org/apache/sis/geometries/Orientable.java | 76 +- .../apache/sis/geometries/OrientedGeometry.java | 7 +- .../sis/geometries/ParametricCurveSurface.java | 66 - .../main/org/apache/sis/geometries/Plane.java | 8 +- .../main/org/apache/sis/geometries/Point.java | 223 +++- .../main/org/apache/sis/geometries/Polygon.java | 116 -- .../apache/sis/geometries/PolyhedralSurface.java | 97 -- .../main/org/apache/sis/geometries/Primitive.java | 75 +- .../main/org/apache/sis/geometries/Prism.java | 14 +- .../org/apache/sis/geometries/ProductCurve.java | 38 - .../main/org/apache/sis/geometries/Ray.java | 15 +- .../main/org/apache/sis/geometries/Rhumb.java | 41 - .../main/org/apache/sis/geometries/Solid.java | 189 ++- .../apache/sis/geometries/SolidInterpolation.java | 38 +- .../main/org/apache/sis/geometries/Surface.java | 241 +++- .../sis/geometries/SurfaceInterpolation.java | 63 +- .../main/org/apache/sis/geometries/TIN.java | 75 -- .../main/org/apache/sis/geometries/Wrapper.java | 162 +-- .../apache/sis/geometries/adapter/JTSAdapter.java | 399 ++++++ .../geometries/adapter/PathIteratorAdapter.java | 269 ++++ .../sis/geometries/adapter/ShapeAdapter.java | 189 +++ .../sis/geometries/adapter/ShapeConverter.java | 331 +++++ .../org/apache/sis/geometries/adapter/Srid.java | 168 +++ .../sis/geometries/adapter/WellKnownBinary.java | 687 ++++++++++ .../geometries/adapter/WellKnownBinaryParser.java | 742 +++++++++++ .../sis/geometries/adapter/WellKnownText.java | 597 +++++++++ .../geometries/adapter/WellKnownTextParser.java | 871 ++++++++++++ .../main/org/apache/sis/geometries/conics/Arc.java | 49 - .../sis/geometries/conics/CircularString.java | 35 - .../org/apache/sis/geometries/conics/Conic.java | 45 - .../apache/sis/geometries/conics/EllipticArc.java | 30 - .../main/org/apache/sis/geometries/cs/Bearing.java | 210 +++ .../sis/geometries/cs/CurveRelativeDirection.java | 51 +- .../apache/sis/geometries/cs/FixedDirection.java | 47 +- .../geometries/cs/GeometricCoordinateSystem.java | 7 +- .../sis/geometries/cs/ReferenceDirection.java | 23 +- .../sis/geometries/cs/RelativeDirection.java | 38 +- .../org/apache/sis/geometries/cs/Rotation.java | 22 +- .../org/apache/sis/geometries/cs/package-info.java | 30 +- .../geometries/csg/ConstructiveSolidGeometry.java | 7 +- .../main/org/apache/sis/geometries/curve/Arc.java | 140 ++ .../apache/sis/geometries/curve/ArcByBulge.java | 124 ++ .../sis/geometries/curve/ArcByCenterPoint.java | 145 ++ .../apache/sis/geometries/curve/BSplineCurve.java | 75 ++ .../org/apache/sis/geometries/curve/Bezier.java | 82 ++ .../org/apache/sis/geometries/curve/Circle.java | 69 + .../sis/geometries/curve/CircularString.java | 103 ++ .../org/apache/sis/geometries/curve/Clothoid.java | 85 ++ .../apache/sis/geometries/curve/CompoundCurve.java | 135 ++ .../org/apache/sis/geometries/curve/Conic.java | 125 ++ .../{BilinearGrid.java => curve/ConicArc.java} | 15 +- .../apache/sis/geometries/curve/CubicSpline.java | 68 + .../sis/geometries/{conics => curve}/Ellipse.java | 9 +- .../apache/sis/geometries/curve/EllipticArc.java | 65 + .../{polynomials => curve}/FunctionArc.java | 31 +- .../apache/sis/geometries/curve/FunctionCurve.java | 76 ++ .../org/apache/sis/geometries/curve/Geodesic.java | 131 ++ .../geometries/{splines => curve}/KnotType.java | 25 +- .../apache/sis/geometries/curve/LineString.java | 165 +++ .../apache/sis/geometries/curve/LinearRing.java | 69 + .../sis/geometries/{ => curve}/MultiCurve.java | 47 +- .../MultiLineString.java} | 39 +- .../org/apache/sis/geometries/curve/NurbCurve.java | 139 ++ .../apache/sis/geometries/curve/OffsetCurve.java | 115 ++ .../{polynomials => curve}/PolynomialArc.java | 27 +- .../sis/geometries/curve/PolynomialCurve.java | 59 + .../sis/geometries/curve/PolynomialSpline.java | 132 ++ .../apache/sis/geometries/curve/ProductCurve.java | 136 ++ .../apache/sis/geometries/curve/RealFunction.java | 77 ++ .../sis/geometries/curve/RealPolynomial.java | 107 ++ .../org/apache/sis/geometries/curve/Rhumb.java | 141 ++ .../org/apache/sis/geometries/curve/Spiral.java | 132 ++ .../apache/sis/geometries/curve/SplineCurve.java | 115 ++ .../{splines => curve}/SplineCurveForm.java | 25 +- .../{ellipsoidal => curve}/package-info.java | 7 +- .../apache/sis/geometries/geodesics/Geodesic.java | 37 - .../sis/geometries/griddedsolid/BSolidSpline.java | 30 - .../griddedsolid/ParametricCurveSolid.java | 68 - .../org/apache/sis/geometries/index/KdTree.java | 6 +- .../internal/shared/AbstractGeometry.java | 54 +- .../internal/shared/AbstractOrientedGeometry.java | 8 +- .../{ArraySequence.java => ArrayDataPoints.java} | 64 +- .../sis/geometries/internal/shared/DefaultArc.java | 70 + .../internal/shared/DefaultArcByBulge.java | 81 ++ .../internal/shared/DefaultArcByCenterPoint.java | 100 ++ .../internal/shared/DefaultBSplineCurve.java | 177 +++ .../internal/shared/DefaultBSplineSolid.java | 177 +++ .../internal/shared/DefaultBSplineSurface.java | 197 +++ .../geometries/internal/shared/DefaultBearing.java | 451 +++++++ .../geometries/internal/shared/DefaultBezier.java | 58 + .../internal/shared/DefaultBilinearGrid.java | 181 +++ .../geometries/internal/shared/DefaultCircle.java | 54 + .../internal/shared/DefaultCircularString.java | 58 + .../internal/shared/DefaultClothoid.java | 55 + .../internal/shared/DefaultCompoundCurve.java | 108 ++ .../geometries/internal/shared/DefaultConic.java | 107 ++ .../internal/shared/DefaultCubicSpline.java | 67 + ...efaultPolygon.java => DefaultCurvePolygon.java} | 51 +- ...ltPointSequence.java => DefaultDataPoints.java} | 20 +- ...aultLinearRing.java => DefaultEllipticArc.java} | 21 +- .../{DefaultMultiPoint.java => DefaultEmpty.java} | 53 +- ...DefaultLineString.java => DefaultGeodesic.java} | 18 +- .../internal/shared/DefaultGeometryCollection.java | 29 +- .../internal/shared/DefaultLineString.java | 13 +- .../internal/shared/DefaultLinearRing.java | 9 +- .../internal/shared/DefaultMultiCurve.java | 32 +- .../internal/shared/DefaultMultiLineString.java | 11 +- .../internal/shared/DefaultMultiPoint.java | 36 +- .../internal/shared/DefaultMultiPolygon.java | 11 +- ...LineString.java => DefaultMultiPolyhedron.java} | 25 +- .../internal/shared/DefaultMultiSurface.java | 37 +- .../internal/shared/DefaultNurbCurve.java | 311 +++++ .../internal/shared/DefaultNurbSurface.java | 386 ++++++ .../internal/shared/DefaultOffsetCurve.java | 122 ++ .../geometries/internal/shared/DefaultPoint.java | 34 +- .../geometries/internal/shared/DefaultPolygon.java | 22 +- .../internal/shared/DefaultPolyhedralSurface.java | 98 ++ .../internal/shared/DefaultPolyhedron.java | 116 ++ .../internal/shared/DefaultPolynomialSpline.java | 198 +++ .../geometries/internal/shared/DefaultPrism.java | 98 ++ .../internal/shared/DefaultProductCurve.java | 84 ++ ...ltLineString.java => DefaultRawMultiPoint.java} | 23 +- .../internal/shared/DefaultReversedCurve.java | 141 ++ .../internal/shared/DefaultReversedSurface.java | 105 ++ .../{DefaultLineString.java => DefaultRhumb.java} | 24 +- .../geometries/internal/shared/DefaultSpiral.java | 134 ++ .../internal/shared/DefaultTriangle.java | 15 +- ...iCurve.java => DefaultTriangulatedSurface.java} | 39 +- .../{DefaultMultiPoint.java => IndexedPoint.java} | 58 +- .../apache/sis/geometries/mesh/MeshPrimitive.java | 109 +- .../geometries/mesh/MeshPrimitiveComparator.java | 44 +- .../sis/geometries/mesh/MeshPrimitiveIndexes.java | 10 +- .../sis/geometries/mesh/MeshPrimitiveVisitor.java | 16 +- .../sis/geometries/mesh/MultiMeshPrimitive.java | 4 +- .../sis/geometries/operation/ComputeAttribute.java | 87 ++ .../apache/sis/geometries/operation/Contains.java | 110 ++ .../sis/geometries/operation/DeBoorAlgorithm.java | 138 ++ .../spatialanalysis2d => operation}/Distance.java | 38 +- .../geometries/operation/GeometryOperations.java | 782 ----------- .../geometries/operation/GeometryProcessor.java | 624 +++++++++ .../sis/geometries/operation/Intersection.java | 544 ++++++++ .../apache/sis/geometries/operation/Operation.java | 82 -- .../{processor => operation}/ProcessorUtils.java | 7 +- .../geometries/operation/ShewchukPredicates.java | 213 +++ .../geometries/operation/SutherlandHodgman.java | 21 +- .../org/apache/sis/geometries/operation/To3D.java | 148 +++ .../sis/geometries/operation/ToPrimitive.java | 159 +++ .../apache/sis/geometries/operation/Transform.java | 202 +++ .../operation/simplify/greedyinsert/Edge.java | 4 +- .../simplify/greedyinsert/TINBuilder.java | 18 +- .../simplify/greedyinsert/TinDistance.java | 12 +- .../operation/simplify/greedyinsert/WTriangle.java | 68 +- .../operation/spatialanalysis2d/Buffer.java | 41 - .../operation/spatialanalysis2d/ConvexHull.java | 39 - .../operation/spatialanalysis2d/Difference.java | 37 - .../operation/spatialanalysis2d/Distance.java | 40 - .../operation/spatialanalysis2d/ISOBand.java | 18 +- .../operation/spatialanalysis2d/ISOLine.java | 24 +- .../operation/spatialanalysis2d/Intersection.java | 37 - .../operation/spatialanalysis2d/SymDifference.java | 38 - .../operation/spatialanalysis2d/Union.java | 37 - .../operation/spatialedition/ComputeAttribute.java | 73 - .../geometries/operation/spatialedition/To3D.java | 48 - .../operation/spatialedition/Transform.java | 63 - .../operation/spatialrelations2d/Contains.java | 38 - .../operation/spatialrelations2d/Crosses.java | 37 - .../operation/spatialrelations2d/Disjoint.java | 37 - .../operation/spatialrelations2d/Equals.java | 37 - .../operation/spatialrelations2d/Intersects.java | 37 - .../operation/spatialrelations2d/LocateAlong.java | 40 - .../spatialrelations2d/LocateBetween.java | 42 - .../operation/spatialrelations2d/Overlaps.java | 37 - .../operation/spatialrelations2d/Relate.java | 42 - .../operation/spatialrelations2d/Touches.java | 37 - .../operation/spatialrelations2d/Within.java | 37 - .../operation/triangulate/EarClipping.java | 22 +- .../operation/triangulate/delaunay/Delaunay.java | 17 +- .../triangulate/delaunay/OrientedEdge.java | 32 +- .../triangulate/delaunay/OrientedTriangle.java | 32 +- .../org/apache/sis/geometries/package-info.java | 18 +- .../sis/geometries/{ => point}/MultiPoint.java | 59 +- .../apache/sis/geometries/point/PointCloud.java | 128 ++ .../sis/geometries/polynomials/FunctionCurve.java | 36 - .../geometries/polynomials/PolynomialCurve.java | 32 - .../sis/geometries/polynomials/RealFunction.java | 45 - .../sis/geometries/polynomials/RealPolynomial.java | 51 - .../processor/spatialanalysis2d/Intersection.java | 243 ---- .../processor/spatialedition/ComputeAttribute.java | 111 -- .../geometries/processor/spatialedition/To3D.java | 191 --- .../processor/spatialedition/ToPrimitive.java | 284 ---- .../processor/spatialedition/Transform.java | 274 ---- .../processor/spatialrelations2d/Contains.java | 138 -- .../apache/sis/geometries/solid/BSplineSolid.java | 67 + .../apache/sis/geometries/{ => solid}/Capsule.java | 12 +- .../sis/geometries/{ => solid}/Cylinder.java | 12 +- .../sis/geometries/{ => solid}/Frustrum.java | 13 +- .../geometries/{ => solid}/MultiPolyhedron.java | 16 +- .../sis/geometries/solid/ParametricCurveSolid.java | 223 ++++ .../sis/geometries/{ => solid}/Polyhedron.java | 35 +- .../apache/sis/geometries/{ => solid}/Sphere.java | 75 +- .../{ellipsoidal => solid}/package-info.java | 7 +- .../{ => solid}/polyhedron/AbstractPolyhedron.java | 39 +- .../{ => solid}/polyhedron/Dodecahedron.java | 14 +- .../{ => solid}/polyhedron/Hexahedron.java | 14 +- .../{ => solid}/polyhedron/Icosahedron.java | 14 +- .../{ => solid}/polyhedron/Octahedron.java | 14 +- .../polyhedron/RhombicTriacontahedron.java | 14 +- .../{ => solid}/polyhedron/Tetrahedron.java | 14 +- .../polyhedron/TruncatedIcosahedron.java | 14 +- .../{ => solid}/polyhedron/package-info.java | 2 +- .../sis/geometries/spherical/GreatCircleArc.java | 46 +- .../spherical/SphericalConvexPolygon.java | 8 +- .../geometries/spherical/SphericalTriangle.java | 78 +- .../apache/sis/geometries/spirals/Clothoid.java | 30 - .../org/apache/sis/geometries/spirals/Spiral.java | 42 - .../sis/geometries/splines/BSplineCurve.java | 30 - .../org/apache/sis/geometries/splines/Bezier.java | 30 - .../apache/sis/geometries/splines/CubicSpline.java | 30 - .../org/apache/sis/geometries/splines/NURB.java | 30 - .../sis/geometries/splines/PolynomialSpline.java | 39 - .../apache/sis/geometries/splines/SplineCurve.java | 50 - .../geometries/splinesurfaces/BSplineSurface.java | 57 - .../main/org/apache/sis/geometries/summary.adoc | 1111 ++++++++++++++++ .../sis/geometries/surface/BSplineSurface.java | 185 +++ .../BSplineSurfaceForm.java | 28 +- .../sis/geometries/surface/BilinearGrid.java | 78 ++ .../sis/geometries/surface/CurvePolygon.java | 155 +++ .../sis/geometries/{ => surface}/MultiPolygon.java | 42 +- .../sis/geometries/{ => surface}/MultiSurface.java | 51 +- .../apache/sis/geometries/surface/NurbSurface.java | 62 + .../geometries/surface/ParametricCurveSurface.java | 233 ++++ .../org/apache/sis/geometries/surface/Polygon.java | 175 +++ .../sis/geometries/surface/PolyhedralSurface.java | 168 +++ .../sis/geometries/{ => surface}/PreparedTIN.java | 41 +- .../org/apache/sis/geometries/surface/TIN.java | 60 + .../sis/geometries/{ => surface}/Triangle.java | 117 +- .../geometries/surface/TriangulatedSurface.java | 58 + .../{ellipsoidal => surface}/package-info.java | 7 +- .../main/org/apache/sis/gml/AbstractGMLReader.java | 419 ++++++ .../main/org/apache/sis/gml/AbstractGMLWriter.java | 275 ++++ .../org/apache/sis/gml/DOMXMLStreamReader.java | 696 ++++++++++ .../main/org/apache/sis/gml/GML2Reader.java | 385 ++++++ .../main/org/apache/sis/gml/GML2Tags.java | 73 + .../main/org/apache/sis/gml/GML2Writer.java | 268 ++++ .../main/org/apache/sis/gml/GML3Reader.java | 1400 ++++++++++++++++++++ .../main/org/apache/sis/gml/GML3Tags.java | 131 ++ .../main/org/apache/sis/gml/GML3Writer.java | 547 ++++++++ .../main/org/apache/sis/gml/GMLCRS.java | 185 +++ .../main/org/apache/sis/gml/GMLGeometryReader.java | 45 + .../main/org/apache/sis/gml/GMLGeometryWriter.java | 59 + .../main/org/apache/sis/gml/GMLReader.java | 146 ++ .../Bearing.java => gml/GMLVersion.java} | 22 +- .../main/org/apache/sis/gml/GMLWriter.java | 119 ++ .../org/apache/sis/gml/JAXBGeometryAdapter.java | 103 ++ .../org/apache/sis/gml/PositionListBuilder.java | 185 +++ .../conics/ConicArc.java => gml/package-info.java} | 10 +- .../main/org/apache/sis/images}/ImageBuilder.java | 3 +- .../main/org/apache/sis/images}/MergeOperator.java | 2 +- .../{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 | 19 +- .../math => maths}/ArrayConcatenated.java | 2 +- .../{geometries/math => maths}/ArrayFactory.java | 58 +- .../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 | 174 ++- .../sis/{geometries/math => maths}/Matrices.java | 57 +- .../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 | 6 +- .../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 | 7 +- .../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 | 36 +- .../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 | 103 +- .../{geometries/math => maths}/package-info.java | 2 +- .../org/apache/sis/scene/AnimationSampler.java | 2 +- .../main/org/apache/sis/scene/MorphTarget.java | 12 +- .../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/Texture.java | 4 +- .../operation/simplify => scene}/TextureAtlas.java | 2 +- .../main/org/apache/sis/scene/physics/Motion.java | 4 +- .../test/org/apache/sis/geometries/DE9IMTest.java | 181 +++ .../org/apache/sis/geometries/DataPointsTest.java | 141 ++ .../test/org/apache/sis/geometries/EmptyTest.java | 293 ++++ .../sis/geometries/GeometryCollectionTest.java | 237 ++++ .../sis/geometries/OrientedGeometryTest.java | 229 ++++ .../test/org/apache/sis/geometries/PointTest.java | 395 ++++++ .../test/org/apache/sis/geometries/PrismTest.java | 237 ++++ .../sis/geometries/adapter/ShapeAdapterTest.java | 217 +++ .../sis/geometries/adapter/ShapeConverterTest.java | 231 ++++ .../geometries/adapter/WellKnownBinaryTest.java | 601 +++++++++ .../sis/geometries/adapter/WellKnownTextTest.java | 418 ++++++ .../org/apache/sis/geometries/cs/BearingTest.java | 438 ++++++ .../sis/geometries/curve/ArcByBulgeTest.java | 477 +++++++ .../sis/geometries/curve/ArcByCenterPointTest.java | 501 +++++++ .../org/apache/sis/geometries/curve/ArcTest.java} | 55 +- .../sis/geometries/curve/BSplineCurveTest.java | 509 +++++++ .../apache/sis/geometries/curve/BezierTest.java} | 21 +- .../apache/sis/geometries/curve/CircleTest.java} | 19 +- .../sis/geometries/curve/CircularStringTest.java | 469 +++++++ .../apache/sis/geometries/curve/ClothoidTest.java} | 29 +- .../sis/geometries/curve/CompoundCurveTest.java | 485 +++++++ .../apache/sis/geometries/curve/ConicArcTest.java} | 10 +- .../org/apache/sis/geometries/curve/ConicTest.java | 461 +++++++ .../sis/geometries/curve/CubicSplineTest.java} | 19 +- .../apache/sis/geometries/curve/EllipseTest.java} | 8 +- .../sis/geometries/curve/EllipticArcTest.java} | 20 +- .../sis/geometries/curve/FunctionArcTest.java} | 29 +- .../apache/sis/geometries/curve/GeodesicTest.java | 477 +++++++ .../sis/geometries/curve/LineStringTest.java | 485 +++++++ .../sis/geometries/curve/LinearRingTest.java} | 48 +- .../MultiCurveTest.java} | 49 +- .../sis/geometries/curve/MultiLineStringTest.java} | 29 +- .../apache/sis/geometries/curve/NurbCurveTest.java | 117 ++ .../sis/geometries/curve/OffsetCurveTest.java | 485 +++++++ .../sis/geometries/curve/PolynomialArcTest.java} | 29 +- .../sis/geometries/curve/PolynomialSplineTest.java | 533 ++++++++ .../sis/geometries/curve/ProductCurveTest.java | 485 +++++++ .../RealFunctionTest.java} | 49 +- .../sis/geometries/curve/RealPolynomialTest.java | 77 ++ .../org/apache/sis/geometries/curve/RhumbTest.java | 485 +++++++ .../apache/sis/geometries/curve/SpiralTest.java | 485 +++++++ .../internal/shared/ArrayDataPointsTest.java} | 10 +- .../internal/shared/ArraySequenceTest.java | 60 +- .../internal/shared/DefaultArcByBulgeTest.java} | 10 +- .../shared/DefaultArcByCenterPointTest.java} | 11 +- .../internal/shared/DefaultArcTest.java} | 9 +- .../internal/shared/DefaultBSplineCurveTest.java} | 10 +- .../internal/shared/DefaultBSplineSolidTest.java} | 10 +- .../shared/DefaultBSplineSurfaceTest.java} | 12 +- .../internal/shared/DefaultBezierTest.java} | 10 +- .../internal/shared/DefaultBilinearGridTest.java} | 10 +- .../internal/shared/DefaultCircleTest.java} | 10 +- .../shared/DefaultCircularStringTest.java} | 10 +- .../internal/shared/DefaultClothoidTest.java} | 10 +- .../internal/shared/DefaultCompoundCurveTest.java} | 10 +- .../internal/shared/DefaultConicTest.java} | 10 +- .../internal/shared/DefaultCubicSplineTest.java} | 10 +- .../internal/shared/DefaultCurvePolygonTest.java} | 10 +- .../internal/shared/DefaultDataPointsTest.java} | 10 +- .../internal/shared/DefaultEllipticArcTest.java} | 10 +- .../internal/shared/DefaultEmptyTest.java} | 48 +- .../internal/shared/DefaultGeodesicTest.java} | 10 +- .../shared/DefaultGeometryCollectionTest.java} | 12 +- .../internal/shared/DefaultLineStringTest.java} | 10 +- .../internal/shared/DefaultLinearRingTest.java} | 10 +- .../internal/shared/DefaultMultiCurveTest.java} | 10 +- .../shared/DefaultMultiLineStringTest.java} | 12 +- .../internal/shared/DefaultMultiPointTest.java} | 10 +- .../internal/shared/DefaultMultiPolygonTest.java} | 10 +- .../shared/DefaultMultiPolyhedronTest.java} | 12 +- .../internal/shared/DefaultMultiSurfaceTest.java} | 10 +- .../internal/shared/DefaultNurbCurveTest.java} | 10 +- .../internal/shared/DefaultNurbSurfaceTest.java} | 10 +- .../internal/shared/DefaultOffsetCurveTest.java} | 10 +- .../internal/shared/DefaultPointTest.java} | 25 +- .../internal/shared/DefaultPolygonTest.java} | 10 +- .../shared/DefaultPolyhedralSurfaceTest.java} | 12 +- .../internal/shared/DefaultPolyhedronTest.java} | 10 +- .../shared/DefaultPolynomialSplineTest.java} | 12 +- .../internal/shared/DefaultPrismTest.java} | 10 +- .../internal/shared/DefaultProductCurveTest.java} | 10 +- .../internal/shared/DefaultRawMultiPointTest.java} | 10 +- .../internal/shared/DefaultReversedCurveTest.java | 461 +++++++ .../shared/DefaultReversedSurfaceTest.java | 341 +++++ .../internal/shared/DefaultRhumbTest.java} | 10 +- .../internal/shared/DefaultSpiralTest.java} | 10 +- .../internal/shared/DefaultTriangleTest.java} | 10 +- .../shared/DefaultTriangulatedSurfaceTest.java} | 10 +- .../internal/shared/IndexedPointTest.java} | 26 +- .../apache/sis/geometries/math/VectorsTest.java | 127 -- .../sis/geometries/mesh/PrimitiveIndexesTest.java | 4 +- .../apache/sis/geometries/mesh/PrimitiveTest.java | 6 +- .../sis/geometries/mesh/PrimitiveVisitorTest.java | 152 +-- .../sis/geometries/operation/BufferTest.java | 90 ++ .../sis/geometries/operation/ContainsTest.java | 87 ++ .../sis/geometries/operation/ConvexHullTest.java | 75 ++ .../sis/geometries/operation/CrossesTest.java | 88 ++ .../sis/geometries/operation/DifferenceTest.java | 85 ++ .../sis/geometries/operation/DisjointTest.java | 86 ++ .../sis/geometries/operation/DistanceTest.java | 134 ++ .../apache/sis/geometries/operation/EqualTest.java | 86 ++ .../IntersectionTest.java | 76 +- .../sis/geometries/operation/IntersectsTest.java | 86 ++ .../sis/geometries/operation/LocateAlongTest.java | 80 ++ .../geometries/operation/LocateBetweenTest.java | 82 ++ .../sis/geometries/operation/OverlapsTest.java | 91 ++ .../sis/geometries/operation/RelateTest.java | 101 ++ .../operation/ShewchukPredicatesTest.java | 119 ++ .../geometries/operation/SutherlandHogmanTest.java | 8 +- .../geometries/operation/SymDifferenceTest.java | 100 ++ .../apache/sis/geometries/operation/TestData.java | 112 ++ .../spatialedition => operation}/To3DTest.java | 21 +- .../ToPrimitiveTest.java | 51 +- .../sis/geometries/operation/TouchesTest.java | 91 ++ .../TransformTest.java | 56 +- .../apache/sis/geometries/operation/UnionTest.java | 98 ++ .../geometries/operation/WithinDistanceTest.java | 89 ++ .../sis/geometries/operation/WithinTest.java | 88 ++ .../operation/simplify/TextureAtlasTest.java | 1 + .../operation/spatialanalysis2d/IsoBandTest.java | 4 +- .../triangulate/delaunay/DelaunayTest.java | 4 +- .../triangulate/delaunay/OrientedEdgeTest.java | 4 +- .../sis/geometries/point/MultiPointTest.java} | 35 +- .../sis/geometries/point/PointCloudTest.java} | 55 +- .../processor/spatialanalysis2d/DistanceTest.java | 70 - .../sis/geometries/solid/BSplineSolidTest.java | 357 +++++ .../sis/geometries/solid/MultiPolyhedronTest.java} | 20 +- .../sis/geometries/solid/PolyhedronTest.java | 293 ++++ .../geometries/spherical/GreatCircleArcTest.java | 56 +- .../spherical/SphericalConvexPolygonTest.java | 10 +- .../spherical/SphericalTriangleTest.java | 74 +- .../sis/geometries/surface/BSplineSurfaceTest.java | 125 ++ .../sis/geometries/surface/BilinearGridTest.java} | 20 +- .../sis/geometries/surface/CurvePolygonTest.java | 381 ++++++ .../sis/geometries/surface/MultiPolygonTest.java} | 29 +- .../sis/geometries/surface/MultiSurfaceTest.java} | 55 +- .../sis/geometries/surface/NurbSurfaceTest.java} | 35 +- .../surface/ParametricCurveSurfaceTest.java | 397 ++++++ .../apache/sis/geometries/surface/PolygonTest.java | 381 ++++++ .../geometries/surface/PolyhedralSurfaceTest.java | 373 ++++++ .../geometries/{ => surface}/PreparedTINTest.java | 56 +- .../apache/sis/geometries/surface/TINTest.java} | 29 +- .../sis/geometries/{ => surface}/TriangleTest.java | 101 +- .../test/org/apache/sis/gml/2/box.gml | 4 + .../test/org/apache/sis/gml/2/linearring.gml | 4 + .../test/org/apache/sis/gml/2/linestring.gml | 4 + .../test/org/apache/sis/gml/2/linestring_coord.gml | 6 + .../test/org/apache/sis/gml/2/multigeometry.gml | 13 + .../test/org/apache/sis/gml/2/multilinestring.gml | 13 + .../test/org/apache/sis/gml/2/multipoint.gml | 13 + .../test/org/apache/sis/gml/2/multipolygon.gml | 21 + .../test/org/apache/sis/gml/2/no_namespace.gml | 4 + .../test/org/apache/sis/gml/2/point.gml | 4 + .../test/org/apache/sis/gml/2/point_coord.gml | 7 + .../test/org/apache/sis/gml/2/polygon.gml | 13 + .../test/org/apache/sis/gml/3/compositecurve.gml | 8 + .../test/org/apache/sis/gml/3/compositesolid.gml | 10 + .../test/org/apache/sis/gml/3/compositesurface.gml | 12 + .../test/org/apache/sis/gml/3/curve.gml | 8 + .../test/org/apache/sis/gml/3/curve_arc.gml | 8 + .../test/org/apache/sis/gml/3/curve_arcbybulge.gml | 10 + .../apache/sis/gml/3/curve_arcbycenterpoint.gml | 11 + .../test/org/apache/sis/gml/3/envelope.gml | 5 + .../test/org/apache/sis/gml/3/linearring.gml | 4 + .../org/apache/sis/gml/3/linestring_poslist.gml | 4 + .../test/org/apache/sis/gml/3/multicurve.gml | 13 + .../test/org/apache/sis/gml/3/multigeometry.gml | 13 + .../test/org/apache/sis/gml/3/multipoint.gml | 13 + .../apache/sis/gml/3/multipoint_pointmembers.gml | 11 + .../test/org/apache/sis/gml/3/multisurface.gml | 21 + .../test/org/apache/sis/gml/3/orientablecurve.gml | 8 + .../org/apache/sis/gml/3/orientablesurface.gml | 12 + .../test/org/apache/sis/gml/3/point.gml | 4 + .../test/org/apache/sis/gml/3/polygon_exterior.gml | 13 + .../test/org/apache/sis/gml/3/ring.gml | 12 + .../test/org/apache/sis/gml/3/solid.gml | 16 + .../test/org/apache/sis/gml/3/surface.gml | 12 + .../gml/3/tolerance_legacy_style_new_namespace.gml | 8 + .../gml/3/tolerance_new_style_old_namespace.gml | 4 + .../org/apache/sis/gml/DOMXMLStreamReaderTest.java | 221 +++ .../org/apache/sis/gml/DocumentComparator.java | 827 ++++++++++++ .../test/org/apache/sis/gml/GML2ReaderTest.java | 339 +++++ .../test/org/apache/sis/gml/GML2WriterTest.java | 220 +++ .../test/org/apache/sis/gml/GML3ReaderTest.java | 807 +++++++++++ .../test/org/apache/sis/gml/GML3WriterTest.java | 440 ++++++ .../test/org/apache/sis/gml/GMLReaderTest.java | 126 ++ .../test/org/apache/sis/gml/GMLWriterTest.java | 82 ++ .../test/org/apache/sis/gml/GeometryAssert.java | 147 ++ .../apache/sis/gml/JAXBGeometryAdapterTest.java | 195 +++ .../test/org/apache/sis/gml/TestCase.java | 129 ++ .../test/org/apache/sis/gml/TestData.java | 107 ++ .../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 | 65 +- .../{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 +- .../test/org/apache/sis/maths/VectorsTest.java | 242 ++++ .../org/apache/sis/scene/SceneUtilitiesTest.java | 4 +- .../org/apache/sis/referencing/dggs/s2/S2Zone.java | 2 +- .../dggs/DiscreteGlobalGridCoverageProcessor.java | 10 +- .../storage/dggs/DiscreteGlobalGridGeometry.java | 4 +- .../storage/dggs/DiscreteGlobalGridSystems.java | 16 +- .../shared/AbstractDiscreteGlobalGridCoverage.java | 2 +- .../shared/ArrayDiscreteGlobalGridCoverage.java | 10 +- .../shared/IndexedDiscreteGlobalGridCoverage.java | 2 +- .../rs/internal/shared/AbstractCodedCoverage.java | 2 +- .../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 | 4 +- .../main/module-info.java | 3 + .../storage/internal/shared/AggregationEvent.java | 61 + .../sis/storage/internal/shared/ContentEvent.java} | 26 +- .../internal/shared/FeatureSetContentEvent.java | 98 ++ .../internal/shared/FeatureSetModelEvent.java | 98 ++ .../sis/storage/internal/shared/ModelEvent.java} | 18 +- .../sis/storage/internal/shared/StorageEvent.java} | 25 +- .../internal/shared/TilingContentEvent.java | 88 ++ .../storage/internal/shared/TilingModelEvent.java | 97 ++ .../sis/storage/shapefile/ShapefileStore.java | 437 ++++-- .../sis/storage/shapefile/dbf/DBFReader.java | 7 +- .../sis/storage/shapefile/dbf/DBFWriter.java | 14 + .../apache/sis/storage/shapefile/package-info.java | 9 + .../sis/storage/shapefile/shp/ShapeRecord.java | 26 +- .../sis/storage/shapefile/shp/ShapeWriter.java | 5 + .../shapefile/ShapefileStoreEventsTest.java | 373 ++++++ .../sis/storage/shapefile/ShapefileStoreTest.java | 146 +- .../sis/storage/shapefile/dbf/DBFIOTest.java | 48 + .../sis/storage/shapefile/shp/ShapeIOTest.java | 63 + netbeans-project/nbproject/project.xml | 1 + optional/src/org.apache.sis.gui/bundle/bin/sis | 1 + optional/src/org.apache.sis.gui/bundle/bin/sisfx | 1 + .../main/org/apache/sis/gui/setup/Inflater.java | 6 +- .../main/module-info.java | 2 +- .../referencing/factory/sql/epsg/package-info.java | 4 +- .../factory/sql/epsg/DataScriptUpdater.java | 4 + .../sis/referencing/factory/sql/epsg/README.md | 10 +- 692 files changed, 51252 insertions(+), 8375 deletions(-) diff --cc incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSurface.java index 0000000000,452e250e52..a53ca31542 mode 000000,100644..100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSurface.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSurface.java @@@ -1,0 -1,195 +1,197 @@@ + /* + * 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.internal.shared; + + import java.util.List; + import java.util.Objects; + import javax.measure.Quantity; + import org.apache.sis.geometries.Curve; + import org.apache.sis.geometries.DataPoints; + import org.apache.sis.geometries.curve.KnotType; + import org.apache.sis.geometries.surface.BSplineSurface; + import org.apache.sis.geometries.surface.BSplineSurfaceForm; + import org.opengis.geometry.DirectPosition; + import org.opengis.geometry.Envelope; -import org.opengis.metadata.Identifier; ++ ++// Specific to the geoapi-3.1 branch: ++import org.opengis.referencing.ReferenceIdentifier; + + + /** + * A rational or polynomial parametric surface represented by control points, b-spline basis + * functions and possibly weights. + * + * <p>For the rational flavour, which carries a weight per control point and can therefore be + * evaluated, see {@link DefaultNurbSurface}.</p> + * + * @author Johann Sorel (Geomatys) + */ + public non-sealed class DefaultBSplineSurface extends AbstractGeometry implements BSplineSurface { + + /** + * Positions of this surface at the knots of the parameter grid, in row-major order. + */ + protected final DataPoints points; + + /** + * Control points of the section curves, in row-major order, or an empty list if none. + */ + protected final List<DirectPosition> controlPoints; + + /** + * Number of rows in the parameter grid. + */ + protected final int rows; + + /** + * Number of columns in the parameter grid. + */ + protected final int columns; + + /** + * The two knot sequences used to define the basis functions, one per surface parameter. + */ + protected final List<double[]> knots; + + /** + * Algebraic degree of the b-spline basis functions. + */ + protected final int degree; + + /** + * Distribution of the knots, given for information only. + */ + protected final KnotType knotSpec; + + /** + * Kind of surface which this spline approximates. + */ + protected final BSplineSurfaceForm surfaceForm; + + /** + * Whether this surface is a polynomial spline rather than a rational one. + */ + protected final boolean polynomial; + + /** + * Creates a b-spline surface over the given parameter grid. + * + * @param points positions at the knots of the parameter grid, in row-major order. + * There shall be {@code rows} × {@code columns} of them. + * @param controlPoints control points in row-major order, or {@code null} if none. + * @param rows number of rows in the parameter grid. + * @param columns number of columns in the parameter grid. + * @param knots exactly two knot sequences, one per surface parameter, knots with a + * multiplicity greater than one being repeated in the sequence. + * @param degree algebraic degree of the b-spline basis functions. + * @param knotSpec distribution of the knots, or {@code null} if unspecified. + * @param surfaceForm kind of surface approximated by this spline, or {@code null} if none. + * @param polynomial {@code true} if this surface is polynomial, {@code false} if the + * control points are expressed in homogeneous coordinates, which makes + * it rational. + */ + public DefaultBSplineSurface(final DataPoints points, final List<DirectPosition> controlPoints, + final int rows, final int columns, final List<double[]> knots, final int degree, + final KnotType knotSpec, final BSplineSurfaceForm surfaceForm, final boolean polynomial) + { + this.points = Objects.requireNonNull(points); + this.controlPoints = (controlPoints == null) ? List.of() : List.copyOf(controlPoints); + this.rows = rows; + this.columns = columns; + this.knots = (knots == null) ? List.of() : List.copyOf(knots); + this.degree = degree; + this.knotSpec = knotSpec; + this.surfaceForm = surfaceForm; + this.polynomial = polynomial; + } + + @Override + public int getDegree() { + return degree; + } + + @Override + public List<double[]> getKnots() { + return knots; + } + + @Override + public KnotType getKnotSpec() { + return knotSpec; + } + + @Override + public BSplineSurfaceForm getSurfaceForm() { + return surfaceForm; + } + + @Override + public boolean isPolynomial() { + return polynomial; + } + + @Override + public int getRows() { + return rows; + } + + @Override + public int getColumns() { + return columns; + } + + @Override + public DataPoints getDataPoints() { + return points; + } + + @Override + public List<DirectPosition> getControlPoints() { + return controlPoints; + } + + @Override + public Curve getHorizontalCurve(double v) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Curve getVerticalCurve(double u) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public DirectPosition getSurface(double u, double v) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Quantity<?> getArea() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Envelope getEnvelope() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override - public Identifier getName() { ++ public ReferenceIdentifier getName() { + throw new UnsupportedOperationException("Not supported yet."); + } + + } diff --cc incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBilinearGrid.java index 0000000000,1d5e740466..92bf6a8759 mode 000000,100644..100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBilinearGrid.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBilinearGrid.java @@@ -1,0 -1,179 +1,181 @@@ + /* + * 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.internal.shared; + + import java.util.List; + import java.util.Objects; + import javax.measure.Quantity; + import org.apache.sis.geometries.Curve; + import org.apache.sis.geometries.DataPoints; + import org.apache.sis.geometries.GeometryType; + import org.apache.sis.geometries.surface.BilinearGrid; + import org.opengis.geometry.DirectPosition; + import org.opengis.geometry.Envelope; -import org.opengis.metadata.Identifier; + import org.opengis.referencing.crs.CoordinateReferenceSystem; + import org.apache.sis.geometries.DataPointsType; + ++// Specific to the geoapi-3.1 branch: ++import org.opengis.referencing.ReferenceIdentifier; ++ + + /** + * A parametric curve surface using polylines as both horizontal and vertical curves, each cell of + * the parameter grid being interpolated bilinearly over the unit square. + * + * @author Johann Sorel (Geomatys) + */ + public non-sealed class DefaultBilinearGrid extends AbstractGeometry implements BilinearGrid { + + /** + * Positions of this surface at the knots of the parameter grid, in row-major order. + */ + protected final DataPoints points; + + /** + * Control points of the section curves, in row-major order, or an empty list if none. + */ + protected final List<DirectPosition> controlPoints; + + /** + * Number of rows in the parameter grid. + */ + protected final int rows; + + /** + * Number of columns in the parameter grid. + */ + protected final int columns; + + /** + * Construction parameter values matching the data points, the first sequence being for the + * <var>u</var> parameter and the second one for <var>v</var>. + */ + protected final List<double[]> knots; + + /** + * Creates a bilinear grid over the given parameter grid. + * + * @param points positions at the knots of the parameter grid, in row-major order. + * There shall be {@code rows} × {@code columns} of them. + * @param controlPoints control points of the section curves in row-major order, + * or {@code null} if none. + * @param rows number of rows in the parameter grid. + * @param columns number of columns in the parameter grid. + * @param knots knot values, one sequence per surface parameter, or {@code null} if none. + */ + public DefaultBilinearGrid(final DataPoints points, final List<DirectPosition> controlPoints, + final int rows, final int columns, final List<double[]> knots) + { + this.points = Objects.requireNonNull(points); + this.controlPoints = (controlPoints == null) ? List.of() : List.copyOf(controlPoints); + this.rows = rows; + this.columns = columns; + this.knots = (knots == null) ? List.of() : List.copyOf(knots); + } + + @Override + public int getRows() { + return rows; + } + + @Override + public int getColumns() { + return columns; + } + + @Override + public DataPoints getDataPoints() { + return points; + } + + @Override + public List<DirectPosition> getControlPoints() { + return controlPoints; + } + + @Override + public List<double[]> getKnots() { + return knots; + } + + /** + * Returns {@link GeometryType#LINE}: the horizontal sections of a bilinear grid are polylines. + */ + @Override + public GeometryType getHorizontalCurveType() { + return GeometryType.LINE; + } + + /** + * Returns {@link GeometryType#LINE}: the vertical sections of a bilinear grid are polylines. + */ + @Override + public GeometryType getVerticalCurveType() { + return GeometryType.LINE; + } + + @Override + public Curve getHorizontalCurve(double v) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Curve getVerticalCurve(double u) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public DirectPosition getSurface(double u, double v) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CoordinateReferenceSystem getCoordinateReferenceSystem() { + return points.getCoordinateReferenceSystem(); + } + + @Override + public void setCoordinateReferenceSystem(CoordinateReferenceSystem crs) throws IllegalArgumentException { + points.setCoordinateReferenceSystem(crs); + } + + @Override + public DataPointsType getDataPointsType() { + return points.getType(); + } + + @Override + public boolean isEmpty() { + return points.isEmpty(); + } + + @Override + public Quantity<?> getArea() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Envelope getEnvelope() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override - public Identifier getName() { ++ public ReferenceIdentifier getName() { + throw new UnsupportedOperationException("Not supported yet."); + } + + } diff --cc incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultNurbSurface.java index 0000000000,6e27f7759e..49076462ef mode 000000,100644..100644 --- a/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultNurbSurface.java +++ b/incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultNurbSurface.java @@@ -1,0 -1,384 +1,386 @@@ + /* + * 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.internal.shared; + + import java.util.Arrays; + import java.util.List; + import javax.measure.Quantity; + import org.apache.sis.geometries.BBox; + import org.apache.sis.geometries.Curve; + import org.apache.sis.geometries.DataPoints; + import org.apache.sis.geometries.curve.KnotType; + import org.apache.sis.geometries.operation.DeBoorAlgorithm; + import org.apache.sis.geometries.surface.BSplineSurfaceForm; + import org.apache.sis.geometries.surface.NurbSurface; + import org.apache.sis.maths.NDArrays; + import org.apache.sis.maths.Vector; + import org.apache.sis.maths.Vectors; + import org.opengis.geometry.DirectPosition; -import org.opengis.metadata.Identifier; ++ ++// Specific to the geoapi-3.1 branch: ++import org.opengis.referencing.ReferenceIdentifier; + + /** + * NURBS surface: tensor product of two directions (u, v), each one with its own degree and its own knot vector. + * The control points form a grid controlPoints[i][j] (i = u direction, j = v direction). + * + * @author Johann Sorel (Geomatys) + */ + public non-sealed class DefaultNurbSurface extends AbstractGeometry implements NurbSurface { + + final Vector<?>[][] controlPoints; + final double[][] weights; + final double[] knotsU; + final double[] knotsV; + final int degree; + + public DefaultNurbSurface(final Vector<?>[][] controlPoints, final double[][] weights, + final double[] knotsU, final double[] knotsV, final int degree) { + this.controlPoints = controlPoints; + this.weights = weights; + this.knotsU = knotsU; + this.knotsV = knotsV; + this.degree = degree; + } + + /** + * Evaluates the point S(u,v) of the surface at the given parameters. + * + * Principle: the formula S(u,v) = ΣΣ N_i,p(u) N_j,q(v) Pw_ij is computed as two passes of the "classical" De Boor + * algorithm in homogeneous coordinates: 1) for each row i, evaluate a curve along v -> one homogeneous point Q_i + * per row (this "flattens" the v direction) 2) then evaluate a curve along u using the Q_i as homogeneous control + * points and only dehomogenize at the very end — exactly the same principle as for curves, just applied twice. + * + * N_i,p(u) and N_j,q(v) vanish outside of their support, so only degreeU+1 rows and, within each of them, degreeV+1 + * columns actually contribute. They are selected first through {@link DeBoorAlgorithm#findKnotSpan}, then De Boor's + * recursion is run on that small window only, through {@link DeBoorAlgorithm#evaluateWindow} — instead of walking + * the whole grid. The cost is therefore O(degreeU × degreeV) instead of O(rows × cols), independently of the grid + * size. + */ + public Vector<?> evaluate(final double u, final double v) { + final int rows = controlPoints.length; + final int spatialDim = controlPoints[0][0].getDimension(); + + final int ku = DeBoorAlgorithm.findKnotSpan(u, knotsU, degree, rows - 1); + + final Vector<?>[] windowU = new Vector<?>[degree + 1]; + for (int t = 0; t <= degree; t++) { + final int i = ku - degree + t; + windowU[t] = evaluateRowAlongV(controlPoints[i], weights[i], v, knotsV, degree); + } + + final Vector<?> result = DeBoorAlgorithm.evaluateWindow(u, windowU, knotsU, degree, ku); + return DefaultNurbCurve.fromHomogeneous(result, spatialDim); + } + + /** + * Evaluates, for a single row of the grid, the homogeneous point along v (degreeV+1 window only). + */ + private static Vector<?> evaluateRowAlongV(final Vector<?>[] rowControlPoints, final double[] rowWeights, + final double v, final double[] knotsV, final int degreeV) { + final int cols = rowControlPoints.length; + final int kv = DeBoorAlgorithm.findKnotSpan(v, knotsV, degreeV, cols - 1); + + final Vector<?>[] windowV = new Vector<?>[degreeV + 1]; + for (int t = 0; t <= degreeV; t++) { + final int j = kv - degreeV + t; + windowV[t] = DefaultNurbCurve.toHomogeneous(rowControlPoints[j], rowWeights[j]); + } + return DeBoorAlgorithm.evaluateWindow(v, windowV, knotsV, degreeV, kv); + } + + /** + * Partial derivatives {Su, Sv} at point (u,v) — the two vectors tangent to the surface. + * + * Same principle as for curves (differentiation of the homogeneous surface then the quotient rule), applied in each + * direction: + * + * - For Su: the v direction is flattened first (as in {@link #evaluate}), which yields a homogeneous curve in u; it + * is then differentiated with the same formula as for curves. - For Sv: symmetrically, u is flattened first, then + * the differentiation happens in v. + * + * Unlike {@link #evaluate} (optimized to a local window), this method rebuilds the complete flattened curve in each + * direction, because the differentiation formula needs the whole knot vector in order to stay correct at the window + * boundaries. + */ + public Vector<?>[] derivative(final double u, final double v) { + final int rows = controlPoints.length; + final int cols = controlPoints[0].length; + final int spatialDim = controlPoints[0][0].getDimension(); + + // Flatten v -> a homogeneous curve along u (one value per row) + final Vector<?>[] alongU = new Vector<?>[rows]; + for (int i = 0; i < rows; i++) { + final Vector<?>[] rowHom = new Vector<?>[cols]; + for (int j = 0; j < cols; j++) { + rowHom[j] = DefaultNurbCurve.toHomogeneous(controlPoints[i][j], weights[i][j]); + } + alongU[i] = DeBoorAlgorithm.evaluate(v, rowHom, knotsV, degree); + } + final Vector<?> Sw = DeBoorAlgorithm.evaluate(u, alongU, knotsU, degree); + final double w = Sw.get(spatialDim); + final double[] Suv = new double[spatialDim]; + for (int c = 0; c < spatialDim; c++) { + Suv[c] = Sw.get(c) / w; + } + + final Vector<?> su = partialDerivative(u, alongU, knotsU, degree, w, Suv, spatialDim); + + // Flatten u -> a homogeneous curve along v (one value per column) + final Vector<?>[] alongV = new Vector<?>[cols]; + for (int j = 0; j < cols; j++) { + final Vector<?>[] colHom = new Vector<?>[rows]; + for (int i = 0; i < rows; i++) { + colHom[i] = DefaultNurbCurve.toHomogeneous(controlPoints[i][j], weights[i][j]); + } + alongV[j] = DeBoorAlgorithm.evaluate(u, colHom, knotsU, degree); + } + final Vector<?> sv = partialDerivative(v, alongV, knotsV, degree, w, Suv, spatialDim); + + return new Vector<?>[]{su, sv}; + } + + /** + * Differentiates the "flattened" homogeneous curve (already in homogeneous coordinates) and applies the quotient + * rule. + */ + private static Vector<?> partialDerivative(final double param, final Vector<?>[] flattenedHomogeneous, final double[] knots, final int degree, + final double w, final double[] surfacePoint, final int spatialDim) { + if (degree == 0) { + return Vectors.createDouble(spatialDim); + } + + final Vector<?>[] derivCtrl = DeBoorAlgorithm.derivativeControlPoints(flattenedHomogeneous, knots, degree); + final double[] derivKnots = Arrays.copyOfRange(knots, 1, knots.length - 1); + final Vector<?> deriv = DeBoorAlgorithm.evaluate(param, derivCtrl, derivKnots, degree - 1); + + final double wDeriv = deriv.get(spatialDim); + final double[] result = new double[spatialDim]; + for (int c = 0; c < spatialDim; c++) { + result[c] = (deriv.get(c) - wDeriv * surfacePoint[c]) / w; + } + return Vectors.createDouble(result.length).set(result); + } + + /** + * Unit normal at point (u,v) — defined for a 3D surface only. + */ + public Vector<?> normal(final double u, final double v) { + final Vector<?>[] d = derivative(u, v); + final Vector<?> n = d[0].cross(d[1]); + n.normalize(); + return n; + } + + public double domainStartU() { + return knotsU[degree]; + } + + public double domainEndU() { + return knotsU[controlPoints.length]; + } + + public double domainStartV() { + return knotsV[degree]; + } + + public double domainEndV() { + return knotsV[controlPoints[0].length]; + } + + // ------------------------------------------------------------------ + // Subdivision + // ------------------------------------------------------------------ + /** + * Splits this surface in two halves along the u direction, at the given u value. + * Trick: each column of the grid IS a curve in u, + * so {@link DefaultNurbCurve#subdivide(double)} is reused directly, column by column. + * The resulting left/right knot vector is the same for every column + * (it depends only on u and on the original knot vector), so it can be collected once. + * + * @param u parameter at which to split the surface + * @return the two halves, in parameter order + */ + public DefaultNurbSurface[] subdivideU(final double u) { + final int rows = controlPoints.length, cols = controlPoints[0].length; + Vector<?>[][] leftCtrl = null, rightCtrl = null; + double[][] leftW = null, rightW = null; + double[] leftKnots = null, rightKnots = null; + + for (int j = 0; j < cols; j++) { + final Vector<?>[] colCtrl = new Vector<?>[rows]; + final double[] colW = new double[rows]; + for (int i = 0; i < rows; i++) { + colCtrl[i] = controlPoints[i][j]; + colW[i] = weights[i][j]; + } + + final DataPoints colDp = new ArrayDataPoints( + NDArrays.of(List.of(colCtrl), + colCtrl[0].getSampleSystem(), + colCtrl[0].getDataType())); + final DefaultNurbCurve[] halves = new DefaultNurbCurve(colDp, colW, knotsU, degree).subdivide(u); + + if (leftCtrl == null) { + leftCtrl = new Vector<?>[halves[0].nbCtrlPts][cols]; + leftW = new double[halves[0].nbCtrlPts][cols]; + rightCtrl = new Vector<?>[halves[1].nbCtrlPts][cols]; + rightW = new double[halves[1].nbCtrlPts][cols]; + leftKnots = halves[0].knots; + rightKnots = halves[1].knots; + } + for (int i = 0; i < halves[0].nbCtrlPts; i++) { + leftCtrl[i][j] = halves[0].controlPoints[i]; + leftW[i][j] = halves[0].weights[i]; + } + for (int i = 0; i < halves[1].nbCtrlPts; i++) { + rightCtrl[i][j] = halves[1].controlPoints[i]; + rightW[i][j] = halves[1].weights[i]; + } + } + + return new DefaultNurbSurface[]{ + new DefaultNurbSurface(leftCtrl, leftW, leftKnots, knotsV, degree), + new DefaultNurbSurface(rightCtrl, rightW, rightKnots, knotsV, degree) + }; + } + + /** + * Same as {@link #subdivideU} but along the v direction (each ROW is a curve in v). + */ + public DefaultNurbSurface[] subdivideV(final double v) { + final int rows = controlPoints.length; + Vector<?>[][] leftCtrl = null, rightCtrl = null; + double[][] leftW = null, rightW = null; + double[] leftKnots = null, rightKnots = null; + + for (int i = 0; i < rows; i++) { + + final DataPoints dp = new ArrayDataPoints( + NDArrays.of(List.of(controlPoints[i]), + controlPoints[i][0].getSampleSystem(), + controlPoints[i][0].getDataType())); + + final DefaultNurbCurve[] halves = new DefaultNurbCurve(dp, weights[i], knotsV, degree).subdivide(v); + + if (leftCtrl == null) { + leftCtrl = new Vector<?>[rows][halves[0].nbCtrlPts]; + leftW = new double[rows][halves[0].controlPoints.length]; + rightCtrl = new Vector<?>[rows][halves[1].nbCtrlPts]; + rightW = new double[rows][halves[1].controlPoints.length]; + leftKnots = halves[0].knots; + rightKnots = halves[1].knots; + } + leftCtrl[i] = halves[0].controlPoints; + leftW[i] = halves[0].weights; + rightCtrl[i] = halves[1].controlPoints; + rightW[i] = halves[1].weights; + } + + return new DefaultNurbSurface[]{ + new DefaultNurbSurface(leftCtrl, leftW, knotsU, leftKnots, degree), + new DefaultNurbSurface(rightCtrl, rightW, knotsU, rightKnots, degree) + }; + } + + + /** + * Bounding box of the control points, which contains the surface (convex hull property). + * + * @return the bounding box of this surface + */ + public BBox getEnvelope() { + final BBox bbox = new BBox(controlPoints[0][0], controlPoints[0][0]); + for (final Vector<?>[] row : controlPoints) { + for (final Vector<?> p : row) { + bbox.add(p); + } + } + return bbox; + } + + @Override + public int getDegree() { + return degree; + } + + @Override + public List<double[]> getKnots() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public KnotType getKnotSpec() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public BSplineSurfaceForm getSurfaceForm() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public boolean isPolynomial() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Quantity<?> getArea() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int getRows() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public int getColumns() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public List<DirectPosition> getControlPoints() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public DataPoints getDataPoints() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Curve getHorizontalCurve(double v) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Curve getVerticalCurve(double u) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public DirectPosition getSurface(double u, double v) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override - public Identifier getName() { ++ public ReferenceIdentifier getName() { + throw new UnsupportedOperationException("Not supported yet."); + } + + } diff --cc incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java index f39eee8d29,936c0a4768..8cb60846c8 --- 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/solid/Sphere.java @@@ -14,22 -14,29 +14,31 @@@ * 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 javax.measure.Quantity; + import org.apache.sis.geometries.BBox; + import org.apache.sis.geometries.Curve; + import org.apache.sis.geometries.DataPoints; + import org.apache.sis.geometries.Geometries; + import org.apache.sis.geometries.GeometryType; + import org.apache.sis.geometries.SurfaceInterpolation; -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; 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.util.ArgumentChecks; + +// Specific to the geoapi-3.1 branch: +import org.opengis.referencing.ReferenceIdentifier; + import org.opengis.geometry.DirectPosition; + import org.opengis.geometry.Envelope; -import org.opengis.metadata.Identifier; + import org.opengis.referencing.crs.CoordinateReferenceSystem; + import org.apache.sis.geometries.DataPointsType; /**
