Skip to content

Commit 2e58de2

Browse files
committed
Add workspace, layer name, and projection options to the CsvReader.
1 parent c2a7de6 commit 2e58de2

File tree

1 file changed

+54
-12
lines changed

1 file changed

+54
-12
lines changed

src/main/groovy/geoscript/layer/io/CsvReader.groovy

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import geoscript.geom.io.KmlReader
1414
import geoscript.geom.io.Gml2Reader
1515
import geoscript.geom.io.Gml3Reader
1616
import 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

Comments
 (0)