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 2fae730759328fe8e11243cf85044e0c497a5ba4 Merge: e3efcc2eaa c4eb3bfe46 Author: Martin Desruisseaux <[email protected]> AuthorDate: Fri Oct 9 14:01:13 2026 +0200 Merge branch 'geoapi-4.0' into geoapi-3.1 SECURITY.md | 41 ++ buildSrc/build.gradle.kts | 2 +- .../sis/coverage/grid/ValuesAtPointIterator.java | 23 +- .../org/apache/sis/style/filter/Expression_Add.xml | 6 + .../org/apache/sis/style/filter/Expression_Div.xml | 5 + .../sis/style/filter/Expression_Function.xml | 5 + .../apache/sis/style/filter/Expression_Literal.xml | 4 + .../sis/style/filter/Expression_LiteralColor.xml | 4 + .../org/apache/sis/style/filter/Expression_Mul.xml | 5 + .../sis/style/filter/Expression_PropertyName.xml | 4 + .../org/apache/sis/style/filter/Expression_Sub.xml | 5 + .../filter/Filter_Comparison_PropertyIsBetween.xml | 8 + .../filter/Filter_Comparison_PropertyIsEqualTo.xml | 9 + .../Filter_Comparison_PropertyIsGreaterThan.xml | 8 + ...r_Comparison_PropertyIsGreaterThanOrEqualTo.xml | 7 + .../Filter_Comparison_PropertyIsLessThan.xml | 9 + ...lter_Comparison_PropertyIsLessThanOrEqualTo.xml | 8 + .../Filter_Comparison_PropertyIsLike_v100.xml | 9 + .../Filter_Comparison_PropertyIsLike_v110.xml | 9 + .../Filter_Comparison_PropertyIsNotEqualTo.xml | 8 + .../filter/Filter_Comparison_PropertyIsNull.xml | 7 + .../style/filter/Filter_Comparison_matchCase.xml | 18 + .../apache/sis/style/filter/Filter_Id_feature.xml | 8 + .../org/apache/sis/style/filter/Filter_Id_gml.xml | 8 + .../apache/sis/style/filter/Filter_Logical_And.xml | 14 + .../sis/style/filter/Filter_Logical_Nested.xml | 27 + .../apache/sis/style/filter/Filter_Logical_Not.xml | 11 + .../apache/sis/style/filter/Filter_Logical_Or.xml | 14 + .../org/apache/sis/style/filter/Filter_Sortby.xml | 7 + .../sis/style/filter/Filter_Spatial_BBOX.xml | 11 + .../sis/style/filter/Filter_Spatial_BBOX_v100.xml | 11 + .../sis/style/filter/Filter_Spatial_Beyond.xml | 10 + .../sis/style/filter/Filter_Spatial_Contains.xml | 13 + .../sis/style/filter/Filter_Spatial_Crosses.xml | 9 + .../sis/style/filter/Filter_Spatial_DWithin.xml | 10 + .../sis/style/filter/Filter_Spatial_Disjoint.xml | 10 + .../sis/style/filter/Filter_Spatial_Equals.xml | 13 + .../sis/style/filter/Filter_Spatial_Intersects.xml | 13 + .../sis/style/filter/Filter_Spatial_Overlaps.xml | 16 + .../sis/style/filter/Filter_Spatial_Overlaps2.xml | 9 + .../sis/style/filter/Filter_Spatial_Touches.xml | 13 + .../sis/style/filter/Filter_Spatial_Within.xml | 10 + .../sis/style/filter/Filter_Temporal_After.xml | 9 + .../sis/style/filter/Filter_Temporal_Before.xml | 9 + .../sis/style/filter/Filter_Temporal_Begins.xml | 10 + .../sis/style/filter/Filter_Temporal_BegunBy.xml | 10 + .../sis/style/filter/Filter_Temporal_Contains.xml | 10 + .../sis/style/filter/Filter_Temporal_During.xml | 10 + .../sis/style/filter/Filter_Temporal_EndedBy.xml | 10 + .../sis/style/filter/Filter_Temporal_Ends.xml | 10 + .../sis/style/filter/Filter_Temporal_Equals.xml | 9 + .../sis/style/filter/Filter_Temporal_Meets.xml | 10 + .../sis/style/filter/Filter_Temporal_MetBy.xml | 10 + .../sis/style/filter/Filter_Temporal_Overalps.xml | 11 + .../style/filter/Filter_Temporal_OverlappedBy.xml | 10 + .../SE_ChannelSelection_ContrastEnhancement.xml | 19 + .../org/apache/sis/style/se1/SE_ColorMap_Ramp.xml | 8 + .../style/se1/SE_ExternalGraphic_InlineContent.xml | 10 + .../se1/SE_ExternalGraphic_OnlineResource.xml | 20 + .../apache/sis/style/se1/SE_Fill_GraphicFill.xml | 17 + .../sis/style/se1/SE_Function_Categorize.xml | 25 + .../apache/sis/style/se1/SE_Mark_TrueTypeFont.xml | 9 + .../sis/style/se1/SE_Stroke_GraphicStroke.xml | 19 + .../sis/style/se1/SE_SvgParameter_Interpolate.xml | 23 + .../apache/sis/style/se1/SE_coveragestyle_v110.xml | 29 + .../test/org/apache/sis/style/se1/SE_fts_v100.xml | 20 + .../test/org/apache/sis/style/se1/SE_fts_v110.xml | 22 + .../apache/sis/style/se1/SE_lineplacement_v110.xml | 24 + .../sis/style/se1/SE_rule_elsefilter_v110.xml | 36 + .../test/org/apache/sis/style/se1/SE_rule_v100.xml | 19 + .../test/org/apache/sis/style/se1/SE_rule_v110.xml | 21 + .../apache/sis/style/se1/SE_symbol_line_v100.xml | 30 + .../apache/sis/style/se1/SE_symbol_line_v110.xml | 18 + .../apache/sis/style/se1/SE_symbol_point_v100.xml | 30 + .../apache/sis/style/se1/SE_symbol_point_v110.xml | 39 ++ .../sis/style/se1/SE_symbol_polygon_v100.xml | 38 ++ .../sis/style/se1/SE_symbol_polygon_v110.xml | 27 + .../apache/sis/style/se1/SE_symbol_raster_v100.xml | 58 ++ .../apache/sis/style/se1/SE_symbol_raster_v110.xml | 44 ++ .../apache/sis/style/se1/SE_symbol_text_v100.xml | 35 + .../apache/sis/style/se1/SE_symbol_text_v110.xml | 41 ++ .../style/sld1/SLD_FeatureTypeConstraint_v100.xml | 17 + .../style/sld1/SLD_FeatureTypeConstraint_v110.xml | 17 + .../SLD_LayerCoverageConstraints_RangeAxis.xml | 20 + .../SLD_LayerCoverageConstraints_TimePeriod.xml | 13 + .../style/sld1/SLD_NamedLayer_NamedStyle_v100.xml | 8 + .../style/sld1/SLD_NamedLayer_NamedStyle_v110.xml | 12 + .../apache/sis/style/sld1/SLD_UseSLDLibrary.xml | 11 + .../sis/style/sld1/SLD_UserLayer_InlineFeature.xml | 14 + .../style/sld1/SLD_UserLayer_RemoteOWS_v100.xml | 9 + .../style/sld1/SLD_UserLayer_RemoteOWS_v110.xml | 9 + .../sis/style/sld1/SLD_UserStyle_CoverageStyle.xml | 13 + .../style/sld1/SLD_UserStyle_OnlineResource.xml | 6 + .../apache/sis/style/sld1/SLD_UserStyle_v100.xml | 17 + .../apache/sis/style/sld1/SLD_UserStyle_v110.xml | 21 + .../operation/builder/LocalizationGridBuilder.java | 140 ++-- .../operation/builder/package-info.java | 2 +- .../builder/LocalizationGridBuilderTest.java | 42 +- .../sis/storage/geotiff/ImageFileDirectory.java | 6 +- .../apache/sis/storage/geotiff/NativeMetadata.java | 14 +- .../org/apache/sis/storage/geotiff/Writer.java | 33 +- .../sis/storage/geotiff/reader/ColorMap.java | 110 +++ .../geotiff/reader/GridGeometryBuilder.java | 6 +- .../{Localization.java => ModelTiePoints.java} | 102 ++- .../apache/sis/storage/geotiff/reader/Type.java | 18 +- .../org/apache/sis/storage/geotiff/WriterTest.java | 24 +- .../storage/geotiff/reader/ModelTiePointsTest.java | 270 ++++++++ .../sis/storage/netcdf/NetcdfStoreProvider.java | 8 +- .../main/module-info.java | 10 +- .../org/apache/sis/storage/DataStoreRegistry.java | 1 - .../main/org/apache/sis/math/ArrayVector.java | 17 + .../main/org/apache/sis/math/DecimalFunctions.java | 2 +- .../main/org/apache/sis/math/RepeatedVector.java | 12 + .../main/org/apache/sis/math/Vector.java | 63 +- .../main/org/apache/sis/util/Exceptions.java | 22 +- .../main/org/apache/sis/util/Localized.java | 9 +- .../org/apache/sis/util/LocalizedException.java | 5 +- .../apache/sis/util/internal/shared/Numerics.java | 2 +- .../sis/util/internal/shared/PropertyFormat.java | 66 +- .../sis/util/internal/shared/TableRowList.java | 104 +++ .../test/org/apache/sis/math/VectorTest.java | 4 + .../org.apache.sis.geometry/main/module-info.java | 1 + .../main/org/apache/sis/geometries/BBox.java | 123 +++- .../main/org/apache/sis/geometries/Curve.java | 11 +- .../main/org/apache/sis/geometries/DataPoints.java | 90 ++- .../main/org/apache/sis/geometries/Empty.java | 11 +- .../main/org/apache/sis/geometries/Geometries.java | 77 ++- .../main/org/apache/sis/geometries/Geometry.java | 48 +- .../apache/sis/geometries/GeometryCollection.java | 19 + .../org/apache/sis/geometries/GeometryFactory.java | 556 +++++++-------- .../org/apache/sis/geometries/GeometryType.java | 4 + .../main/org/apache/sis/geometries/HyperPlane.java | 136 +++- .../main/org/apache/sis/geometries/OBBox.java | 36 +- .../apache/sis/geometries/OrientedGeometry.java | 60 -- .../main/org/apache/sis/geometries/Plane.java | 173 ++++- .../main/org/apache/sis/geometries/Point.java | 27 +- .../main/org/apache/sis/geometries/Prism.java | 9 + .../main/org/apache/sis/geometries/Ray.java | 71 +- .../main/org/apache/sis/geometries/Solid.java | 10 +- .../main/org/apache/sis/geometries/Surface.java | 22 +- .../main/org/apache/sis/geometries/Wrapper.java | 337 --------- .../apache/sis/geometries/adapter/JTSAdapter.java | 44 +- .../geometries/adapter/PathIteratorAdapter.java | 8 +- .../org/apache/sis/geometries/adapter/SIS.java | 638 +++++++++++++++++ .../sis/geometries/adapter/ShapeAdapter.java | 6 +- .../sis/geometries/adapter/ShapeConverter.java | 14 +- .../sis/geometries/adapter/WellKnownBinary.java | 4 +- .../geometries/adapter/WellKnownBinaryParser.java | 66 +- .../sis/geometries/adapter/WellKnownText.java | 4 +- .../geometries/adapter/WellKnownTextParser.java | 76 +-- .../org/apache/sis/geometries/adapter/Wrapper.java | 755 +++++++++++++++++++++ .../geometries/csg/ConstructiveSolidGeometry.java | 16 + .../sis/geometries/curve/ArcByCenterPoint.java | 4 +- .../apache/sis/geometries/curve/CompoundCurve.java | 18 + .../apache/sis/geometries/curve/FunctionArc.java | 2 +- .../apache/sis/geometries/curve/ProductCurve.java | 13 + .../org/apache/sis/geometries/index/KdTree.java | 44 +- .../internal/shared/AbstractGeometry.java | 34 + .../internal/shared/AbstractOrientedGeometry.java | 54 -- .../internal/shared/ArrayDataPoints.java | 27 +- .../internal/shared/ConcatenatedDataPoints.java | 184 +++++ .../internal/shared/DefaultArcByCenterPoint.java | 10 + .../internal/shared/DefaultBSplineSolid.java | 6 + .../internal/shared/DefaultBSplineSurface.java | 6 + .../internal/shared/DefaultBilinearGrid.java | 5 + .../internal/shared/DefaultCompoundCurve.java | 5 - .../internal/shared/DefaultCurvePolygon.java | 6 + .../internal/shared/DefaultDataPoints.java | 20 +- .../internal/shared/DefaultGeometryCollection.java | 44 ++ .../internal/shared/DefaultLineString.java | 42 ++ .../internal/shared/DefaultLinearRing.java | 10 + .../internal/shared/DefaultMultiPoint.java | 46 +- .../internal/shared/DefaultMultiSurface.java | 11 + .../internal/shared/DefaultNurbCurve.java | 2 +- .../internal/shared/DefaultNurbSurface.java | 6 + .../geometries/internal/shared/DefaultPoint.java | 13 +- .../geometries/internal/shared/DefaultPolygon.java | 65 +- .../internal/shared/DefaultPolyhedralSurface.java | 6 + .../internal/shared/DefaultPolyhedron.java | 6 - .../geometries/internal/shared/DefaultPrism.java | 5 + .../internal/shared/DefaultProductCurve.java | 6 - .../internal/shared/DefaultReversedSurface.java | 12 + .../internal/shared/EmptyDataPoints.java | 116 ++++ .../geometries/internal/shared/IndexedPoint.java | 9 +- .../internal/shared/SinglePositionDataPoints.java | 140 ++++ .../apache/sis/geometries/mesh/MeshPrimitive.java | 93 +-- .../geometries/mesh/MeshPrimitiveComparator.java | 8 +- .../sis/geometries/mesh/MeshPrimitiveVisitor.java | 4 +- .../sis/geometries/mesh/MultiMeshPrimitive.java | 22 + .../sis/geometries/operation/ComputeAttribute.java | 6 +- .../apache/sis/geometries/operation/Contains.java | 8 +- .../apache/sis/geometries/operation/Distance.java | 6 +- .../geometries/operation/GeometryProcessor.java | 45 +- .../sis/geometries/operation/Intersection.java | 30 +- .../geometries/operation/SutherlandHodgman.java | 20 +- .../org/apache/sis/geometries/operation/To3D.java | 28 +- .../sis/geometries/operation/ToPrimitive.java | 2 +- .../apache/sis/geometries/operation/Transform.java | 6 +- .../operation/simplify/greedyinsert/Edge.java | 12 +- .../simplify/greedyinsert/TINBuilder.java | 44 +- .../simplify/greedyinsert/TinDistance.java | 12 +- .../operation/simplify/greedyinsert/WTriangle.java | 57 +- .../operation/spatialanalysis2d/ISOBand.java | 12 +- .../operation/triangulate/EarClipping.java | 52 +- .../operation/triangulate/delaunay/Delaunay.java | 8 +- .../triangulate/delaunay/OrientedEdge.java | 11 +- .../triangulate/delaunay/OrientedTriangle.java | 31 +- .../apache/sis/geometries/point/MultiPoint.java | 14 +- .../org/apache/sis/geometries/solid/Capsule.java | 177 ++++- .../org/apache/sis/geometries/solid/Cylinder.java | 173 ++++- .../org/apache/sis/geometries/solid/Ellipsoid.java | 373 ++++++++++ .../org/apache/sis/geometries/solid/Frustrum.java | 17 + .../apache/sis/geometries/solid/Polyhedron.java | 11 + .../org/apache/sis/geometries/solid/Sphere.java | 100 ++- .../solid/polyhedron/AbstractPolyhedron.java | 27 +- .../sis/geometries/surface/CurvePolygon.java | 11 + .../geometries/surface/ParametricCurveSurface.java | 2 + .../org/apache/sis/geometries/surface/Polygon.java | 11 + .../sis/geometries/surface/PolyhedralSurface.java | 17 + .../apache/sis/geometries/surface/PreparedTIN.java | 21 +- .../apache/sis/geometries/surface/Triangle.java | 30 +- .../main/org/apache/sis/gml/AbstractGMLWriter.java | 4 +- .../main/org/apache/sis/gml/GML2Reader.java | 16 +- .../main/org/apache/sis/gml/GML2Writer.java | 2 +- .../main/org/apache/sis/gml/GML3Reader.java | 62 +- .../main/org/apache/sis/gml/GML3Writer.java | 4 +- .../org/apache/sis/gml/PositionListBuilder.java | 4 +- .../main/org/apache/sis/maths/AbstractCursor.java | 4 +- .../main/org/apache/sis/maths/AbstractMatrix.java | 2 +- .../org/apache/sis/maths/AbstractSimilarity.java | 4 +- .../{AbstractTuple.java => AbstractVector.java} | 12 +- .../main/org/apache/sis/maths/Affine1D.java | 2 +- .../main/org/apache/sis/maths/Affine2D.java | 2 +- .../main/org/apache/sis/maths/Affine3D.java | 4 +- .../main/org/apache/sis/maths/Affine4D.java | 2 +- .../main/org/apache/sis/maths/Affines.java | 4 +- .../main/org/apache/sis/maths/Array.java | 36 +- .../org/apache/sis/maths/ArrayConcatenated.java | 8 +- .../main/org/apache/sis/maths/ArrayFactory.java | 30 +- .../main/org/apache/sis/maths/ArrayFactoryFFM.java | 36 +- .../main/org/apache/sis/maths/ArrayFactoryHAT.java | 16 +- .../org/apache/sis/maths/ArrayFactoryJava.java | 48 +- .../org/apache/sis/maths/ArraySpliterator.java | 6 +- .../org/apache/sis/maths/ArrayUnmodifiable.java | 6 +- .../main/org/apache/sis/maths/Cursor.java | 2 +- .../org/apache/sis/maths/CursorUnmodifiable.java | 10 +- .../main/org/apache/sis/maths/Maths.java | 30 +- .../main/org/apache/sis/maths/Matrices.java | 6 +- .../main/org/apache/sis/maths/Matrix2D.java | 2 +- .../main/org/apache/sis/maths/Matrix3D.java | 8 +- .../main/org/apache/sis/maths/Matrix4D.java | 10 +- .../main/org/apache/sis/maths/NDArray.java | 16 +- .../main/org/apache/sis/maths/NDArrays.java | 40 +- .../main/org/apache/sis/maths/Quaternion.java | 8 +- .../main/org/apache/sis/maths/Quaternions.java | 2 +- .../main/org/apache/sis/maths/ReadOnly.java | 19 +- .../main/org/apache/sis/maths/Similarity.java | 4 +- .../main/org/apache/sis/maths/Similarity3D.java | 4 +- .../main/org/apache/sis/maths/SimilarityND.java | 4 +- .../org/apache/sis/maths/SimplifiedTransform.java | 2 +- .../main/org/apache/sis/maths/Transform.java | 2 +- .../main/org/apache/sis/maths/Tuple.java | 176 ----- .../main/org/apache/sis/maths/Vector.java | 174 ++++- .../main/org/apache/sis/maths/Vector1D.java | 28 +- .../main/org/apache/sis/maths/Vector2D.java | 28 +- .../main/org/apache/sis/maths/Vector3D.java | 32 +- .../main/org/apache/sis/maths/Vector4D.java | 44 +- .../main/org/apache/sis/maths/VectorND.java | 20 +- ...leUnmodifiable.java => VectorUnmodifiable.java} | 24 +- .../main/org/apache/sis/maths/Vectors.java | 67 +- .../org/apache/sis/geometries/DataPointsTest.java | 42 -- .../test/org/apache/sis/geometries/EmptyTest.java | 80 +-- .../sis/geometries/GeometryCollectionTest.java | 82 +-- .../org/apache/sis/geometries/GeometryTest.java | 66 ++ .../sis/geometries/OrientedGeometryTest.java | 229 ------- .../test/org/apache/sis/geometries/PointTest.java | 113 +-- .../test/org/apache/sis/geometries/PrismTest.java | 82 +-- .../sis/geometries/adapter/ShapeAdapterTest.java | 26 +- .../sis/geometries/adapter/ShapeConverterTest.java | 14 +- .../geometries/adapter/WellKnownBinaryTest.java | 22 +- .../sis/geometries/adapter/WellKnownTextTest.java | 12 +- .../org/apache/sis/geometries/cs/BearingTest.java | 8 +- .../sis/geometries/curve/ArcByBulgeTest.java | 173 +---- .../sis/geometries/curve/ArcByCenterPointTest.java | 182 +---- .../org/apache/sis/geometries/curve/ArcTest.java | 18 +- .../sis/geometries/curve/BSplineCurveTest.java | 185 +---- .../apache/sis/geometries/curve/BezierTest.java | 6 +- .../apache/sis/geometries/curve/CircleTest.java | 6 +- .../sis/geometries/curve/CircularStringTest.java | 170 +---- .../apache/sis/geometries/curve/ClothoidTest.java | 9 +- .../sis/geometries/curve/CompoundCurveTest.java | 176 +---- .../org/apache/sis/geometries/curve/ConicTest.java | 167 +---- .../sis/geometries/curve/CubicSplineTest.java | 6 +- .../sis/geometries/curve/EllipticArcTest.java | 6 +- .../sis/geometries/curve/FunctionArcTest.java | 6 - .../apache/sis/geometries/curve/GeodesicTest.java | 173 +---- .../sis/geometries/curve/LineStringTest.java | 231 ++----- .../sis/geometries/curve/LinearRingTest.java | 66 +- .../sis/geometries/curve/MultiCurveTest.java | 15 +- .../sis/geometries/curve/MultiLineStringTest.java | 75 +- .../apache/sis/geometries/curve/NurbCurveTest.java | 36 +- .../sis/geometries/curve/OffsetCurveTest.java | 176 +---- .../sis/geometries/curve/PolynomialArcTest.java | 6 - .../sis/geometries/curve/PolynomialSplineTest.java | 194 +----- .../sis/geometries/curve/ProductCurveTest.java | 176 +---- .../sis/geometries/curve/RealFunctionTest.java | 12 - .../sis/geometries/curve/RealPolynomialTest.java | 18 - .../org/apache/sis/geometries/curve/RhumbTest.java | 176 +---- .../apache/sis/geometries/curve/SpiralTest.java | 176 +---- .../internal/shared/DefaultLineStringTest.java | 18 + .../internal/shared/DefaultLinearRingTest.java | 18 + .../shared/DefaultMultiLineStringTest.java | 23 + .../internal/shared/DefaultMultiPointTest.java | 18 + .../internal/shared/DefaultMultiPolygonTest.java | 23 + .../internal/shared/DefaultPolygonTest.java | 27 + .../internal/shared/DefaultRawMultiPointTest.java | 17 + .../internal/shared/DefaultReversedCurveTest.java | 164 +---- .../shared/DefaultReversedSurfaceTest.java | 122 ---- .../apache/sis/geometries/mesh/PrimitiveTest.java | 4 +- .../sis/geometries/mesh/PrimitiveVisitorTest.java | 1 - .../sis/geometries/operation/AbstractD9IMTest.java | 357 ++++++++++ .../sis/geometries/operation/BufferTest.java | 52 +- .../sis/geometries/operation/ContainsTest.java | 66 +- .../sis/geometries/operation/ConvexHullTest.java | 31 +- .../sis/geometries/operation/CrossesTest.java | 57 +- .../sis/geometries/operation/DifferenceTest.java | 41 +- .../sis/geometries/operation/DisjointTest.java | 41 +- .../sis/geometries/operation/DistanceTest.java | 80 ++- .../apache/sis/geometries/operation/EqualTest.java | 40 +- .../sis/geometries/operation/IntersectionTest.java | 46 +- .../sis/geometries/operation/IntersectsTest.java | 69 +- .../sis/geometries/operation/LocateAlongTest.java | 12 +- .../geometries/operation/LocateBetweenTest.java | 14 +- .../sis/geometries/operation/OverlapsTest.java | 52 +- .../sis/geometries/operation/RelateTest.java | 60 +- .../geometries/operation/SutherlandHogmanTest.java | 8 +- .../geometries/operation/SymDifferenceTest.java | 43 +- .../apache/sis/geometries/operation/TestData.java | 112 --- .../apache/sis/geometries/operation/To3DTest.java | 11 +- .../sis/geometries/operation/ToPrimitiveTest.java | 36 +- .../sis/geometries/operation/TouchesTest.java | 58 +- .../sis/geometries/operation/TransformTest.java | 13 +- .../apache/sis/geometries/operation/UnionTest.java | 41 +- .../geometries/operation/WithinDistanceTest.java | 51 +- .../sis/geometries/operation/WithinTest.java | 55 +- .../operation/spatialanalysis2d/IsoBandTest.java | 2 - .../sis/geometries/point/MultiPointTest.java | 87 ++- .../sis/geometries/point/PointCloudTest.java | 15 - .../sis/geometries/solid/BSplineSolidTest.java | 131 +--- .../sis/geometries/solid/MultiPolyhedronTest.java | 6 +- .../sis/geometries/solid/PolyhedronTest.java | 107 +-- .../sis/geometries/surface/BSplineSurfaceTest.java | 39 +- .../sis/geometries/surface/BilinearGridTest.java | 6 +- .../sis/geometries/surface/CurvePolygonTest.java | 140 +--- .../sis/geometries/surface/MultiPolygonTest.java | 91 ++- .../sis/geometries/surface/MultiSurfaceTest.java | 18 +- .../sis/geometries/surface/NurbSurfaceTest.java | 12 +- .../surface/ParametricCurveSurfaceTest.java | 146 +--- .../apache/sis/geometries/surface/PolygonTest.java | 217 +++--- .../geometries/surface/PolyhedralSurfaceTest.java | 137 +--- .../sis/geometries/surface/PreparedTINTest.java | 15 +- .../org/apache/sis/geometries/surface/TINTest.java | 9 +- .../sis/geometries/surface/TriangleTest.java | 42 +- .../test/org/apache/sis/gml/GML2ReaderTest.java | 40 +- .../test/org/apache/sis/gml/GML2WriterTest.java | 44 +- .../test/org/apache/sis/gml/GML3ReaderTest.java | 48 +- .../test/org/apache/sis/gml/GML3WriterTest.java | 60 +- .../test/org/apache/sis/gml/GMLWriterTest.java | 4 +- .../test/org/apache/sis/gml/GeometryAssert.java | 2 +- .../apache/sis/gml/JAXBGeometryAdapterTest.java | 8 +- .../org/apache/sis/maths/AbstractArrayTest.java | 7 +- .../org/apache/sis/maths/AbstractTupleTest.java | 260 ------- .../org/apache/sis/maths/AbstractVectorTest.java | 256 ++++++- .../test/org/apache/sis/maths/NDArraysTest.java | 6 +- .../test/org/apache/sis/maths/VectorXbTest.java | 2 +- .../test/org/apache/sis/maths/VectorXdTest.java | 2 +- .../test/org/apache/sis/maths/VectorXfTest.java | 2 +- .../test/org/apache/sis/maths/VectorXiTest.java | 2 +- .../test/org/apache/sis/maths/VectorXlTest.java | 2 +- .../test/org/apache/sis/maths/VectorXsTest.java | 2 +- .../test/org/apache/sis/maths/VectorXubTest.java | 2 +- .../test/org/apache/sis/maths/VectorXuiTest.java | 2 +- .../test/org/apache/sis/maths/VectorXusTest.java | 2 +- .../test/org/apache/sis/maths/VectorsTest.java | 4 +- .../storage/dggs/DiscreteGlobalGridSystems.java | 4 +- .../sis/referencing/dggs/AbstractDggrsTest.java | 4 +- .../main/module-info.java | 3 + .../storage/geopose/FrameSpecificationParser.java | 112 +++ .../org/apache/sis/storage/geopose/GeoPose.java | 112 +++ .../apache/sis/storage/geopose/GeoPoseMapper.java | 150 ++++ .../sis/storage/geopose/LocalTangentPlane.java | 149 ++++ .../sis/storage/geopose/binding/Advanced.java | 137 ++++ .../sis/storage/geopose/binding/BasicEuler.java | 165 +++++ .../storage/geopose/binding/BasicQuaternion.java | 112 +++ .../sis/storage/geopose/binding/BasicYPR.java | 111 +++ .../apache/sis/storage/geopose/binding/Chain.java | 138 ++++ .../sis/storage/geopose/binding/FrameAndTime.java | 109 +++ .../geopose/binding/FrameSpecification.java | 47 ++ .../geopose/binding/FrameTransformPair.java | 88 +++ .../apache/sis/storage/geopose/binding/Graph.java | 140 ++++ .../storage/geopose/binding/IrregularSeries.java | 162 +++++ .../sis/storage/geopose/binding/Position.java | 137 ++++ .../sis/storage/geopose/binding/Quaternion.java | 160 +++++ .../sis/storage/geopose/binding/RegularSeries.java | 188 +++++ .../sis/storage/geopose/binding/SeriesHeader.java | 182 +++++ .../sis/storage/geopose/binding/SeriesTrailer.java | 109 +++ .../geopose/binding/SpecificationReference.java | 130 ++++ .../apache/sis/storage/geopose/binding/Stream.java | 114 ++++ .../sis/storage/geopose/binding/StreamElement.java | 88 +++ .../sis/storage/geopose/binding/StreamHeader.java | 111 +++ .../storage/geopose/binding/TransitionModel.java} | 36 +- .../sis/storage/geopose/binding/YawPitchRoll.java | 138 ++++ .../sis/storage/geopose/binding/package-info.java | 44 ++ .../apache/sis/storage/geopose/package-info.java} | 25 +- .../apache/sis/storage/geopose/MappingTest.java | 188 +++++ .../sis/storage/geopose/binding/BindingTest.java | 182 +++++ .../sis/storage/geopose/binding/advanced.json | 14 + .../geopose/binding/advanced_no_validtime.json | 13 + .../sis/storage/geopose/binding/basic_euler.json | 6 + .../storage/geopose/binding/basic_quaternion.json | 13 + .../sis/storage/geopose/binding/basic_ypr.json | 12 + .../apache/sis/storage/geopose/binding/chain.json | 17 + .../apache/sis/storage/geopose/binding/graph.json | 21 + .../storage/geopose/binding/irregular_series.json | 36 + .../storage/geopose/binding/regular_series.json | 30 + .../apache/sis/storage/geopose/binding/stream.json | 24 + .../storage/geopose/binding/stream_element.json | 10 + netbeans-project/ivy.xml | 20 +- .../sis/gui/controls/FormatTableCellFactory.java | 117 ++++ .../sis/gui/coverage/ImagePropertyExplorer.java | 16 +- .../org/apache/sis/gui/internal/PropertyView.java | 44 +- .../sis/referencing/factory/sql/epsg/README.md | 4 +- settings.gradle.kts | 26 +- 433 files changed, 13548 insertions(+), 7259 deletions(-) diff --cc incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/internal/shared/DefaultBSplineSurface.java index d922b75a18,1d3cf43978..ba927cceaa --- 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 @@@ -189,8 -190,13 +190,13 @@@ public non-sealed class DefaultBSplineS throw new UnsupportedOperationException("Not supported yet."); } + @Override + public Geometry getBoundary() { + 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 e67dd7deda,d94593c97d..7123a01f19 --- 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 @@@ -173,8 -174,13 +174,12 @@@ public non-sealed class DefaultBilinear throw new UnsupportedOperationException("Not supported yet."); } - @Override + public Geometry getBoundary() { + 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/Ellipsoid.java index 0000000000,4ca477efb1..6b2fb7e853 mode 000000,100644..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/solid/Ellipsoid.java @@@ -1,0 -1,371 +1,373 @@@ + /* + * 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.solid; + + import java.util.Arrays; + import java.util.List; + import javax.measure.Quantity; + import static org.opengis.annotation.Specification.ISO_19107; + import org.opengis.annotation.UML; + import org.opengis.geometry.DirectPosition; + import org.opengis.geometry.Envelope; + import org.opengis.referencing.crs.CoordinateReferenceSystem; + import org.apache.sis.geometries.BBox; + import org.apache.sis.geometries.Curve; + import org.apache.sis.geometries.DataPoints; + import org.apache.sis.geometries.Geometries; + import org.apache.sis.geometries.Geometry; + import org.apache.sis.geometries.GeometryFactory; + import org.apache.sis.geometries.GeometryType; + import org.apache.sis.geometries.SurfaceInterpolation; + import org.apache.sis.geometries.DataPointsType; + import org.apache.sis.geometries.internal.shared.AbstractGeometry; + import org.apache.sis.geometries.surface.ParametricCurveSurface; + import org.apache.sis.maths.DataType; + import org.apache.sis.maths.NDArrays; + import org.apache.sis.maths.ReadOnly; + import org.apache.sis.maths.SampleSystem; + import org.apache.sis.util.ArgumentChecks; + ++// Specific to the geoapi-3.1 branch: ++import org.opengis.referencing.ReferenceIdentifier; ++ + // Specific to the geoapi-4.0 branch: -import org.opengis.metadata.Identifier; + import org.apache.sis.maths.Vector; + + + /** + * An ellipsoid geometry defined by a center and one semi-axis length per axis of the coordinate + * system. + * + * <p>As a conic surface, an ellipsoid is a parametric curve surface given as a family of ellipses + * whose positions vary along the axis of the ellipsoid. Its horizontal curves are therefore lines + * of constant latitude and its vertical curves lines of constant longitude.</p> + * + * <p>Constraints:</p> + * <ul> + * <li>The up-normal is the outward normal when the control points are ordered by increasing + * longitude and increasing latitude.</li> + * <li>There is one semi-axis per axis of the coordinate system, and each of them is positive.</li> + * </ul> + * + * <p>Note: this geometry is not the ellipsoid used as a geometric reference surface + * (ISO 19107:2019 - 6.2.3.4), which {@link org.opengis.referencing.datum.Ellipsoid} describes. + * That one is a property of the coordinate reference system; this one is a geometry expressed + * in such a system.</p> + * + * @author Johann Sorel (Geomatys) + */ + public final class Ellipsoid extends AbstractGeometry implements ParametricCurveSurface { + + /** + * Must contain one point: the center of the ellipsoid. + */ + private final DataPoints points; + + /** + * Length of the semi-axis along each axis of the coordinate system, + * in the units of that axis. There is one value per dimension. + */ + private final double[] semiAxes; + + /** + * @param dimension number of dimensions of the ellipsoid, must be positive. + */ + public Ellipsoid(int dimension) { + this(Geometries.getUndefinedCRS(dimension)); + } + + /** + * @param crs ellipsoid coordinate system, not null. + */ + public Ellipsoid(CoordinateReferenceSystem crs) { + points = GeometryFactory.DEFAULT.createDataPoints(NDArrays.of(SampleSystem.of(crs), DataType.DOUBLE, 1)); + semiAxes = unitSemiAxes(crs.getCoordinateSystem().getDimension()); + } + + /** + * @param dimension number of dimensions of the ellipsoid, must be positive. + * @param semiAxes length of the semi-axis along each axis, one value per dimension. + * Each of them must be positive. + */ + public Ellipsoid(int dimension, double... semiAxes) { + this(Geometries.getUndefinedCRS(dimension), semiAxes); + } + + /** + * @param crs ellipsoid coordinate system, not null. + * @param semiAxes length of the semi-axis along each axis, one value per dimension. + * Each of them must be positive. + */ + public Ellipsoid(CoordinateReferenceSystem crs, double... semiAxes) { + points = GeometryFactory.DEFAULT.createDataPoints(NDArrays.of(SampleSystem.of(crs), DataType.DOUBLE, 1)); + this.semiAxes = checkedSemiAxes(crs.getCoordinateSystem().getDimension(), semiAxes); + } + + /** + * Creates an ellipsoid centered on the single position of the given sequence. The sequence is + * taken as-is, so the caller may give the ellipsoid the attributes carried by that sequence. + * + * @param points the center of the ellipsoid. + * @throws IllegalArgumentException if the given sequence does not hold exactly one position. + */ + public Ellipsoid(DataPoints points) { + this.points = checkedPoints(points); + semiAxes = unitSemiAxes(points.getDimension()); + } + + /** + * Creates an ellipsoid of the given semi-axes centered on the single position of the given + * sequence. + * + * @param points the center of the ellipsoid. + * @param semiAxes length of the semi-axis along each axis, one value per dimension. + * Each of them must be positive. + * @throws IllegalArgumentException if the given sequence does not hold exactly one position, + * or if the number of semi-axes is not the number of dimensions. + */ + public Ellipsoid(DataPoints points, double... semiAxes) { + this.points = checkedPoints(points); + this.semiAxes = checkedSemiAxes(points.getDimension(), semiAxes); + } + + /** + * Returns the given sequence if it holds the single position an ellipsoid is centered on. + */ + private static DataPoints checkedPoints(final DataPoints points) { + if (points.size() != 1) { + throw new IllegalArgumentException("Ellipsoid sequence must contain one point"); + } + return points; + } + + /** + * Returns the semi-axes of an ellipsoid of the given number of dimensions which is a unit sphere. + */ + private static double[] unitSemiAxes(final int dimension) { + final var lengths = new double[dimension]; + Arrays.fill(lengths, 1.0); + return lengths; + } + + /** + * Returns a copy of the given semi-axes after verifying that there is one of them per dimension + * and that all of them are positive. + */ + private static double[] checkedSemiAxes(final int dimension, final double[] semiAxes) { + ensureValidSemiAxes(dimension, semiAxes); + return semiAxes.clone(); + } + + /** + * Verifies that there is one semi-axis per dimension and that all of them are positive. + */ + private static void ensureValidSemiAxes(final int dimension, final double[] semiAxes) { + if (semiAxes.length != dimension) { + throw new IllegalArgumentException("Ellipsoid must have one semi-axis per dimension, expected " + + dimension + " but found " + semiAxes.length); + } + for (int i=0; i<semiAxes.length; i++) { + ArgumentChecks.ensurePositive("semiAxes[" + i + ']', semiAxes[i]); + } + } + + @Override + public GeometryType getGeometryType() { + return GeometryType.ELLIPSOID; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Quantity<?> getArea() { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public void setCoordinateReferenceSystem(CoordinateReferenceSystem cs) throws IllegalArgumentException { + if (cs.getCoordinateSystem().getDimension() != getCoordinateReferenceSystem().getCoordinateSystem().getDimension()) { + throw new IllegalArgumentException("New CRS dimension must be the same as previous CRS"); + } + points.setCoordinateReferenceSystem(cs); + } + + @Override + public CoordinateReferenceSystem getCoordinateReferenceSystem() { + return points.getCoordinateReferenceSystem(); + } + + @Override + public DataPointsType getDataPointsType() { + return points.getType(); + } + + /** + * Returns {@link SurfaceInterpolation#ELLIPTICAL}: this surface is a section of an ellipsoid. + * + * @see ISO 19107:2019 - 8.5.2 + */ + @UML(identifier="interpolation", specification=ISO_19107) + @Override + public List<SurfaceInterpolation> getInterpolation() { + return List.of(SurfaceInterpolation.ELLIPTICAL); + } + + /** + * Returns a copy of the semi-axis lengths, one per axis of the coordinate system. + * Writing in the returned array does not reshape this ellipsoid; + * use {@link #setSemiAxes(double...)} for that. + * + * @return length of the semi-axis along each axis. + */ + public double[] getSemiAxes() { + return semiAxes.clone(); + } + + /** + * @param dimension index of the axis along which to measure the semi-axis. + * @return length of the semi-axis along the given axis. + */ + public double getSemiAxis(int dimension) { + return semiAxes[dimension]; + } + + /** + * @param semiAxes new semi-axis lengths, one per dimension. Each of them must be positive. + * @throws IllegalArgumentException if the number of semi-axes is not the number of dimensions. + */ + public void setSemiAxes(double... semiAxes) { + ensureValidSemiAxes(this.semiAxes.length, semiAxes); + System.arraycopy(semiAxes, 0, this.semiAxes, 0, this.semiAxes.length); + } + + /** + * @param dimension index of the axis along which to set the semi-axis. + * @param length new semi-axis length, must be positive. + */ + public void setSemiAxis(int dimension, double length) { + ArgumentChecks.ensurePositive("length", length); + semiAxes[dimension] = length; + } + + /** + * Returns a copy of the ellipsoid center. Writing in the returned tuple does not move this + * ellipsoid; use {@link #setCenter(Tuple)} for that. + * + * @return ellipsoid center. + */ + public ReadOnly.Vector<?> getCenter() { + return points.getPosition(0); + } + + /** + * @param position new center of the ellipsoid + */ + public void setCenter(ReadOnly.Vector<?> position) { + points.setPosition(0, position); + } + + /** + * {@inheritDoc } + * + * <p>An ellipsoid reaches its semi-axis away from its center on each axis, so the smallest box + * containing it is the box of that extent around the center.</p> + */ + @Override + public Envelope getEnvelope() { + final Vector<?> center = getCenter().copy(); + final BBox env = new BBox(center, center); + env.setCoordinateReferenceSystem(getCoordinateReferenceSystem()); + for (int i = 0, n = getDimension(); i < n; i++) { + final double c = center.get(i); + final double a = semiAxes[i]; + if (a > 0) { + env.setRange(i, c-a, c+a); + } + } + return env; + } + + @Override + public Geometry getBoundary() { + throw new UnsupportedOperationException("Not supported yet."); + } + + // methods from ParametricCurveSurface + + @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 GeometryType getHorizontalCurveType() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public GeometryType getVerticalCurveType() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public List<double[]> getKnots() { + 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."); + } + + /** + * Returns the center of this ellipsoid, as a sequence of one position. An ellipsoid is defined + * by that position and by its semi-axes, so the center is the only position it holds. + */ + @Override + public DataPoints getDataPoints() { + return points; + } + + } diff --cc incubator/src/org.apache.sis.geometry/main/org/apache/sis/geometries/solid/Sphere.java index 1878706f22,ab2c8b1405..c8228bc3f6 --- 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 @@@ -30,15 -32,17 +32,19 @@@ import org.apache.sis.geometries.Geomet import org.apache.sis.geometries.GeometryType; import org.apache.sis.geometries.SurfaceInterpolation; import org.apache.sis.geometries.DataPointsType; -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.geometries.internal.shared.AbstractGeometry; - import org.apache.sis.util.ArgumentChecks; + +// Specific to the geoapi-3.1 branch: +import org.opengis.referencing.ReferenceIdentifier; + import org.apache.sis.maths.DataType; + import org.apache.sis.maths.NDArrays; + import org.apache.sis.maths.ReadOnly; + import org.apache.sis.maths.SampleSystem; + import org.apache.sis.util.ArgumentChecks; + + // Specific to the geoapi-4.0 branch: -import org.opengis.metadata.Identifier; + import org.apache.sis.maths.Vector; /** diff --cc optional/src/org.apache.sis.referencing.epsg/test/org/apache/sis/referencing/factory/sql/epsg/README.md index e16bf940fd,cebac96f65..8aad462fac --- a/optional/src/org.apache.sis.referencing.epsg/test/org/apache/sis/referencing/factory/sql/epsg/README.md +++ b/optional/src/org.apache.sis.referencing.epsg/test/org/apache/sis/referencing/factory/sql/epsg/README.md @@@ -67,10 -67,10 +67,10 @@@ export NON_FREE_DIR=$PW cd _<path to SIS project directory>_ gradle clean test jar export CLASSPATH=~/.m2/repository/org/hsqldb/hsqldb/2.7.4/hsqldb-2.7.4.jar - export CLASSPATH=~/.m2/repository/org/postgresql/postgresql/42.7.7/postgresql-42.7.7.jar:$CLASSPATH + export CLASSPATH=~/.m2/repository/org/postgresql/postgresql/42.7.9/postgresql-42.7.9.jar:$CLASSPATH export CLASSPATH=~/.m2/repository/javax/measure/unit-api/2.1.3/unit-api-2.1.3.jar:$CLASSPATH - export CLASSPATH=~/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/4.0.4/jakarta.xml.bind-api-4.0.4.jar:$CLASSPATH + export CLASSPATH=~/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/4.0.5/jakarta.xml.bind-api-4.0.5.jar:$CLASSPATH -export CLASSPATH=$PWD/geoapi/snapshot/geoapi/target/geoapi-4.0-SNAPSHOT.jar:$CLASSPATH +export CLASSPATH=$PWD/geoapi/snapshot/geoapi/target/geoapi-3.1-SNAPSHOT.jar:$CLASSPATH export CLASSPATH=$PWD/endorsed/build/libs/org.apache.sis.referencing.jar:$CLASSPATH export CLASSPATH=$PWD/endorsed/build/libs/org.apache.sis.metadata.jar:$CLASSPATH export CLASSPATH=$PWD/endorsed/build/libs/org.apache.sis.util.jar:$CLASSPATH
