diff --git a/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java b/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java index 4e9e6b99cc3c46978cf12c61f9500854449d42c7..850bf385e2e9d811e6c32317c1e9f50df7e3f505 100644 --- a/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java +++ b/src/main/java/eu/simstadt/regionchooser/fast_xml_parser/ConvexHullCalculator.java @@ -25,6 +25,10 @@ { private static final Logger LOGGER = Logger.getLogger(ConvexHullCalculator.class.getName()); + private ConvexHullCalculator() { + throw new IllegalStateException("Utility class"); + } + /** * Relatively fast method to extract a convex hull in WGS84 for any Citygml file for which CRS is known and whose * size is less than 2GB (VTD XML limitation). It iterates over every building, gets the bounding box as 4 @@ -92,7 +96,6 @@ public static void extractHullsForEveryCityGML(Path repository, Consumer<String> try { Path kmlPath = getHullPath(repository, gmlPath); if (Files.exists(kmlPath)) { - //TODO: Check if size is the same as original. Recreate otherwise. LOGGER.fine("Using cache from " + repository.relativize(kmlPath)); return new String(Files.readAllBytes(kmlPath), StandardCharsets.UTF_8); } else { @@ -101,8 +104,8 @@ public static void extractHullsForEveryCityGML(Path repository, Consumer<String> } } catch (IOException ex) { ex.printStackTrace(); + return null; } - return null; }) .filter(Objects::nonNull) .forEach(hullKML -> { @@ -190,6 +193,9 @@ public static String calculateConvexHullPlacemark(Path gmlPath, Path kmlPath, bo * folder and hides it. The '.cache' folder isn't specific to the project: every kml cache file is written inside the * same repository '.cache' folder. * + * The original CityGML filesize is written in KML basename, in order to update the hull if the CityGML file is + * modified, e.g. LoD2_564_5512_2_BY_11946489.kml + * * @param repository * @param citygmlPath * @@ -197,7 +203,8 @@ public static String calculateConvexHullPlacemark(Path gmlPath, Path kmlPath, bo * @throws IOException */ private static Path getHullPath(Path repository, Path citygmlPath) throws IOException { - String kmlFilename = citygmlPath.getFileName().toString().replaceAll("(?i)\\.gml$", ".kml"); + String kmlFilename = citygmlPath.getFileName().toString().replaceAll("(?i)\\.gml$", + "_" + Files.size(citygmlPath) + ".kml"); Path cacheFolder = repository.resolve(".cache/"); Path hullsFolder = cacheFolder.resolve("hulls/"); Files.createDirectories(hullsFolder);