Author: desruisseaux
Date: Sat Apr 14 12:54:01 2018
New Revision: 1829137
URL: http://svn.apache.org/viewvc?rev=1829137&view=rev
Log:
Complete the geometry factory backed by JTS and add tests.
Added:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
(with props)
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
(with props)
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
(with props)
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
(with props)
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Geometries.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/test/suite/FeatureTestSuite.java
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -23,6 +23,8 @@ import com.esri.core.geometry.MultiPath;
import com.esri.core.geometry.Polyline;
import com.esri.core.geometry.Polygon;
import com.esri.core.geometry.Point;
+import com.esri.core.geometry.Point2D;
+import com.esri.core.geometry.Point3D;
import com.esri.core.geometry.WktImportFlags;
import com.esri.core.geometry.OperatorImportFromWkt;
import org.apache.sis.geometry.GeneralEnvelope;
@@ -37,7 +39,7 @@ import org.apache.sis.util.Classes;
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.7
* @module
*/
@@ -50,7 +52,7 @@ final class ESRI extends Geometries<Geom
}
/**
- * If the given object is an ESRI geometry, returns a short string
representation the class name.
+ * If the given object is an ESRI geometry, returns a short string
representation of the class name.
*/
@Override
final String tryGetLabel(Object geometry) {
@@ -99,6 +101,12 @@ final class ESRI extends Geometries<Geom
coord[1] = pt.getY();
coord[0] = pt.getX();
return coord;
+ } else if (point instanceof Point2D) {
+ final Point2D pt = (Point2D) point;
+ return new double[] {pt.x, pt.y};
+ } else if (point instanceof Point3D) {
+ final Point3D pt = (Point3D) point;
+ return new double[] {pt.x, pt.y, pt.z};
}
return null;
}
@@ -107,7 +115,8 @@ final class ESRI extends Geometries<Geom
* Creates a two-dimensional point from the given coordinate.
*/
@Override
- public Object createPoint(double x, double y) {
+ public Object createPoint(final double x, final double y) {
+ // Need to explicitely set z to NaN because default value is 0.
return new Point(x, y, Double.NaN);
}
@@ -158,15 +167,18 @@ final class ESRI extends Geometries<Geom
for (;; next = polylines.next()) {
if (next != null) {
if (next instanceof Point) {
- final double x = ((Point) next).getX();
- final double y = ((Point) next).getY();
- if (Double.isNaN(x) || Double.isNaN(y)) {
+ final Point pt = (Point) next;
+ if (pt.isEmpty()) {
lineTo = false;
- } else if (lineTo) {
- path.lineTo(x, y);
} else {
- path.startPath(x, y);
- lineTo = true;
+ final double x = ((Point) next).getX();
+ final double y = ((Point) next).getY();
+ if (lineTo) {
+ path.lineTo(x, y);
+ } else {
+ path.startPath(x, y);
+ lineTo = true;
+ }
}
} else {
path.add((MultiPath) next, false);
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Geometries.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Geometries.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Geometries.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Geometries.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -37,7 +37,7 @@ import org.apache.sis.math.Vector;
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.7
* @module
*/
@@ -195,7 +195,7 @@ public abstract class Geometries<G> {
/**
* If the given geometry is the type supported by this {@code Geometries}
instance,
- * returns a short string representation the class name. Otherwise returns
{@code null}.
+ * returns a short string representation of the class name. Otherwise
returns {@code null}.
*/
abstract String tryGetLabel(Object geometry);
@@ -288,8 +288,9 @@ public abstract class Geometries<G> {
*
* @param wkt the WKT to parse.
* @return the geometry object for the given WKT.
+ * @throws Exception if the WKT can not be parsed. The exception sub-class
depends on the implementation.
*/
- public abstract Object parseWKT(String wkt);
+ public abstract Object parseWKT(String wkt) throws Exception;
/**
* Returns an error message for an unsupported geometry object.
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -16,12 +16,20 @@
*/
package org.apache.sis.internal.feature;
+import java.util.List;
+import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Iterator;
+import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
-import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.MultiLineString;
import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.io.WKTReader;
+import org.locationtech.jts.io.ParseException;
import org.apache.sis.geometry.GeneralEnvelope;
import org.apache.sis.setup.GeometryLibrary;
import org.apache.sis.math.Vector;
@@ -41,14 +49,21 @@ import org.apache.sis.util.Classes;
*/
final class JTS extends Geometries<Geometry> {
/**
+ * The factory to use for creating JTS geometries. Currently set to a
factory using
+ * double-precision floating point numbers and a spatial-reference ID of 0.
+ */
+ private final GeometryFactory factory;
+
+ /**
* Creates the singleton instance.
*/
- JTS() throws ClassNotFoundException, NoSuchMethodException {
+ JTS() {
super(GeometryLibrary.JTS, Geometry.class, Point.class,
LineString.class, Polygon.class);
+ factory = new GeometryFactory(); // Default to double
precision and SRID of 0.
}
/**
- * If the given object is a JTS geometry, returns a short string
representation the class name.
+ * If the given object is a JTS geometry, returns a short string
representation of the class name.
*/
@Override
final String tryGetLabel(Object geometry) {
@@ -83,15 +98,33 @@ final class JTS extends Geometries<Geome
*/
@Override
final double[] tryGetCoordinate(final Object point) {
- return null; // TODO - see class javadoc
+ final Coordinate pt;
+ if (point instanceof Point) {
+ pt = ((Point) point).getCoordinate();
+ } else if (point instanceof Coordinate) {
+ pt = (Coordinate) point;
+ } else {
+ return null;
+ }
+ final double z = pt.z;
+ final double[] coord;
+ if (Double.isNaN(z)) {
+ coord = new double[2];
+ } else {
+ coord = new double[3];
+ coord[2] = z;
+ }
+ coord[1] = pt.y;
+ coord[0] = pt.x;
+ return coord;
}
/**
* Creates a two-dimensional point from the given coordinate.
*/
@Override
- public Object createPoint(double x, double y) {
- throw unsupported(2); // TODO - see class javadoc
+ public Object createPoint(final double x, final double y) {
+ return factory.createPoint(new Coordinate(x, y));
}
/**
@@ -101,8 +134,67 @@ final class JTS extends Geometries<Geome
*/
@Override
public Geometry createPolyline(final int dimension, final Vector...
ordinates) {
- // TODO - see class javadoc
- throw unsupported(dimension);
+ final boolean is3D = (dimension == 3);
+ if (!is3D && dimension != 2) {
+ throw unsupported(dimension);
+ }
+ final List<Coordinate> coordinates = new ArrayList<>(32);
+ final List<LineString> lines = new ArrayList<>();
+ for (final Vector v : ordinates) {
+ if (v != null) {
+ final int size = v.size();
+ for (int i=0; i<size;) {
+ final double x = v.doubleValue(i++);
+ final double y = v.doubleValue(i++);
+ if (!Double.isNaN(x) && !Double.isNaN(y)) {
+ final Coordinate c;
+ if (is3D) {
+ c = new Coordinate(x, y, v.doubleValue(i++));
+ } else {
+ c = new Coordinate(x, y);
+ }
+ coordinates.add(c);
+ } else {
+ if (is3D) i++;
+ toLineString(coordinates, lines);
+ coordinates.clear();
+ }
+ }
+ }
+ }
+ toLineString(coordinates, lines);
+ return toGeometry(lines);
+ }
+
+ /**
+ * Makes a line string or linear ring from the given coordinates, and add
the line string to the given list.
+ * If the given coordinates array is empty, then this method does nothing.
+ * This method does not modify the given coordinates list.
+ */
+ private void toLineString(final List<Coordinate> coordinates, final
List<LineString> addTo) {
+ final int s = coordinates.size();
+ if (s >= 2) {
+ final LineString line;
+ final Coordinate[] ca = coordinates.toArray(new Coordinate[s]);
+ if (ca[0].equals2D(ca[s-1])) {
+ line = factory.createLinearRing(ca); // Throws an
exception if s < 4.
+ } else {
+ line = factory.createLineString(ca); // Throws an
exception if contains duplicated point.
+ }
+ addTo.add(line);
+ }
+ }
+
+ /**
+ * Returns the given list of line string as a single geometry.
+ */
+ private Geometry toGeometry(final List<LineString> lines) {
+ final int s = lines.size();
+ switch (s) {
+ case 0: return factory.createLinearRing((Coordinate[]) null);
// Creates an empty linear ring.
+ case 1: return lines.get(0);
+ default: return factory.createMultiLineString(lines.toArray(new
LineString[s]));
+ }
}
/**
@@ -111,15 +203,50 @@ final class JTS extends Geometries<Geome
* @throws ClassCastException if an element in the iterator is not a JTS
geometry.
*/
@Override
- final Geometry tryMergePolylines(final Object first, final Iterator<?>
polylines) {
- throw unsupported(2); // TODO - see class javadoc
+ final Geometry tryMergePolylines(Object next, final Iterator<?> polylines)
{
+ if (!(next instanceof MultiLineString || next instanceof LineString ||
next instanceof Point)) {
+ return null;
+ }
+ final List<Coordinate> coordinates = new ArrayList<>();
+ final List<LineString> lines = new ArrayList<>();
+ for (;; next = polylines.next()) {
+ if (next != null) {
+ if (next instanceof Point) {
+ final Coordinate pt = ((Point) next).getCoordinate();
+ if (!Double.isNaN(pt.x) && !Double.isNaN(pt.y)) {
+ coordinates.add(pt);
+ } else {
+ toLineString(coordinates, lines);
+ coordinates.clear();
+ }
+ } else {
+ final Geometry g = (Geometry) next;
+ final int n = g.getNumGeometries();
+ for (int i=0; i<n; i++) {
+ final LineString ls = (LineString) g.getGeometryN(i);
+ if (coordinates.isEmpty()) {
+ lines.add(ls);
+ } else {
+
coordinates.addAll(Arrays.asList(ls.getCoordinates()));
+ toLineString(coordinates, lines);
+ coordinates.clear();
+ }
+ }
+ }
+ }
+ if (!polylines.hasNext()) { // Should be part of the 'for'
instruction, but we need
+ break; // to skip this condition
during the first iteration.
+ }
+ }
+ toLineString(coordinates, lines);
+ return toGeometry(lines);
}
/**
* Parses the given WKT.
*/
@Override
- public Object parseWKT(final String wkt) {
- throw unsupported(2);
+ public Object parseWKT(final String wkt) throws ParseException {
+ return new WKTReader(factory).read(wkt);
}
}
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -48,7 +48,7 @@ final class Java2D extends Geometries<Sh
}
/**
- * If the given geometry is a Java2D geometry, returns a short string
representation the class name,
+ * If the given geometry is a Java2D geometry, returns a short string
representation of the class name,
* ignoring the primitive type specialization. For example if the class is
{@code Rectangle2D.Float},
* then this method returns {@code "Rectangle2D"}.
*/
Added:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java?rev=1829137&view=auto
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
(added)
+++
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -0,0 +1,62 @@
+/*
+ * 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.internal.feature;
+
+import com.esri.core.geometry.Polyline;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Tests {@link ESRI} implementation.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public final strictfp class ESRITest extends GeometriesTestCase {
+ /**
+ * Creates a new test case.
+ */
+ public ESRITest() {
+ super(new ESRI());
+ }
+
+ /**
+ * Tests {@link ESRI#createPolyline(int, Vector...)}.
+ */
+ @Test
+ @Override
+ public void testCreatePolyline() {
+ super.testCreatePolyline();
+ final Polyline poly = (Polyline) geometry;
+ assertEquals("pathCount", 2, poly.getPathCount());
+ }
+
+ /**
+ * Tests {@link Geometries#tryMergePolylines(Object, Iterator)}.
+ */
+ @Test
+ @Override
+ public void testTryMergePolylines() {
+ super.testTryMergePolylines();
+ final Polyline poly = (Polyline) geometry;
+ assertEquals("pathCount", 3, poly.getPathCount());
+ }
+}
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/ESRITest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Added:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java?rev=1829137&view=auto
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
(added)
+++
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -0,0 +1,122 @@
+/*
+ * 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.internal.feature;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import org.apache.sis.math.Vector;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static java.lang.Double.NaN;
+import static org.junit.Assert.*;
+
+
+/**
+ * Base class of {@link Java2D}, {@link ESRI} and {@link JTS} implementation
tests.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public abstract strictfp class GeometriesTestCase extends TestCase {
+ /**
+ * The factory to test.
+ */
+ private final Geometries<?> factory;
+
+ /**
+ * The geometry created by the test. Provided for allowing sub-classes to
perform additional verifications.
+ */
+ Object geometry;
+
+ /**
+ * Creates a new test for the given factory.
+ */
+ GeometriesTestCase(final Geometries<?> factory) {
+ this.factory = factory;
+ }
+
+ /**
+ * Tests {@link Geometries#createPoint(double, double)} followed by {@link
Geometries#tryGetCoordinate(Object)}.
+ */
+ @Test
+ public void testTryGetCoordinate() {
+ geometry = factory.createPoint(4, 5);
+ assertNotNull("createPoint", geometry);
+ assertArrayEquals("tryGetCoordinate", new double[] {4, 5},
factory.tryGetCoordinate(geometry), STRICT);
+ }
+
+ /**
+ * Tests {@link Geometries#createPolyline(int, Vector...)}.
+ * This method verifies the polylines by a call to {@link
Geometries#tryGetEnvelope(Object)}.
+ * Subclasses should perform more extensive tests by verifying the {@link
#geometry} field.
+ */
+ @Test
+ public void testCreatePolyline() {
+ geometry = factory.createPolyline(2, Vector.create(new double[] {
+ 4, 5,
+ 7, 9,
+ 9, 3,
+ 4, 5,
+ NaN, NaN,
+ -3, -2,
+ -2, -5,
+ -1, -6}, false));
+
+ final GeneralEnvelope env = factory.tryGetEnvelope(geometry);
+ assertEquals("xmin", -3, env.getLower(0), STRICT);
+ assertEquals("ymin", -6, env.getLower(1), STRICT);
+ assertEquals("xmax", 9, env.getUpper(0), STRICT);
+ assertEquals("ymax", 9, env.getUpper(1), STRICT);
+ }
+
+ /**
+ * Tests {@link Geometries#tryMergePolylines(Object, Iterator)}.
+ * This method verifies the polylines by a call to {@link
Geometries#tryGetEnvelope(Object)}.
+ * Subclasses should perform more extensive tests by verifying the {@link
#geometry} field.
+ */
+ @Test
+ public void testTryMergePolylines() {
+ final Iterator<Object> c1 = Arrays.asList(
+ factory.createPoint( 4, 5),
+ factory.createPoint( 7, 9),
+ factory.createPoint( 9, 3),
+ factory.createPoint( 4, 5),
+ factory.createPoint(NaN, NaN),
+ factory.createPoint( -3, -2),
+ factory.createPoint( -2, -5),
+ factory.createPoint( -1, -6)).iterator();
+
+ final Iterator<Object> c2 = Arrays.asList(
+ factory.createPoint( 14, 12),
+ factory.createPoint( 15, 11),
+ factory.createPoint( 13, 10)).iterator();
+
+ final Object g1 = factory.tryMergePolylines(c1.next(), c1);
+ final Object g2 = factory.tryMergePolylines(c2.next(), c2);
+ geometry = factory.tryMergePolylines(g1,
Arrays.asList(factory.createPoint(13, 11), g2).iterator());
+
+ final GeneralEnvelope env = factory.tryGetEnvelope(geometry);
+ assertEquals("xmin", -3, env.getLower(0), STRICT);
+ assertEquals("ymin", -6, env.getLower(1), STRICT);
+ assertEquals("xmax", 15, env.getUpper(0), STRICT);
+ assertEquals("ymax", 12, env.getUpper(1), STRICT);
+ }
+}
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/GeometriesTestCase.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Added:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java?rev=1829137&view=auto
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
(added)
+++
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -0,0 +1,87 @@
+/*
+ * 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.internal.feature;
+
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.MultiLineString;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Tests {@link JTS} implementation.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public final strictfp class JTSTest extends GeometriesTestCase {
+ /**
+ * Creates a new test case.
+ */
+ public JTSTest() {
+ super(new JTS());
+ }
+
+ /**
+ * Tests {@link JTS#createPolyline(int, Vector...)}.
+ */
+ @Test
+ @Override
+ public void testCreatePolyline() {
+ super.testCreatePolyline();
+ final MultiLineString mp = (MultiLineString) geometry;
+ assertEquals("numGeometries", 2, mp.getNumGeometries());
+ verifyTwoFirstGeometries(mp);
+ }
+
+ /**
+ * Verifies the coordinates of the two first geometries of the given multi
line string.
+ * If there is more than 2 geometries, it is caller responsibility to
verify the other ones.
+ */
+ private static void verifyTwoFirstGeometries(final MultiLineString mp) {
+ assertArrayEquals(new Coordinate[] {
+ new Coordinate(4, 5),
+ new Coordinate(7, 9),
+ new Coordinate(9, 3),
+ new Coordinate(4, 5)}, mp.getGeometryN(0).getCoordinates());
+
+ assertArrayEquals(new Coordinate[] {
+ new Coordinate(-3, -2),
+ new Coordinate(-2, -5),
+ new Coordinate(-1, -6)}, mp.getGeometryN(1).getCoordinates());
+ }
+
+ /**
+ * Tests {@link Geometries#tryMergePolylines(Object, Iterator)}.
+ */
+ @Test
+ @Override
+ public void testTryMergePolylines() {
+ super.testTryMergePolylines();
+ final MultiLineString mp = (MultiLineString) geometry;
+ assertEquals("numGeometries", 3, mp.getNumGeometries());
+ verifyTwoFirstGeometries(mp);
+ assertArrayEquals(new Coordinate[] {
+ new Coordinate(13, 11),
+ new Coordinate(14, 12),
+ new Coordinate(15, 11),
+ new Coordinate(13, 10)}, mp.getGeometryN(2).getCoordinates());
+ }
+}
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/JTSTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Added:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java?rev=1829137&view=auto
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
(added)
+++
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -0,0 +1,60 @@
+/*
+ * 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.internal.feature;
+
+import java.awt.geom.Path2D;
+import org.junit.Test;
+
+import static org.opengis.test.Assert.*;
+
+
+/**
+ * Tests {@link Java2D} implementation.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public final strictfp class Java2DTest extends GeometriesTestCase {
+ /**
+ * Creates a new test case.
+ */
+ public Java2DTest() {
+ super(new Java2D());
+ }
+
+ /**
+ * Tests {@link Java2D#createPolyline(int, Vector...)}.
+ */
+ @Test
+ @Override
+ public void testCreatePolyline() {
+ super.testCreatePolyline();
+ assertInstanceOf("geometry", Path2D.class, geometry);
+ }
+
+ /**
+ * Tests {@link Geometries#tryMergePolylines(Object, Iterator)}.
+ */
+ @Test
+ @Override
+ public void testTryMergePolylines() {
+ super.testTryMergePolylines();
+ assertInstanceOf("geometry", Path2D.class, geometry);
+ }
+}
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/internal/feature/Java2DTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Modified:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/test/suite/FeatureTestSuite.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/test/suite/FeatureTestSuite.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/test/suite/FeatureTestSuite.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/test/suite/FeatureTestSuite.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -26,7 +26,7 @@ import org.junit.BeforeClass;
*
* @author Martin Desruisseaux (Geomatys)
* @author Johann Sorel (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.5
* @module
*/
@@ -52,6 +52,9 @@ import org.junit.BeforeClass;
org.apache.sis.filter.DefaultLiteralTest.class,
org.apache.sis.filter.DefaultPropertyNameTest.class,
org.apache.sis.internal.feature.AttributeConventionTest.class,
+ org.apache.sis.internal.feature.Java2DTest.class,
+ org.apache.sis.internal.feature.ESRITest.class,
+ org.apache.sis.internal.feature.JTSTest.class,
org.apache.sis.feature.builder.CharacteristicTypeBuilderTest.class,
org.apache.sis.feature.builder.AttributeTypeBuilderTest.class,
org.apache.sis.feature.builder.AssociationRoleBuilderTest.class,
Modified:
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -38,22 +38,24 @@ import org.opengis.metadata.acquisition.
*/
public enum GeometryLibrary {
/**
- * The Java Topology Suite (JTS) library. This open source library
provides an object model
- * for Euclidean planar geometry together with a set of fundamental
geometric functions.
- * The library is licensed under Eclipse Distribution License.
+ * The Java 2D Graphics and Imaging library. This library does not provide
as many topological operations
+ * than other libraries, but is available on most standard Java
environments and constitute a reliable
+ * fallback when no other library is available.
*
* <table class="sis">
* <caption>Implementation classes</caption>
* <tr><th>Geometry type</th> <th>Class name</th></tr>
- * <tr><td>Root geometry class</td> <td>{@code
org.locationtech.jts.geom.Geometry}</td></tr>
- * <tr><td>{@link GeometryType#POINT}</td> <td>{@code
org.locationtech.jts.geom.Point}</td></tr>
- * <tr><td>{@link GeometryType#LINEAR}</td> <td>{@code
org.locationtech.jts.geom.LineString}</td></tr>
- * <tr><td>{@link GeometryType#AREAL}</td> <td>{@code
org.locationtech.jts.geom.Polygon}</td></tr>
+ * <tr><td>{@link GeometryType#POINT}</td> <td>{@code
java.awt.geom.Point2D}</td></tr>
+ * <tr><td>{@link GeometryType#LINEAR}</td> <td>{@code
java.awt.Shape}</td></tr>
+ * <tr><td>{@link GeometryType#AREAL}</td> <td>{@code
java.awt.Shape}</td></tr>
* </table>
*
- * @see <a href="http://locationtech.github.io/jts/">JTS home page</a>
+ * Note that contrarily to JTS and ESRI libraries,
+ * a point does not extend any root geometry class in Java2D.
+ *
+ * @see <a
href="http://docs.oracle.com/javase/8/docs/technotes/guides/2d/index.html">Java2D
home page</a>
*/
- JTS,
+ JAVA2D,
/**
* The ESRI geometry API library. This library can be used for spatial
vector data processing.
@@ -74,22 +76,22 @@ public enum GeometryLibrary {
ESRI,
/**
- * The Java 2D Graphics and Imaging library. This library does not provide
as many topological operations
- * than other libraries, but is available on most standard Java
environments and constitute a reliable
- * fallback when no other library is available.
+ * The Java Topology Suite (JTS) library. This open source library
provides an object model
+ * for Euclidean planar geometry together with a set of fundamental
geometric functions.
+ * The library is licensed under Eclipse Distribution License.
*
* <table class="sis">
* <caption>Implementation classes</caption>
* <tr><th>Geometry type</th> <th>Class name</th></tr>
- * <tr><td>{@link GeometryType#POINT}</td> <td>{@code
java.awt.geom.Point2D}</td></tr>
- * <tr><td>{@link GeometryType#LINEAR}</td> <td>{@code
java.awt.Shape}</td></tr>
- * <tr><td>{@link GeometryType#AREAL}</td> <td>{@code
java.awt.Shape}</td></tr>
+ * <tr><td>Root geometry class</td> <td>{@code
org.locationtech.jts.geom.Geometry}</td></tr>
+ * <tr><td>{@link GeometryType#POINT}</td> <td>{@code
org.locationtech.jts.geom.Point}</td></tr>
+ * <tr><td>{@link GeometryType#LINEAR}</td> <td>{@code
org.locationtech.jts.geom.LineString}</td></tr>
+ * <tr><td>{@link GeometryType#AREAL}</td> <td>{@code
org.locationtech.jts.geom.Polygon}</td></tr>
* </table>
*
- * Note that contrarily to JTS and ESRI libraries,
- * a point does not extend any root geometry class in Java2D.
+ * @see <a href="http://locationtech.github.io/jts/">JTS home page</a>
*
- * @see <a
href="http://docs.oracle.com/javase/8/docs/technotes/guides/2d/index.html">Java2D
home page</a>
+ * @since 1.0
*/
- JAVA2D
+ JTS
}
Modified:
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java?rev=1829137&r1=1829136&r2=1829137&view=diff
==============================================================================
---
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
[UTF-8] (original)
+++
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/wkt/StoreFormat.java
[UTF-8] Sat Apr 14 12:54:01 2018
@@ -87,7 +87,7 @@ public final class StoreFormat extends W
envelope.setCoordinateReferenceSystem(parseCRS(crs,
additionalCRS));
return new GeometryWrapper(obj, envelope);
}
- } catch (IllegalArgumentException | UnsupportedOperationException e) {
+ } catch (Exception e) { // Implementation-specific exception (e.g.
JTS has its own exception class).
log(e);
}
return null;