/** * Reads a Well-Known Text representation of a {@link Geometry} from a {@link String}. * * @param wellKnownText one or more <Geometry Tagged Text>strings (see the OpenGIS Simple * Features Specification) separated by whitespace * @return a <code>Geometry</code> specified by <code>wellKnownText</code> * @throws ParseException if a parsing problem occurs */ public Geometry read(String wellKnownText) throws ParseException { StringReader reader = new StringReader(wellKnownText); try { return read(reader); } finally { reader.close(); } }
public Object convert(Object source, Class target) throws Exception { return new WKTReader2().read((String) source); } };
private void testRoundTrip(String wkt, String expectedWkt) throws ParseException { WKTReader2 reader = new WKTReader2(0.2); Geometry geometry = reader.read(wkt); WKTWriter2 writer = new WKTWriter2(); String wkt2 = writer.write(geometry); assertEquals(expectedWkt, wkt2); }
/** no encode gml:id test */ public void testEncodeMultiPointNoGmlId() throws Exception { MultiPointEncoder encoder = new MultiPointEncoder(gtEncoder, "gml", GML.NAMESPACE, false); Geometry geometry = new WKTReader2().read("MULTIPOINT(0 0, 1 1)"); Document doc = encode(encoder, geometry, "points"); assertEquals( "0", xpath.evaluate("count(//gml:MultiPoint/gml:pointMember/gml:Point/@gml:id)", doc)); } }
public void testEncode3DPoint() throws Exception { PointEncoder encoder = new PointEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2().read("POINT(0 0 50)"); Document doc = encode(encoder, geometry); // print(doc); assertEquals("0 0 50", xpath.evaluate("//gml:pos", doc)); }
/** No encode gml:id test */ public void testEncodeMultiPolygonNoGmlId() throws Exception { MultiPolygonEncoder encoder = new MultiPolygonEncoder(gtEncoder, "gml", GML.NAMESPACE, false); Geometry geometry = new WKTReader2() .read( "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)))"); Document doc = encode(encoder, geometry, "mpoly"); assertEquals( "0", xpath.evaluate( "count(/gml:MultiSurface/gml:surfaceMember/gml:Polygon/@gml:id)", doc)); } }
public void testEncode3DLine() throws Exception { LineStringEncoder encoder = new LineStringEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2().read("LINESTRING(0 0 50, 120 0 100)"); Document doc = encode(encoder, geometry, "threed"); // print(doc); assertEquals("0 0 50 120 0 100", xpath.evaluate("//gml:posList", doc)); assertEquals("threed", xpath.evaluate("//gml:LineString/@gml:id", doc)); }
public void testCircle() throws Exception { PolygonEncoder encoder = new PolygonEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2() .read("CURVEPOLYGON(CIRCULARSTRING(-10 0, -8 2, -6 0, -8 -2, -10 0))"); Document doc = encode(encoder, geometry); // XMLTestSupport.print(doc); assertEquals(1, xpath.getMatchingNodes("//gml:Polygon", doc).getLength()); assertEquals(1, xpath.getMatchingNodes("//gml:Polygon/gml:exterior", doc).getLength()); assertEquals(0, xpath.getMatchingNodes("//gml:Polygon/gml:interior", doc).getLength()); String ext1 = "//gml:Polygon/gml:exterior/gml:Ring/gml:curveMember[1]"; assertEquals( "circularArc3Points", xpath.evaluate(ext1 + "/gml:Curve/gml:segments/gml:ArcString/@interpolation", doc)); assertEquals( "-10 0 -8 2 -6 0 -8 -2 -10 0", xpath.evaluate(ext1 + "/gml:Curve/gml:segments/gml:ArcString/gml:posList", doc)); }
@Test public void testMultiSurfaceStraightPolygon() throws Exception { String wkt = "MULTISURFACE (((0 0, 1 0, 1 4, 0 0)), CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 2, 7 5, 2 10), (2 10, 0 2)), COMPOUNDCURVE (CIRCULARSTRING (3 9, 6 5, 3 2), (3 2, 3 9))))"; Geometry geometry = new WKTReader2().read(wkt); // System.out.println(geometry); MultiSurface ms = (MultiSurface) geometry; assertEquals(2, ms.getNumGeometries()); assertFalse(ms.getGeometryN(0) instanceof CurvePolygon); assertTrue(ms.getGeometryN(1) instanceof CurvePolygon); }
@Test public void testMultiSurfaceStraightPolygon2() throws Exception { String wkt = "MULTISURFACE (CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 2, 7 5, 2 10), (2 10, 0 2)), COMPOUNDCURVE (CIRCULARSTRING (3 9, 6 5, 3 2), (3 2, 3 9))), ((0 0, 1 0, 1 4, 0 0)))"; Geometry geometry = new WKTReader2().read(wkt); // System.out.println(geometry); MultiSurface ms = (MultiSurface) geometry; assertEquals(2, ms.getNumGeometries()); assertTrue(ms.getGeometryN(0) instanceof CurvePolygon); assertFalse(ms.getGeometryN(1) instanceof CurvePolygon); }
public void testEncodeCircle() throws Exception { CurveEncoder encoder = new CurveEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2().read("CIRCULARSTRING(-10 0, -8 2, -6 0, -8 -2, -10 0)"); Document doc = encode(encoder, geometry, "circle.abc"); // MLTestSupport.print(doc); assertEquals( 1, xpath.getMatchingNodes("//gml:Curve/gml:segments/gml:ArcString/gml:posList", doc) .getLength()); assertEquals( "circularArc3Points", xpath.evaluate("//gml:Curve/gml:segments/gml:ArcString/@interpolation", doc)); assertEquals( "-10 0 -8 2 -6 0 -8 -2 -10 0", xpath.evaluate("//gml:Curve/gml:segments/gml:ArcString/gml:posList", doc)); // geometry ids assertEquals("circle.abc", xpath.evaluate("//gml:Curve/@gml:id", doc)); }
Geometry geometry = new WKTReader2() .read( "MULTICURVE((105 105, 125 125), CIRCULARSTRING(-10 0, -8 2, -6 0, -8 -2, -10 0))"); Document doc = encode(encoder, geometry);
public void testEncodeMultiLineString() throws Exception { MultiLineStringEncoder encoder = new MultiLineStringEncoder(gtEncoder, "gml", GML.NAMESPACE, false); Geometry geometry = new WKTReader2().read("MULTILINESTRING((105 105, 125 125))"); Document doc = encode(encoder, geometry, "multi"); // XMLTestSupport.print(doc); assertEquals(1, xpath.getMatchingNodes("//gml:MultiLineString", doc).getLength()); assertEquals( 1, xpath.getMatchingNodes("//gml:MultiLineString/gml:lineStringMember", doc) .getLength()); assertEquals( "105 105 125 125", xpath.evaluate( "//gml:MultiLineString/gml:lineStringMember[1]/gml:LineString/gml:posList", doc)); // geometry ids assertEquals("multi", xpath.evaluate("/gml:MultiLineString/@gml:id", doc)); assertEquals( "multi.1", xpath.evaluate( "/gml:MultiLineString/gml:lineStringMember/gml:LineString/@gml:id", doc)); } }
public void testEncodeCompound() throws Exception { CurveEncoder encoder = new CurveEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2() .read( "COMPOUNDCURVE(CIRCULARSTRING(0 0, 2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0))"); Document doc = encode(encoder, geometry, "compound.3"); // XMLTestSupport.print(doc); assertEquals(2, xpath.getMatchingNodes("//gml:Curve//gml:segments/*", doc).getLength()); assertEquals(1, xpath.getMatchingNodes("//gml:ArcString", doc).getLength()); assertEquals(1, xpath.getMatchingNodes("//gml:LineStringSegment", doc).getLength()); assertEquals("circularArc3Points", xpath.evaluate("//gml:ArcString/@interpolation", doc)); assertEquals("0 0 2 0 2 1 2 3 4 3", xpath.evaluate("//gml:ArcString/gml:posList", doc)); assertEquals("linear", xpath.evaluate("//gml:LineStringSegment/@interpolation", doc)); assertEquals("4 3 4 5 1 4 0 0", xpath.evaluate("//gml:LineStringSegment/gml:posList", doc)); // geometry ids assertEquals("compound.3", xpath.evaluate("//gml:Curve/@gml:id", doc)); } }
public void testDonut() throws Exception { PolygonEncoder encoder = new PolygonEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2() .read( "CURVEPOLYGON(CIRCULARSTRING(-7 -8, -5 -6, -3 -8, -5 -10, -7 -8),CIRCULARSTRING(-6 -8, -5 -7, -4 -8, -5 -9, -6 -8))"); Document doc = encode(encoder, geometry); // XMLTestSupport.print(doc); assertEquals(1, xpath.getMatchingNodes("//gml:Polygon", doc).getLength()); assertEquals(1, xpath.getMatchingNodes("//gml:Polygon/gml:exterior", doc).getLength()); assertEquals(1, xpath.getMatchingNodes("//gml:Polygon/gml:interior", doc).getLength()); String ext1 = "//gml:Polygon/gml:exterior/gml:Ring/gml:curveMember[1]"; assertEquals( "circularArc3Points", xpath.evaluate(ext1 + "/gml:Curve/gml:segments/gml:ArcString/@interpolation", doc)); assertEquals( "-7 -8 -5 -6 -3 -8 -5 -10 -7 -8", xpath.evaluate(ext1 + "/gml:Curve/gml:segments/gml:ArcString/gml:posList", doc)); String int1 = "//gml:Polygon/gml:interior/gml:Ring/gml:curveMember[1]"; assertEquals( "circularArc3Points", xpath.evaluate(int1 + "/gml:Curve/gml:segments/gml:ArcString/@interpolation", doc)); assertEquals( "-6 -8 -5 -7 -4 -8 -5 -9 -6 -8", xpath.evaluate(int1 + "/gml:Curve/gml:segments/gml:ArcString/gml:posList", doc)); }
@Test public void testMultiSurfaceEmpty() throws Exception { String wkt = "MULTISURFACE (EMPTY, CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 2, 7 5, 2 10), (2 10, 0 2)), COMPOUNDCURVE (CIRCULARSTRING (3 9, 6 5, 3 2), (3 2, 3 9))), ((0 0, 1 0, 1 4, 0 0)))"; Geometry geometry = new WKTReader2().read(wkt); // System.out.println(geometry); MultiSurface ms = (MultiSurface) geometry; assertEquals(3, ms.getNumGeometries()); assertFalse(ms.getGeometryN(0) instanceof CurvePolygon); assertTrue(ms.getGeometryN(1) instanceof CurvePolygon); assertFalse(ms.getGeometryN(2) instanceof CurvePolygon); } }
public void testEncodeCoordinatesFormatting() throws Exception { PointEncoder encoder = new PointEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2().read("POINT(21396814.969 0 50)"); Document doc = encode(encoder, geometry, true, null, 4, true, false); assertEquals("21396814.969 0 50", xpath.evaluate("//gml:pos", doc)); doc = encode(encoder, geometry, true, null, 2, true, false); assertEquals("21396814.97 0 50", xpath.evaluate("//gml:pos", doc)); doc = encode(encoder, geometry, true, null, 4, true, true); assertEquals("21396814.9690 0.0000 50.0000", xpath.evaluate("//gml:pos", doc)); doc = encode(encoder, geometry, true, null, 4, false, false); assertEquals("2.1396814969E7 0 50", xpath.evaluate("//gml:pos", doc)); } }
public void testEncodeMultiPolygon() throws Exception { MultiPolygonEncoder encoder = new MultiPolygonEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2() .read( "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)))"); Document doc = encode(encoder, geometry, "mpoly"); // print(doc); // quick geom test assertEquals( "1 1 5 1 5 5 1 5 1 1", xpath.evaluate( "/gml:MultiSurface/gml:surfaceMember[1]/gml:Polygon/gml:exterior/gml:LinearRing/gml:posList", doc)); // ids assertEquals("mpoly", xpath.evaluate("/gml:MultiSurface/@gml:id", doc)); assertEquals( "mpoly.1", xpath.evaluate("/gml:MultiSurface/gml:surfaceMember[1]/gml:Polygon/@gml:id", doc)); assertEquals( "mpoly.2", xpath.evaluate("/gml:MultiSurface/gml:surfaceMember[2]/gml:Polygon/@gml:id", doc)); }
public void testEncodeMultiPoint() throws Exception { MultiPointEncoder encoder = new MultiPointEncoder(gtEncoder, "gml", GML.NAMESPACE); Geometry geometry = new WKTReader2().read("MULTIPOINT(0 0, 1 1)"); Document doc = encode(encoder, geometry, "points"); // print(doc); assertEquals( "0 0", xpath.evaluate("/gml:MultiPoint/gml:pointMember[1]/gml:Point/gml:pos", doc)); assertEquals( "1 1", xpath.evaluate("/gml:MultiPoint/gml:pointMember[2]/gml:Point/gml:pos", doc)); // ids assertEquals("points", xpath.evaluate("/gml:MultiPoint/@gml:id", doc)); assertEquals( "points.1", xpath.evaluate("/gml:MultiPoint/gml:pointMember[1]/gml:Point/@gml:id", doc)); assertEquals( "points.2", xpath.evaluate("/gml:MultiPoint/gml:pointMember[2]/gml:Point/@gml:id", doc)); }
@Test public void testDecimateCollection() throws Exception { WKTReader2 reader = new WKTReader2(); MultiLineString origin = (MultiLineString) reader.read("MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))"); Decimator d = new Decimator(0.1, 0.1); MultiLineString simplified = (MultiLineString) d.decimateTransformGeneralize(origin, identity); assertEquals(origin.getGeometryN(0), simplified.getGeometryN(0)); assertNotEquals(origin.getGeometryN(1), simplified.getGeometryN(1)); assertEquals("CircularString", origin.getGeometryN(1).getGeometryType()); assertEquals("LineString", simplified.getGeometryN(1).getGeometryType()); } }