diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java index 0a44a9f594458717a154083beb67c50716fb5635..111371a0bcf59388b5f4963c19797df05dfa5d4c 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java @@ -1,9 +1,9 @@ package eu.simstadt.regionchooser; -import java.io.BufferedWriter; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; +import java.nio.file.Paths; import java.util.Scanner; import java.util.concurrent.Callable; import picocli.CommandLine; @@ -16,7 +16,7 @@ class RegionChooserCommandLineInterface implements Callable<Integer> { @Option(names = { "-i", "--input" }, required = true, split = ",", description = "Citygml files to extract from", paramLabel = "input.gml") - List<Path> citygmls; + Path[] citygmls; @Option(names = { "-o", "--output" }, required = true, description = "Output file", paramLabel = "output.gml") @@ -25,40 +25,43 @@ class RegionChooserCommandLineInterface implements Callable<Integer> @Option(names = { "-e", "--epsg" }, description = "EPSG id for coordinate reference system", paramLabel = "31467") Integer espgId; + //TODO: Add possibility to choose wgs84 or local_crs + @Option(names = { "-w", "--wkt" }, description = "File containing WKT polygon, or - for stdin", paramLabel = "polygon.wkt") String wktFile = "-"; @Override - public Integer call() throws Exception { // your business logic goes here... - System.out.println("Should extract from :"); - for (Path input_citygml : citygmls) { - System.out.println(" " + input_citygml); - } - System.out.print("And write to : "); - System.out.println(outputCityGML); - try (BufferedWriter bf = Files.newBufferedWriter(outputCityGML)) { - bf.write("HELLO THERE!"); - } + public Integer call() throws Exception { + String srsName; + if (espgId == null) { - System.out.println("coordinates from " + citygmls.get(0)); + srsName = RegionChooserUtils.crsFromCityGMLHeader(citygmls[0]).toString(); } else { - System.out.print("in EPSG:"); - System.out.println(espgId + " coordinates."); + srsName = "EPSG:" + espgId; } + String wktPolygon = "unknown"; + if (wktFile.equals("-")) { if (System.in.available() == 0) { - System.out.println("OH NOEs, NO INPUT!"); + throw new IllegalArgumentException("Please provide \"POLYGON((x1 y1, x2 y2, ...))\" to standard input."); } else { - System.out.println("Here's standard input:"); - System.out.println(getInput()); - System.out.println("Done"); + wktPolygon = getInput(); } } else { - System.out.println("Try to read from " + wktFile); + wktPolygon = new String(Files.readAllBytes(Paths.get(wktFile)), StandardCharsets.UTF_8); + if (wktPolygon.isEmpty()) { + throw new IllegalArgumentException("Please write \"POLYGON((x1 y1, x2 y2, ...))\" inside " + wktFile); + } } + System.out.println("WKT Polygon : " + wktPolygon); + + StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, citygmls); + + RegionChooserUtils.writeStringBuilderToFile(sb, outputCityGML); + return 0; }