From e6e7fe28f7f44967a2fe463d958fe730de1fafe1 Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Wed, 5 Oct 2022 13:28:37 +0200 Subject: [PATCH] Proof-of-concept : extract from multiple citygmls. --- .../regionchooser/RegionChooserBrowser.java | 13 ++++++--- .../website/script/simstadt_openlayers.js | 28 +++++++++++++------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java index 2089403..2df3e29 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java @@ -8,6 +8,7 @@ import java.nio.file.Paths; import java.util.logging.Logger; import java.util.prefs.Preferences; +import java.util.stream.Stream; import org.locationtech.jts.io.ParseException; import com.ximpleware.NavException; import com.ximpleware.XPathParseException; @@ -69,12 +70,16 @@ public Void call() throws IOException { new Thread(task).start(); } - public void downloadRegionFromCityGML(String wktPolygon, String project, String citygml, String srsName) + public void downloadRegionFromCityGML(String wktPolygon, String project, String csvCitygmls, String srsName) throws IOException, ParseException, XPathParseException, NavException { - StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, - citygmlPath(project, citygml)); - File buildingIdsFile = selectSaveFileWithDialog(project, citygml, "selected_region"); + System.out.println("BEEN HERE?"); + + Path[] paths = Stream.of(csvCitygmls.split(";")).map(s -> citygmlPath(project, s)).toArray(Path[]::new); + + StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, paths); + + File buildingIdsFile = selectSaveFileWithDialog(project, csvCitygmls.replace(";", "_"), "selected_region"); if (buildingIdsFile != null) { try (BufferedWriter writer = Files.newBufferedWriter(buildingIdsFile.toPath())) { char[] chars = new char[BUFFER]; diff --git a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js index 99fbfba..e269c4d 100644 --- a/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js +++ b/src/main/resources/eu/simstadt/regionchooser/website/script/simstadt_openlayers.js @@ -177,10 +177,10 @@ var regionChooser = (function(){ console.log("Feature name : "+ feature["name"]); console.log("Feature ID : "+ feature.getId()); if (fromJavaFX) { - link += '<input type="checkbox" id="check_' + feature.getId() + '" class="select_citygml"><label for="check_' + feature.getId() + '">' + feature['name'] + '</label>'; + link += '<input type="checkbox" id="citygml_' + feature.getId() + '" class="select_citygml"><label for="citygml_' + feature.getId() + '">' + feature['name'] + '</label>'; } else { h = cyrb53(feature['name']); - link += '<input type="checkbox" id="check_' + h+ '" class="select_citygml"><label for="check_' + h + '">' + feature['name'] + '</label>'; + link += '<input type="checkbox" id="citygml_' + h+ '" class="select_citygml"><label for="citygml_' + h + '">' + feature['name'] + '</label>'; } link += " (" + citygml_percentage + "%"; @@ -229,21 +229,30 @@ var regionChooser = (function(){ dataPanel.append(text + "<br/>\n"); } - publicScope.downloadRegionFromCityGML = function(i) { + publicScope.downloadRegionFromCityGML = function(checkbox_ids) { // TODO: Disable all links // TODO: DRY - var feature = kml_source.getFeatureById(i); + var features = checkbox_ids.map(checkbox_id => { + var i = Number(checkbox_id.replace("citygml_", "")); + return kml_source.getFeatureById(i); + }) + + var project = features[0].get("project"); //TODO: Check all the same + var srsName = features[0].get("srsName") || "EPSG:31467"; //TODO: Check all the same + var citygmlNames = features.map(f => f.get("name")); // Waiting 100ms in order to let the cursor change setTimeout(function() { var start = new Date().getTime(); - var srsName = feature.get("srsName") || "EPSG:31467"; if (proj4.defs(srsName)){ $("html").addClass("wait"); console.log("Selected region is written in " + srsName + " coordinate system."); try { - fxapp.downloadRegionFromCityGML(sketchAsWKT(srsName), feature.get("project"), feature.get("name"), srsName); + console.log("Before JAVA"); + fxapp.downloadRegionFromCityGML(sketchAsWKT(srsName), project, citygmlNames.join(";"), srsName); + console.log("After JAVA"); dataPanel.append("<h2 class='ok'>Done!</h2><br/>\n"); } catch (e) { + console.log("ERROR " + e); dataPanel.append("<h2 class='error'>Some problem occured!</h2><br/>\n"); } var end = new Date().getTime(); @@ -364,13 +373,14 @@ var regionChooser = (function(){ publicScope.clickety_click = function() { console.log("You clicked pretty well"); - var checkedBoxes = Array.from(document.querySelectorAll("input.select_citygml")).filter(x => x.checked); + var checkedBoxes = Array.from(document.querySelectorAll("input.select_citygml")).filter(c => c.checked); if (checkedBoxes.length === 0){ console.log("You should select at least one citygml, though."); } else{ - checkedBoxes.forEach(x => { - console.log("Nice! You checked Citygml " + x.id) + checkedBoxes.forEach(c => { + console.log("Nice! You checked Citygml " + c.id) }); + publicScope.downloadRegionFromCityGML(checkedBoxes.map(c => c.id)); } } -- GitLab