diff --git a/src/main/java/eu/simstadt/geo/RegionChooserUtils.java b/src/main/java/eu/simstadt/geo/RegionChooserUtils.java index d5662a996eeb79ae5be1735fd61a5dadec50b369..8f8482711a6229a61a10b891fc85ab37fd6b13d0 100644 --- a/src/main/java/eu/simstadt/geo/RegionChooserUtils.java +++ b/src/main/java/eu/simstadt/geo/RegionChooserUtils.java @@ -21,6 +21,7 @@ private static final CRSFactory CRS_FACTORY = new CRSFactory(); public static final CoordinateReferenceSystem WGS84 = CRS_FACTORY.createFromName("EPSG:4326"); private static final Pattern srsNamePattern = Pattern.compile("(?i)(?<=srsName=[\"'])[^\"']+(?=[\"'])"); + private static final int CITYGML_HEADER_LENGTH = 50; private RegionChooserUtils() { // only static use @@ -41,7 +42,7 @@ private RegionChooserUtils() { * @param srsName * @return CoordinateReferenceSystem */ - public static CoordinateReferenceSystem crsFromSrsName(String srsName) { + private static CoordinateReferenceSystem crsFromSrsName(String srsName) { // EPSG:31467 Pattern pEPSG = Pattern.compile("^(EPSG:\\d+)$"); Matcher mEPSG = pEPSG.matcher(srsName); @@ -116,13 +117,15 @@ public static Polygon changePolygonCRS(Polygon polygonInOriginalCRS, CoordinateR * @throws IOException */ public static CoordinateReferenceSystem crsFromCityGMLHeader(Path citygmlPath) throws IOException { - Optional<String> line = Files.lines(citygmlPath).limit(50).filter(srsNamePattern.asPredicate()).findFirst(); - if (line.isPresent()) { - Matcher matcher = srsNamePattern.matcher(line.get()); - matcher.find(); - return crsFromSrsName(matcher.group()); - } else { - throw new IllegalArgumentException("No srsName found in the header of " + citygmlPath); + try (Stream<String> lines = Files.lines(citygmlPath).limit(CITYGML_HEADER_LENGTH)) { + Optional<String> line = lines.filter(srsNamePattern.asPredicate()).findFirst(); + if (line.isPresent()) { + Matcher matcher = srsNamePattern.matcher(line.get()); + matcher.find(); + return crsFromSrsName(matcher.group()); + } else { + throw new IllegalArgumentException("No srsName found in the header of " + citygmlPath); + } } }