Commit e6e7fe28 authored by Eric Duminil's avatar Eric Duminil
Browse files

Proof-of-concept : extract from multiple citygmls.

parent b74173c0
......@@ -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];
......
......@@ -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));
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment