package org.jgrasstools.gears.modules; import java.io.File; import java.io.IOException; import java.net.URL; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.feature.DefaultFeatureCollection; import org.geotools.feature.FeatureIterator; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.jgrasstools.gears.io.vectorreader.OmsVectorReader; import org.jgrasstools.gears.io.vectorwriter.OmsVectorWriter; import org.jgrasstools.gears.utils.HMTestCase; import org.jgrasstools.gears.utils.geometry.GeometryUtilities; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.Point; /** * Test {@link OmsVectorReader}. * * @author Andrea Antonello (www.hydrologis.com) */ public class TestVectorReader extends HMTestCase { public void testShapefileReader() throws Exception { SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder(); b.setName("test"); b.setCRS(DefaultGeographicCRS.WGS84); b.add("the_geom", Point.class); b.add("id", Integer.class); DefaultFeatureCollection newCollection = new DefaultFeatureCollection(); SimpleFeatureType type = b.buildFeatureType(); for( int i = 0; i < 2; i++ ) { SimpleFeatureBuilder builder = new SimpleFeatureBuilder(type); Point point = GeometryUtilities.gf().createPoint(new Coordinate(i, i)); Object[] values = new Object[]{point, i}; builder.addAll(values); SimpleFeature feature = builder.buildFeature(type.getTypeName() + "." + i); newCollection.add(feature); } File tmpShape = File.createTempFile("testshp", ".shp"); if (tmpShape.exists()) { if (!tmpShape.delete()) throw new IOException(); } OmsVectorWriter writer = new OmsVectorWriter(); writer.file = tmpShape.getAbsolutePath(); writer.inVector = newCollection; writer.process(); // now read it again OmsVectorReader reader = new OmsVectorReader(); reader.file = tmpShape.getAbsolutePath(); reader.process(); SimpleFeatureCollection readFC = reader.outVector; FeatureIterator<SimpleFeature> featureIterator = readFC.features(); while( featureIterator.hasNext() ) { SimpleFeature f = featureIterator.next(); int id = ((Number) f.getAttribute("id")).intValue(); Geometry geometry = (Geometry) f.getDefaultGeometry(); Coordinate coordinate = geometry.getCoordinate(); if (id == 0) { assertEquals(coordinate.x, 0.0); assertEquals(coordinate.y, 0.0); } if (id == 1) { assertEquals(coordinate.x, 1.0); assertEquals(coordinate.y, 1.0); } if (id == 2) { assertEquals(coordinate.x, 2.0); assertEquals(coordinate.y, 2.0); } } if (tmpShape.exists()) { tmpShape.deleteOnExit(); } } public void testPropertiesReader() throws Exception { URL dataUrl = this.getClass().getClassLoader().getResource("example.properties"); String propertiesPath = new File(dataUrl.toURI()).getAbsolutePath(); // now read it again OmsVectorReader reader = new OmsVectorReader(); reader.file = propertiesPath; reader.process(); SimpleFeatureCollection readFC = reader.outVector; FeatureIterator<SimpleFeature> featureIterator = readFC.features(); while( featureIterator.hasNext() ) { SimpleFeature f = featureIterator.next(); int id = ((Number) f.getAttribute("id")).intValue(); Geometry geometry = (Geometry) f.getDefaultGeometry(); Coordinate coordinate = geometry.getCoordinate(); if (id == 1) { assertEquals(coordinate.x, 0.0); assertEquals(coordinate.y, 0.0); } if (id == 2) { assertEquals(coordinate.x, 10.0); assertEquals(coordinate.y, 10.0); } if (id == 3) { assertEquals(coordinate.x, 20.0); assertEquals(coordinate.y, 20.0); } if (id == 4) { String attribute = f.getAttribute("name").toString(); assertEquals(attribute, "justin deolivera"); } } } public void testPropertiesReader2() throws Exception { URL dataUrl = this.getClass().getClassLoader().getResource("example2.properties"); String propertiesPath = new File(dataUrl.toURI()).getAbsolutePath(); // now read it again OmsVectorReader reader = new OmsVectorReader(); reader.file = propertiesPath; reader.process(); SimpleFeatureCollection readFC = reader.outVector; FeatureIterator<SimpleFeature> featureIterator = readFC.features(); while( featureIterator.hasNext() ) { SimpleFeature f = featureIterator.next(); int id = ((Number) f.getAttribute("id")).intValue(); Geometry geometry = (Geometry) f.getDefaultGeometry(); if (id == 1) { Coordinate coordinate = geometry.getCoordinates()[1]; assertTrue(geometry instanceof LineString); assertEquals(coordinate.x, 40.0); assertEquals(coordinate.y, 40.0); } if (id == 2) { assertTrue(geometry instanceof LineString); Coordinate coordinate = geometry.getCoordinates()[3]; assertEquals(coordinate.x, 90.0); assertEquals(coordinate.y, 0.0); } } } }