From 7e117d96759b8aad5f290740efb177872d162b66 Mon Sep 17 00:00:00 2001 From: afischerdev Date: Sat, 5 Apr 2025 18:09:15 +0200 Subject: [PATCH] added export formats --- .../main/java/btools/router/FormatGpx.java | 41 ++++++++++++++----- .../main/java/btools/router/FormatJson.java | 16 +++++++- .../main/java/btools/router/FormatKml.java | 16 +++++++- 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/brouter-core/src/main/java/btools/router/FormatGpx.java b/brouter-core/src/main/java/btools/router/FormatGpx.java index c652a0a..6f969d1 100644 --- a/brouter-core/src/main/java/btools/router/FormatGpx.java +++ b/brouter-core/src/main/java/btools/router/FormatGpx.java @@ -197,25 +197,28 @@ public class FormatGpx extends Formatter { for (int i = 0; i <= t.pois.size() - 1; i++) { OsmNodeNamed poi = t.pois.get(i); - formatWaypointGpx(sb, poi); + formatWaypointGpx(sb, poi, "poi"); } if (t.exportWaypoints) { for (int i = 0; i <= t.matchedWaypoints.size() - 1; i++) { MatchedWaypoint wt = t.matchedWaypoints.get(i); - sb.append(" \n") - .append(" ").append(StringUtils.escapeXml10(wt.name)).append("\n"); if (i == 0) { - sb.append(" from\n"); + formatWaypointGpx(sb, wt, "from"); } else if (i == t.matchedWaypoints.size() - 1) { - sb.append(" to\n"); + formatWaypointGpx(sb, wt, "to"); } else { - sb.append(" via\n"); + formatWaypointGpx(sb, wt, "via"); } - sb.append(" \n"); } } + if (t.exportCorrectedWaypoints && t.correctedWaypoints != null) { + for (int i = 0; i <= t.correctedWaypoints.size() - 1; i++) { + OsmNodeNamed n = t.correctedWaypoints.get(i); + formatWaypointGpx(sb, n, "via_corr"); + } + } + sb.append(" \n"); if (turnInstructionMode == 9 || turnInstructionMode == 2 @@ -454,7 +457,7 @@ public class FormatGpx extends Formatter { StringWriter sw = new StringWriter(8192); BufferedWriter bw = new BufferedWriter(sw); formatGpxHeader(bw); - formatWaypointGpx(bw, n); + formatWaypointGpx(bw, n, null); formatGpxFooter(bw); bw.close(); sw.close(); @@ -477,7 +480,7 @@ public class FormatGpx extends Formatter { sb.append("\n"); } - public void formatWaypointGpx(BufferedWriter sb, OsmNodeNamed n) throws IOException { + public void formatWaypointGpx(BufferedWriter sb, OsmNodeNamed n, String type) throws IOException { sb.append(" "); if (n.getSElev() != Short.MIN_VALUE) { @@ -489,6 +492,24 @@ public class FormatGpx extends Formatter { if (n.nodeDescription != null && rc != null) { sb.append("").append(rc.expctxWay.getKeyValueDescription(false, n.nodeDescription)).append(""); } + if (type != null) { + sb.append("").append(type).append(""); + } + sb.append("\n"); + } + + public void formatWaypointGpx(BufferedWriter sb, MatchedWaypoint wp, String type) throws IOException { + sb.append(" "); + if (wp.waypoint.getSElev() != Short.MIN_VALUE) { + sb.append("").append("" + wp.waypoint.getElev()).append(""); + } + if (wp.name != null) { + sb.append("").append(StringUtils.escapeXml10(wp.name)).append(""); + } + if (type != null) { + sb.append("").append(type).append(""); + } sb.append("\n"); } diff --git a/brouter-core/src/main/java/btools/router/FormatJson.java b/brouter-core/src/main/java/btools/router/FormatJson.java index 53f0b4a..c380fa4 100644 --- a/brouter-core/src/main/java/btools/router/FormatJson.java +++ b/brouter-core/src/main/java/btools/router/FormatJson.java @@ -126,7 +126,7 @@ public class FormatJson extends Formatter { sb.append(" ]\n"); sb.append(" }\n"); - if (t.exportWaypoints || !t.pois.isEmpty()) { + if (t.exportWaypoints || t.exportCorrectedWaypoints || !t.pois.isEmpty()) { sb.append(" },\n"); for (int i = 0; i <= t.pois.size() - 1; i++) { OsmNodeNamed poi = t.pois.get(i); @@ -137,6 +137,7 @@ public class FormatJson extends Formatter { sb.append(" \n"); } if (t.exportWaypoints) { + if (!t.pois.isEmpty()) sb.append(" ,\n"); for (int i = 0; i <= t.matchedWaypoints.size() - 1; i++) { String type; if (i == 0) { @@ -155,6 +156,19 @@ public class FormatJson extends Formatter { sb.append(" \n"); } } + if (t.exportCorrectedWaypoints) { + if (t.exportWaypoints) sb.append(" ,\n"); + for (int i = 0; i <= t.correctedWaypoints.size() - 1; i++) { + String type = "via_corr"; + + OsmNodeNamed wp = t.correctedWaypoints.get(i); + addFeature(sb, type, wp.name, wp.ilat, wp.ilon, wp.getSElev()); + if (i < t.correctedWaypoints.size() - 1) { + sb.append(","); + } + sb.append(" \n"); + } + } } else { sb.append(" }\n"); } diff --git a/brouter-core/src/main/java/btools/router/FormatKml.java b/brouter-core/src/main/java/btools/router/FormatKml.java index 5798c5c..79d1e08 100644 --- a/brouter-core/src/main/java/btools/router/FormatKml.java +++ b/brouter-core/src/main/java/btools/router/FormatKml.java @@ -43,7 +43,7 @@ public class FormatKml extends Formatter { sb.append(" \n"); sb.append(" \n"); sb.append(" \n"); - if (t.exportWaypoints || !t.pois.isEmpty()) { + if (t.exportWaypoints || t.exportCorrectedWaypoints || !t.pois.isEmpty()) { if (!t.pois.isEmpty()) { sb.append(" \n"); sb.append(" poi\n"); @@ -62,6 +62,10 @@ public class FormatKml extends Formatter { } createFolder(sb, "end", t.matchedWaypoints.subList(size - 1, size)); } + if (t.exportCorrectedWaypoints) { + int size = t.correctedWaypoints.size(); + createViaFolder(sb, "via_cor", t.correctedWaypoints.subList(0, size)); + } } sb.append(" \n"); sb.append("\n"); @@ -79,6 +83,16 @@ public class FormatKml extends Formatter { sb.append(" \n"); } + private void createViaFolder(StringBuilder sb, String type, List waypoints) { + sb.append(" \n"); + sb.append(" " + type + "\n"); + for (int i = 0; i < waypoints.size(); i++) { + OsmNodeNamed wp = waypoints.get(i); + createPlaceMark(sb, wp.name, wp.ilat, wp.ilon); + } + sb.append(" \n"); + } + private void createPlaceMark(StringBuilder sb, String name, int ilat, int ilon) { sb.append(" \n"); sb.append(" " + StringUtils.escapeXml10(name) + "\n");