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

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

commit 942e7331a83bb73a5a314de14967d951ed29884a
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Thu Dec 9 00:07:29 2021 +0100

    Require CRS dimension to be strictly equal to JTS geometry dimension.
    This is made possible by configuring `WKTReader` for constructing 2D
    geometries when there is no explicit Z or M.
---
 .../apache/sis/internal/feature/jts/Factory.java   |  4 +++-
 .../apache/sis/internal/feature/jts/Wrapper.java   |  6 +----
 .../apache/sis/internal/feature/jts/JTSTest.java   | 26 +++++++---------------
 3 files changed, 12 insertions(+), 24 deletions(-)

diff --git 
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Factory.java
 
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Factory.java
index d9bc10c..f5721cb 100644
--- 
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Factory.java
+++ 
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Factory.java
@@ -360,7 +360,9 @@ public final class Factory extends Geometries<Geometry> {
     @Override
     public GeometryWrapper<Geometry> parseWKT(final String wkt) throws 
ParseException {
         // WKTReader(GeometryFactory) constructor is cheap.
-        return new Wrapper(new WKTReader(factory).read(wkt));
+        final WKTReader reader = new WKTReader(factory);
+        reader.setIsOldJtsCoordinateSyntaxAllowed(false);
+        return new Wrapper(reader.read(wkt));
     }
 
     /**
diff --git 
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Wrapper.java
 
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Wrapper.java
index 47721db..e49357f 100644
--- 
a/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Wrapper.java
+++ 
b/core/sis-feature/src/main/java/org/apache/sis/internal/feature/jts/Wrapper.java
@@ -151,11 +151,7 @@ final class Wrapper extends GeometryWrapper<Geometry> {
      */
     @Override
     public void setCoordinateReferenceSystem(final CoordinateReferenceSystem 
crs) {
-        final int dimension = ReferencingUtilities.getDimension(crs);
-        if (dimension != Factory.BIDIMENSIONAL) {
-            // The check for 2-dimensional case is for backward compatibility. 
May be temporary.
-            ArgumentChecks.ensureDimensionMatches("crs", 
getCoordinatesDimension(geometry), crs);
-        }
+        ArgumentChecks.ensureDimensionMatches("crs", 
getCoordinatesDimension(geometry), crs);
         JTS.setCoordinateReferenceSystem(geometry, crs);
     }
 
diff --git 
a/core/sis-feature/src/test/java/org/apache/sis/internal/feature/jts/JTSTest.java
 
b/core/sis-feature/src/test/java/org/apache/sis/internal/feature/jts/JTSTest.java
index 0e20243..6e37b5c 100644
--- 
a/core/sis-feature/src/test/java/org/apache/sis/internal/feature/jts/JTSTest.java
+++ 
b/core/sis-feature/src/test/java/org/apache/sis/internal/feature/jts/JTSTest.java
@@ -96,12 +96,16 @@ public final strictfp class JTSTest extends TestCase {
 
         {   /*
              * Test setting a 2D CRS on a 3 dimensional geometry.
-             * This case is tolerated for backward compatibility.
              */
             final Geometry geometry = factory.createPoint(new Coordinate(5, 6, 
7));
             final GeometryWrapper<?> wrapper = Geometries.wrap(geometry).get();
-            wrapper.setCoordinateReferenceSystem(crs2D);
-            assertEquals(crs2D, wrapper.getCoordinateReferenceSystem());
+            try {
+                wrapper.setCoordinateReferenceSystem(crs2D);
+                fail("Setting a 2D CRS on a 3D geometry must fail.");
+            } catch (MismatchedDimensionException ex) {
+                assertTrue(ex.getMessage().contains("crs"));
+                // ok
+            }
         }
 
         {   /*
@@ -120,7 +124,7 @@ public final strictfp class JTSTest extends TestCase {
             final GeometryWrapper<?> wrapper = Geometries.wrap(geometry).get();
             try {
                 wrapper.setCoordinateReferenceSystem(crs3D);
-                fail("Setting a 3D crs on a 2D geometry must fail.");
+                fail("Setting a 3D CRS on a 2D geometry must fail.");
             } catch (MismatchedDimensionException ex) {
                 assertTrue(ex.getMessage().contains("crs"));
                 // ok
@@ -149,20 +153,6 @@ public final strictfp class JTSTest extends TestCase {
         }
 
         {   /*
-             * Test 2D Envelope on a 3 dimensional geometry.
-             * This case is tolerated for backward compatibility.
-             */
-            final CoordinateReferenceSystem crs = CommonCRS.WGS84.geographic();
-            final Geometry geometry = factory.createPoint(new Coordinate(5, 6, 
7));
-            final GeometryWrapper<?> wrapper = Geometries.wrap(geometry).get();
-            wrapper.setCoordinateReferenceSystem(crs);
-            final GeneralEnvelope envelope = wrapper.getEnvelope();
-            assertEquals(crs, envelope.getCoordinateReferenceSystem());
-            assertArrayEquals(new double[] {5, 6}, 
envelope.getLowerCorner().getCoordinate(), STRICT);
-            assertArrayEquals(new double[] {5, 6}, 
envelope.getUpperCorner().getCoordinate(), STRICT);
-        }
-
-        {   /*
              * Test 3D Envelope on a 3 dimensional geometry.
              *
              * TODO: JTS does not set the Z values for geometry internal 
envelope.

Reply via email to