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.