@@ -14,6 +14,8 @@ import geoscript.geom.io.KmlReader
1414import geoscript.geom.io.Gml2Reader
1515import geoscript.geom.io.Gml3Reader
1616import geoscript.proj.Projection
17+ import geoscript.workspace.Memory
18+ import geoscript.workspace.Workspace
1719
1820/**
1921 * Read a CSV String, File, or InputStream and create a {@link geoscript.layer.Layer Layer }.
@@ -145,37 +147,66 @@ class CsvReader implements Reader {
145147
146148 /**
147149 * Read a GeoScript Layer from an InputStream
150+ * @param options The optional named parameters:
151+ * <ul >
152+ * <li >workspace: The Workspace used to create the Layer (defaults to Memory)</li>
153+ * <li >projection: The Projection assigned to the Layer (defaults to null)</li>
154+ * <li >name: The name of the Layer (defaults to geojson)</li>
155+ * </ul>
148156 * @param input An InputStream
149157 * @return A GeoScript Layer
150158 */
151- Layer read (InputStream input ) {
152- readFromReader(new InputStreamReader (input))
159+ Layer read (Map options = [:], InputStream input ) {
160+ readFromReader(options, new InputStreamReader (input))
153161 }
154162
155163 /**
156164 * Read a GeoScript Layer from a File
165+ * @param options The optional named parameters:
166+ * <ul >
167+ * <li >workspace: The Workspace used to create the Layer (defaults to Memory)</li>
168+ * <li >projection: The Projection assigned to the Layer (defaults to null)</li>
169+ * <li >name: The name of the Layer (defaults to geojson)</li>
170+ * </ul>
157171 * @param file A File
158172 * @return A GeoScript Layer
159173 */
160- Layer read (File file ) {
161- readFromReader(new FileReader (file))
174+ Layer read (Map options = [:], File file ) {
175+ readFromReader(options, new FileReader (file))
162176 }
163177
164178 /**
165179 * Read a GeoScript Layer from a String
180+ * @param options The optional named parameters:
181+ * <ul >
182+ * <li >workspace: The Workspace used to create the Layer (defaults to Memory)</li>
183+ * <li >projection: The Projection assigned to the Layer (defaults to null)</li>
184+ * <li >name: The name of the Layer (defaults to geojson)</li>
185+ * </ul>
166186 * @param str A String
167187 * @return A GeoScript Layer
168188 */
169- Layer read (String str ) {
170- readFromReader(new StringReader (str))
189+ Layer read (Map options = [:], String str ) {
190+ readFromReader(options, new StringReader (str))
171191 }
172192
173193 /**
174194 * Read from java.io.Reader, parse the CSV data, and create a Layer
195+ * @param options The optional named parameters:
196+ * <ul >
197+ * <li >workspace: The Workspace used to create the Layer (defaults to Memory)</li>
198+ * <li >projection: The Projection assigned to the Layer (defaults to null)</li>
199+ * <li >name: The name of the Layer (defaults to geojson)</li>
200+ * </ul>
175201 * @param input The input java.io.Reader
176202 * @return A Layer
177203 */
178- private Layer readFromReader (java.io.Reader input ) {
204+ private Layer readFromReader (Map options = [:], java.io.Reader input ) {
205+ // Default parameters
206+ Workspace workspace = options. get(" workspace" , new Memory ())
207+ Projection layerProj = options. get(" projection" )
208+ String layerName = options. get(" name" , " csv" )
209+ // Set up for parsing
179210 CSVReader reader = new CSVReader (input, separator as char , quote as char )
180211 def cols = reader. readNext() as List
181212 Layer layer = null
@@ -195,7 +226,11 @@ class CsvReader implements Reader {
195226 new Field (name, type)
196227 }
197228 fields. add(new Field (" geom" , " Point" ))
198- layer = new Layer (" csv" , new Schema (" csv" , fields))
229+ Schema schema = new Schema (layerName, fields)
230+ if (! schema. proj) {
231+ schema = schema. reproject(layerProj, layerName)
232+ }
233+ layer = workspace. create(schema)
199234 xCol = cols. indexOf(xColumn)
200235 yCol = cols. indexOf(yColumn)
201236 }
@@ -243,8 +278,11 @@ class CsvReader implements Reader {
243278 }
244279 fields. add(new Field (c. trim(), colType. trim(), proj))
245280 }
246- Schema schema = new Schema (" csv" , fields)
247- layer = new Layer (" csv" , schema)
281+ Schema schema = new Schema (layerName, fields)
282+ if (! schema. proj) {
283+ schema = schema. reproject(layerProj, layerName)
284+ }
285+ layer = workspace. create(schema)
248286 }
249287 // Try to turn the CSV values into a Feature, but fail
250288 // gracefully by logging the error and moving to the next line
@@ -297,8 +335,12 @@ class CsvReader implements Reader {
297335 }
298336 new Field (c, fieldType, proj)
299337 }
300- Schema schema = new Schema (" csv" , fields)
301- layer = new Layer (" csv" , schema)
338+ Schema schema = new Schema (layerName, fields)
339+ if (! schema. proj) {
340+ schema = schema. reproject(layerProj, layerName)
341+ }
342+ layer = workspace. create(schema)
343+
302344 }
303345 return layer
304346 }
0 commit comments