/* GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2010-2014, Open Source Geospatial Foundation (OSGeo) * * This file is hereby placed into the Public Domain. This means anyone is * free to do whatever they wish with this file. Use it well and enjoy! */ package org.geotools.tutorial.csv; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileReader; import java.io.Serializable; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.DataUtilities; import org.geotools.data.FeatureReader; import org.geotools.data.Query; import org.geotools.data.Transaction; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.factory.CommonFactoryFinder; import org.geotools.feature.DefaultFeatureCollection; import org.geotools.filter.text.cql2.CQL; import org.geotools.referencing.CRS; import org.junit.Test; import org.opengis.feature.Property; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.feature.type.GeometryDescriptor; import org.opengis.filter.Filter; import org.opengis.filter.FilterFactory; import org.opengis.filter.identity.FeatureId; import com.csvreader.CsvReader; import com.vividsolutions.jts.geom.Geometry; public class CSVTest { @Test public void test() throws Exception { List<String> cities = new ArrayList<>(); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); try (FileReader reader = new FileReader(file)) { CsvReader locations = new CsvReader(reader); locations.readHeaders(); while (locations.readRecord()) { cities.add(locations.get("CITY")); } } assertTrue(cities.contains("Victoria")); } // locations.csv end @Test public void example1() throws Exception { System.out.println("example1 start\n"); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); // example1 start Map<String, Serializable> params = new HashMap<>(); params.put("file", file); DataStore store = DataStoreFinder.getDataStore(params); String names[] = store.getTypeNames(); System.out.println("typenames: " + names.length); System.out.println("typename[0]: " + names[0]); // example1 end System.out.println("\nexample1 end\n"); } @Test public void example2() throws Exception { System.out.println("example2 start\n"); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); // example2 start Map<String, Serializable> params = new HashMap<>(); params.put("file", file); DataStore store = DataStoreFinder.getDataStore(params); SimpleFeatureType type = store.getSchema("locations"); System.out.println("featureType name: " + type.getName()); System.out.println("featureType count: " + type.getAttributeCount()); System.out.println("featuretype attributes list:"); // access by list for (AttributeDescriptor descriptor : type.getAttributeDescriptors()) { System.out.print(" " + descriptor.getName()); System.out.print(" (" + descriptor.getMinOccurs() + "," + descriptor.getMaxOccurs() + ","); System.out.print((descriptor.isNillable() ? "nillable" : "manditory") + ")"); System.out.print(" type: " + descriptor.getType().getName()); System.out.println(" binding: " + descriptor.getType().getBinding().getSimpleName()); } // access by index AttributeDescriptor attributeDescriptor = type.getDescriptor(0); System.out.println("attribute 0 name: " + attributeDescriptor.getName()); System.out.println("attribute 0 type: " + attributeDescriptor.getType().toString()); System.out.println("attribute 0 binding: " + attributeDescriptor.getType().getBinding()); // access by name AttributeDescriptor cityDescriptor = type.getDescriptor("CITY"); System.out.println("attribute 'CITY' name: " + cityDescriptor.getName()); System.out.println("attribute 'CITT' type: " + cityDescriptor.getType().toString()); System.out.println("attribute 'CITY' binding: " + cityDescriptor.getType().getBinding()); // default geometry GeometryDescriptor geometryDescriptor = type.getGeometryDescriptor(); System.out.println("default geom name: " + geometryDescriptor.getName()); System.out.println("default geom type: " + geometryDescriptor.getType().toString()); System.out.println("default geom binding: " + geometryDescriptor.getType().getBinding()); System.out.println("default geom crs: " + CRS.toSRS(geometryDescriptor.getCoordinateReferenceSystem())); // example2 end System.out.println("\nexample2 end\n"); } @Test public void example3() throws Exception { System.out.println("example3 start\n"); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); // example3 start Map<String, Serializable> params = new HashMap<>(); params.put("file", file); DataStore datastore = DataStoreFinder.getDataStore(params); Query query = new Query("locations"); System.out.println("open feature reader"); FeatureReader<SimpleFeatureType, SimpleFeature> reader = datastore.getFeatureReader(query, Transaction.AUTO_COMMIT); try { int count = 0; while (reader.hasNext()) { SimpleFeature feature = reader.next(); System.out.println(" " + feature.getID() + " " + feature.getAttribute("CITY")); count++; } System.out.println("close feature reader"); System.out.println("read in " + count + " features"); } finally { reader.close(); } // example3 end System.out.println("\nexample3 end\n"); } @Test public void example4() throws Exception { System.out.println("example4 start\n"); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); // example4 start Map<String, Serializable> params = new HashMap<>(); params.put("file", file); DataStore store = DataStoreFinder.getDataStore(params); FilterFactory ff = CommonFactoryFinder.getFilterFactory(); Set<FeatureId> selection = new HashSet<>(); selection.add(ff.featureId("locations.7")); Filter filter = ff.id(selection); Query query = new Query("locations", filter); FeatureReader<SimpleFeatureType, SimpleFeature> reader = store.getFeatureReader(query, Transaction.AUTO_COMMIT); try { while (reader.hasNext()) { SimpleFeature feature = reader.next(); System.out.println("feature " + feature.getID()); for (Property property : feature.getProperties()) { System.out.print("\t"); System.out.print(property.getName()); System.out.print(" = "); System.out.println(property.getValue()); } } } finally { reader.close(); } // example4 end System.out.println("\nexample4 end\n"); } @Test public void example5() throws Exception { System.out.println("example5 start\n"); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); // example5 start Map<String, Serializable> params = new HashMap<>(); params.put("file", file); DataStore store = DataStoreFinder.getDataStore(params); SimpleFeatureSource featureSource = store.getFeatureSource("locations"); Filter filter = CQL.toFilter("CITY = 'Denver'"); SimpleFeatureCollection features = featureSource.getFeatures(filter); System.out.println("found :" + features.size() + " feature"); SimpleFeatureIterator iterator = features.features(); try { while (iterator.hasNext()) { SimpleFeature feature = iterator.next(); Geometry geometry = (Geometry) feature.getDefaultGeometry(); System.out.println(feature.getID() + " default geometry " + geometry); } } catch (Throwable t) { iterator.close(); } // example5 end System.out.println("\nexample5 end\n"); } @Test public void example6() throws Exception { System.out.println("example6 start\n"); URL url = CSVTest.class.getResource("locations.csv"); File file = new File(url.toURI()); // example6 start Map<String, Serializable> params = new HashMap<>(); params.put("file", file); DataStore store = DataStoreFinder.getDataStore(params); SimpleFeatureSource featureSource = store.getFeatureSource("locations"); SimpleFeatureCollection featureCollection = featureSource.getFeatures(); List<String> list = new ArrayList<>(); try (SimpleFeatureIterator features = featureCollection.features();) { while (features.hasNext()) { list.add(features.next().getID()); } } // try-with-resource will call features.close() System.out.println(" List Contents: " + list); System.out.println(" FeatureSource count: " + featureSource.getCount(Query.ALL)); System.out.println(" FeatureSource bounds: " + featureSource.getBounds(Query.ALL)); System.out.println("FeatureCollection size: " + featureCollection.size()); System.out.println("FeatureCollection bounds: " + featureCollection.getBounds()); // Load into memory! DefaultFeatureCollection collection = DataUtilities.collection(featureCollection); System.out.println(" collection size: " + collection.size()); // example6 end System.out.println("\nexample6 end\n"); } }