public Object convert(Object source, Class target) throws Exception { return new WKTReader2().read((String) source); } };
@Override protected FeatureReader<SimpleFeatureType, SimpleFeature> getReaderInternal(Query query) throws IOException { File file = new File(store.dir, typeName + ".properties"); PropertyFeatureReader reader = new PropertyFeatureReader(store.getNamespaceURI(), file, getGeometryFactory(query)); Double tolerance = (Double) query.getHints().get(Hints.LINEARIZATION_TOLERANCE); if (tolerance != null) { reader.setWKTReader(new WKTReader2(tolerance)); } return reader; }
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); }
@Test public void verifyWKT() throws Exception { String WKT = "LINESTRING (60 380, 60 20, 200 400, 280 20, 360 400, 420 20, 500 400, 580 20, 620 400)"; WKTReader reader = new WKTReader2(); Geometry geometry = reader.read(WKT); assertNotNull(geometry); assertTrue(geometry instanceof LineString); }
/** 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)); }
@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); }
@Test public void testCaseInsensitive() throws Exception { WKTReader reader = new WKTReader2(); assertNotNull(reader.read("POINT(1 2)")); assertNotNull(reader.read("Point(1 2)")); assertNotNull(reader.read("LINESTRING(0 2, 2 0, 8 6)")); assertNotNull(reader.read("LineString(0 2, 2 0, 8 6)")); }
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)); }
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)); } }
@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); } }
@Test public void testParseMulticurve() throws Exception { WKTReader reader = new WKTReader2(); String WKT = "MULTICURVE EMPTY"; MultiLineString ml = (MultiLineString) reader.read(WKT); assertTrue(ml.isEmpty()); WKT = "MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4))"; ml = (MultiLineString) reader.read(WKT); assertEquals(2, ml.getNumGeometries()); assertTrue(ml.getGeometryN(0).getClass() == LineString.class); assertTrue(ml.getGeometryN(1) instanceof CircularString); WKT = "MULTICURVE((100 100, 120 120), COMPOUNDCURVE(CIRCULARSTRING(0 0, 2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)))"; ml = (MultiLineString) reader.read(WKT); assertEquals(2, ml.getNumGeometries()); assertTrue(ml.getGeometryN(0).getClass() == LineString.class); assertTrue(ml.getGeometryN(1) instanceof CompoundRing); }
@Test public void multiPointWithInnerParens() throws Exception { String WKT = "MULTIPOINT ((111 -47), (110 -46.5))"; WKTReader reader = new WKTReader2(); Geometry geometry = reader.read(WKT); assertNotNull(geometry); assertTrue(geometry instanceof MultiPoint); MultiPoint mp = (MultiPoint) geometry; assertEquals(2, mp.getNumGeometries()); assertEquals(new Coordinate(111, -47), mp.getGeometryN(0).getCoordinate()); assertEquals(new Coordinate(110, -46.5), mp.getGeometryN(1).getCoordinate()); }
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)); } }
@Test public void multiPoint() throws Exception { String WKT = "MULTIPOINT (111 -47, 110 -46.5)"; WKTReader reader = new WKTReader2(); Geometry geometry = reader.read(WKT); assertNotNull(geometry); assertTrue(geometry instanceof MultiPoint); MultiPoint mp = (MultiPoint) geometry; assertEquals(2, mp.getNumGeometries()); assertEquals(new Coordinate(111, -47), mp.getGeometryN(0).getCoordinate()); assertEquals(new Coordinate(110, -46.5), mp.getGeometryN(1).getCoordinate()); }
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()); } }