CSV Plugin ---------- The ``gt-csv`` module is a plugin which provides a ``CSVDataStore``. It is pluggable into GeoServer's importer, allowing read/write capabilities for :file:`.csv` files. The plugin supports three strategies: ``AttributesOnly``, ``LatLon``, and ``SpecifiedWKT``. Essentially, each strategy will read and store data in a slightly different way. **Maven**:: org.geotools gt-csv ${geotools.version} Connection Parameters ^^^^^^^^^^^^^^^^^^^^^ The following connection parameters are available: +--------------------------+---------------------------------------------------+ | Parameter | Description | +==========================+===================================================+ | ``url`` | A URL of the file ending in ``csv`` | +--------------------------+---------------------------------------------------+ | ``strategy`` | The strategy to use in processing the input file | | | | | | 1. ``guess`` - try to figure out best strategy | | | | | | 2. ``AttributesOnly`` - read in all fields as is | | | | | | 3. ``specify`` - use the specified lat/lon columns| | | | | | 4. ``wkt`` - use a field containing WKT | +--------------------------+---------------------------------------------------+ | ``latField`` | The field containing the latitude value in | | | ``specify`` strategy. | +--------------------------+---------------------------------------------------+ | ``lngField`` | The field containing the longitude value in | | | ``specify`` strategy. | +--------------------------+---------------------------------------------------+ | ``wktField`` | The field containing the WKT value in | | | ``WKT`` strategy. | +--------------------------+---------------------------------------------------+ | ``writeprj`` | write out a ``.prj`` file with the CRS (Optional) | +--------------------------+---------------------------------------------------+ | ``quoteAll`` | Should all fields be quoted when writing, default | | | is `false` (Optional). | +--------------------------+---------------------------------------------------+ | ``quoteChar`` | Character to use to quote field, default is ``"`` | | | (Optional). | +--------------------------+---------------------------------------------------+ | ``separator`` | Character to use to separate fields, default is | | | ``,`` (Optional). | +--------------------------+---------------------------------------------------+ | ``lineSeperator`` | String used to separate lines, default is the | | | system line ending (Optional). | +--------------------------+---------------------------------------------------+ | ``escapeChar`` | Character used to escape quotes in fields, default| | | ``\\`` (Optional). | +--------------------------+---------------------------------------------------+ | ``namespace`` | URI to the namespace (Optional). | +--------------------------+---------------------------------------------------+ Strategies ^^^^^^^^^^ LatLon Strategy ''''''''''''''' This strategy uses the two field names set in ``latField`` and ``lngField`` and converts the values in these fields into a ``Point`` object in the feature called ``location``. Guess Strategy '''''''''''''' This strategy looks through the field names and picks one that is equal to ``longitude``, ``lon``, ``long`` or ``lng`` to use for longitude. For latitude it looks for fields called ``latitude`` or ``lat``. It then converts the values in these fields into a ``Point`` object in the feature called ``location``. WKT Strategy '''''''''''' This strategy parses the value in the field specified in ``wktField`` into a WGS84 geometry object in the features with the same name as the field. AttributesOnly Strategy ''''''''''''''''''''''' This strategy reads all the fields in the file in unmodified. Access ^^^^^^ Reading in an existing file:: Map params = new HashMap(); params.put("file", "locations.csv"); params.put(CSVDataStoreFactory.STRATEGYP.key, CSVDataStoreFactory.SPECIFC_STRATEGY); params.put(CSVDataStoreFactory.LATFIELDP.key, "LAT"); params.put(CSVDataStoreFactory.LnGFIELDP.key, "LON"); DataStore store = DataStoreFinder.getDataStore(params); String typeName = dataStore.getTypeNames()[0]; FeatureSource source = dataStore.getFeatureSource(typeName); Filter filter = Filter.INCLUDE; // ECQL.toFilter("BBOX(THE_GEOM, 10,20,30,40)") FeatureCollection collection = source.getFeatures(filter); try (FeatureIterator features = collection.features()) { while (features.hasNext()) { SimpleFeature feature = features.next(); System.out.print(feature.getID()); System.out.print(": "); System.out.println(feature.getDefaultGeometryProperty().getValue()); } } Writing ^^^^^^^^ To write to a CSV file:: File file2 = File.createTempFile("CSVTest", ".csv"); Map params2 = new HashMap(); params2.put("file", file2); params2.put(CSVDataStoreFactory.STRATEGYP.key, CSVDataStoreFactory.WKT_STRATEGY); params2.put(CSVDataStoreFactory.WKTP.key, "the_geom_wkt"); CSVDataStoreFactory factory = new CSVDataStoreFactory(); DataStore datastore = factory.createNewDataStore(params2); SimpleFeatureType featureType = store.getSchema(); datastore.createSchema(featureType); SimpleFeatureSource source = datastore.getFeatureSource(); if (source instanceof SimpleFeatureStore) { SimpleFeatureStore outStore = (SimpleFeatureStore) source; outStore.addFeatures(store.getFeatureSource().getFeatures()); } else { fail("Can't write to new CSVDatastore"); }