diff --git a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java index 92bf767a2e1c775d97ef0810e2bf962df713a03b..208940363aeacd437653dd3e571c674268a993eb 100644 --- a/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java +++ b/src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java @@ -10,7 +10,6 @@ import java.util.prefs.Preferences; import org.locationtech.jts.io.ParseException; import com.ximpleware.NavException; -import com.ximpleware.XPathEvalException; import com.ximpleware.XPathParseException; import eu.simstadt.regionchooser.fast_xml_parser.ConvexHullCalculator; import javafx.application.Platform; @@ -30,6 +29,7 @@ public class RegionChooserBrowser extends Region { private static final Logger LOGGER = Logger.getLogger(RegionChooserBrowser.class.getName()); + private static final int BUFFER = 1024; /** * JavaFX Backend for RegionChooser. Inside simstadt_openlayers.js frontend, this class is available as `fxapp`. @@ -70,15 +70,19 @@ public Void call() throws IOException { } public void downloadRegionFromCityGML(String wktPolygon, String project, String citygml, String srsName) - throws IOException, ParseException, XPathParseException, NavException, XPathEvalException { + throws IOException, ParseException, XPathParseException, NavException { StringBuilder sb = RegionExtractor.selectRegionDirectlyFromCityGML(wktPolygon, srsName, citygmlPath(project, citygml)); File buildingIdsFile = selectSaveFileWithDialog(project, citygml, "selected_region"); if (buildingIdsFile != null) { try (BufferedWriter writer = Files.newBufferedWriter(buildingIdsFile.toPath())) { - //NOTE: isn't there a better way?? - writer.write(sb.toString()); + char[] chars = new char[BUFFER]; + for (int aPosStart = 0; aPosStart < sb.length(); aPosStart += BUFFER) { + int chunk = Math.min(BUFFER, sb.length() - aPosStart); + sb.getChars(aPosStart, aPosStart + chunk, chars, 0); + writer.write(chars, 0, chunk); + } } } }