diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java index 111371a0bcf59388b5f4963c19797df05dfa5d4c..fb6469cbe05cba8347b05c697fc330a7f4fc0edb 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserCommandLineInterface.java @@ -6,6 +6,7 @@ import java.nio.file.Paths; import java.util.Scanner; import java.util.concurrent.Callable; +import org.osgeo.proj4j.CoordinateReferenceSystem; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; @@ -25,7 +26,9 @@ 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 = { "-l", + "--local" }, description = "Are WKT coordinates in local CRS?", paramLabel = "local_coordinates?") + boolean localCoordinates; @Option(names = { "-w", "--wkt" }, description = "File containing WKT polygon, or - for stdin", paramLabel = "polygon.wkt") @@ -33,15 +36,15 @@ class RegionChooserCommandLineInterface implements Callable<Integer> @Override public Integer call() throws Exception { - String srsName; + CoordinateReferenceSystem localCRS; if (espgId == null) { - srsName = RegionChooserUtils.crsFromCityGMLHeader(citygmls[0]).toString(); + localCRS = RegionChooserUtils.crsFromCityGMLHeader(citygmls[0]); } else { - srsName = "EPSG:" + espgId; + localCRS = RegionChooserUtils.crsFromSrsName("EPSG:" + espgId); } - String wktPolygon = "unknown"; + String wktPolygon; if (wktFile.equals("-")) { if (System.in.available() == 0) { @@ -56,9 +59,13 @@ public Integer call() throws Exception { } } + if (!localCoordinates) { + // WKT coordinates are in WGS84, so should be first converted to srsName + } + System.out.println("WKT Polygon : " + wktPolygon); - StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, citygmls); + StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, localCRS.toString(), citygmls); RegionChooserUtils.writeStringBuilderToFile(sb, outputCityGML); diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java index 54c54bf04771a30730432bf0bbf9c7f14cc734fb..71e87b43c308657f8a4ac451bf91745a9dbb3480 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java @@ -47,7 +47,7 @@ private RegionChooserUtils() { * @param srsName * @return CoordinateReferenceSystem */ - private static CoordinateReferenceSystem crsFromSrsName(String srsName) { + public static CoordinateReferenceSystem crsFromSrsName(String srsName) { // EPSG:31467 Pattern pEPSG = Pattern.compile("^(EPSG:\\d+)$"); Matcher mEPSG = pEPSG.matcher(srsName);