diff --git a/brouter-core/src/main/java/btools/router/Formatter.java b/brouter-core/src/main/java/btools/router/Formatter.java
index b9c3276..09bdb1d 100644
--- a/brouter-core/src/main/java/btools/router/Formatter.java
+++ b/brouter-core/src/main/java/btools/router/Formatter.java
@@ -8,10 +8,6 @@ import java.util.Locale;
import java.util.TimeZone;
public abstract class Formatter {
- private static final int OUTPUT_FORMAT_GPX = 0;
- private static final int OUTPUT_FORMAT_KML = 1;
- private static final int OUTPUT_FORMAT_JSON = 2;
- private static final int OUTPUT_FORMAT_CSV = 3;
static final String MESSAGES_HEADER = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost\tNodeCost\tInitialCost\tWayTags\tNodeTags\tTime\tEnergy";
diff --git a/brouter-core/src/main/java/btools/router/OsmTrack.java b/brouter-core/src/main/java/btools/router/OsmTrack.java
index d070256..9ccff98 100644
--- a/brouter-core/src/main/java/btools/router/OsmTrack.java
+++ b/brouter-core/src/main/java/btools/router/OsmTrack.java
@@ -7,33 +7,20 @@ package btools.router;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringWriter;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
-import java.util.TimeZone;
import btools.mapaccess.MatchedWaypoint;
import btools.mapaccess.OsmPos;
import btools.util.CompactLongMap;
import btools.util.FrozenLongMap;
-import btools.util.StringUtils;
public final class OsmTrack {
final public static String version = "1.7.3";
@@ -395,751 +382,8 @@ public final class OsmTrack {
public int plainAscend;
public int cost;
public int energy;
-
- /**
- * writes the track in gpx-format to a file
- *
- * @param filename the filename to write to
- */
- public void writeGpx(String filename) throws Exception {
- BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
- formatAsGpx(bw);
- bw.close();
- }
-
- public String formatAsGpx() {
- try {
- StringWriter sw = new StringWriter(8192);
- BufferedWriter bw = new BufferedWriter(sw);
- formatAsGpx(bw);
- bw.close();
- return sw.toString();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- public String formatAsGpx(BufferedWriter sb) throws IOException {
- int turnInstructionMode = voiceHints != null ? voiceHints.turnInstructionMode : 0;
-
- sb.append("\n");
- if (turnInstructionMode != 9) {
- for (int i = messageList.size() - 1; i >= 0; i--) {
- String message = messageList.get(i);
- if (i < messageList.size() - 1)
- message = "(alt-index " + i + ": " + message + " )";
- if (message != null)
- sb.append("\n");
- }
- }
-
- if (turnInstructionMode == 4) { // comment style
- sb.append("\n");
- sb.append("\n");
- sb.append("\n");
- }
- sb.append("\n");
- } else {
- sb.append(" creator=\"BRouter-" + version + "\" version=\"1.1\">\n");
- }
- if (turnInstructionMode == 9) {
- sb.append(" \n");
- sb.append(" ").append(name).append("\n");
- sb.append(" \n");
- sb.append(" ").append(messageList.get(0)).append("\n");
- if (params != null && params.size() > 0) {
- sb.append(" e : params.entrySet()) {
- if (i++ != 0) sb.append("&");
- sb.append(e.getKey()).append("=").append(e.getValue());
- }
- sb.append("]]>\n");
- }
- sb.append(" \n");
- sb.append(" \n");
- }
- if (turnInstructionMode == 3 || turnInstructionMode == 8) { // osmand style, cruiser
- float lastRteTime = 0;
-
- sb.append(" \n");
-
- float rteTime = getVoiceHintTime(0);
- StringBuffer first = new StringBuffer();
- // define start point
- {
- first.append(" \n")
- .append(" start\n \n");
- if (rteTime != lastRteTime) { // add timing only if available
- double t = rteTime - lastRteTime;
- first.append(" \n");
- lastRteTime = rteTime;
- }
- first.append(" 0\n \n \n");
- }
- if (turnInstructionMode == 8) {
- if (matchedWaypoints.get(0).direct && voiceHints.list.get(0).indexInTrack == 0) {
- // has a voice hint do nothing, voice hint will do
- } else {
- sb.append(first.toString());
- }
- } else {
- sb.append(first.toString());
- }
-
- for (int i = 0; i < voiceHints.list.size(); i++) {
- VoiceHint hint = voiceHints.list.get(i);
- sb.append(" \n")
- .append(" ")
- .append(turnInstructionMode == 3 ? hint.getMessageString() : hint.getCruiserMessageString())
- .append("\n \n");
-
- rteTime = getVoiceHintTime(i + 1);
-
- if (rteTime != lastRteTime) { // add timing only if available
- double t = rteTime - lastRteTime;
- sb.append(" \n");
- lastRteTime = rteTime;
- }
- sb.append(" ")
- .append(turnInstructionMode == 3 ? hint.getCommandString() : hint.getCruiserCommandString())
- .append("\n ").append("" + (int) hint.angle)
- .append("\n ").append("" + hint.indexInTrack).append("\n \n \n");
- }
- sb.append(" \n")
- .append(" destination\n \n");
- sb.append(" \n");
- sb.append(" ").append("" + (nodes.size() - 1)).append("\n \n \n");
-
- sb.append("\n");
- }
-
- if (turnInstructionMode == 7) { // old locus style
- float lastRteTime = getVoiceHintTime(0);
-
- for (int i = 0; i < voiceHints.list.size(); i++) {
- VoiceHint hint = voiceHints.list.get(i);
- sb.append(" ")
- .append(hint.selev == Short.MIN_VALUE ? "" : "" + (hint.selev / 4.) + "")
- .append("").append(hint.getMessageString()).append("")
- .append("").append("" + hint.distanceToNext).append("");
- float rteTime = getVoiceHintTime(i + 1);
- if (rteTime != lastRteTime) { // add timing only if available
- double t = rteTime - lastRteTime;
- double speed = hint.distanceToNext / t;
- sb.append("").append("" + t).append("")
- .append("").append("" + speed).append("");
- lastRteTime = rteTime;
- }
- sb.append("").append("" + hint.getLocusAction()).append("")
- .append("\n");
- }
- }
- if (turnInstructionMode == 5) { // gpsies style
- for (VoiceHint hint : voiceHints.list) {
- sb.append(" ")
- .append("").append(hint.getMessageString()).append("")
- .append("").append(hint.getSymbolString().toLowerCase()).append("")
- .append("").append(hint.getSymbolString()).append("")
- .append("\n");
- }
- }
-
- if (turnInstructionMode == 6) { // orux style
- for (VoiceHint hint : voiceHints.list) {
- sb.append(" ")
- .append(hint.selev == Short.MIN_VALUE ? "" : "" + (hint.selev / 4.) + "")
- .append("\n" +
- " \n" +
- " ").append("" + hint.getOruxAction())
- .append("\n" +
- " \n" +
- " \n" +
- " \n");
- }
- }
-
- for (int i = 0; i <= pois.size() - 1; i++) {
- OsmNodeNamed poi = pois.get(i);
- sb.append(" \n")
- .append(" ").append(StringUtils.escapeXml10(poi.name)).append("\n")
- .append(" \n");
- }
-
- if (exportWaypoints) {
- for (int i = 0; i <= matchedWaypoints.size() - 1; i++) {
- MatchedWaypoint wt = matchedWaypoints.get(i);
- sb.append(" \n")
- .append(" ").append(StringUtils.escapeXml10(wt.name)).append("\n");
- if (i == 0) {
- sb.append(" from\n");
- } else if (i == matchedWaypoints.size() - 1) {
- sb.append(" to\n");
- } else {
- sb.append(" via\n");
- }
- sb.append(" \n");
- }
- }
- sb.append(" \n");
- if (turnInstructionMode == 9
- || turnInstructionMode == 2
- || turnInstructionMode == 8
- || turnInstructionMode == 4) { // Locus, comment, cruise, brouter style
- sb.append(" ").append(name).append("\n");
- sb.append(" ").append(voiceHints.getTransportMode()).append("\n");
- } else {
- sb.append(" ").append(name).append("\n");
- }
-
- if (turnInstructionMode == 7) {
- sb.append(" \n");
- sb.append(" ").append("" + voiceHints.getLocusRouteType()).append("\n");
- sb.append(" 1\n");
- sb.append(" \n");
- }
-
-
- // all points
- sb.append(" \n");
- String lastway = "";
- boolean bNextDirect = false;
- OsmPathElement nn = null;
- String aSpeed;
-
- for (int idx = 0; idx < nodes.size(); idx++) {
- OsmPathElement n = nodes.get(idx);
- String sele = n.getSElev() == Short.MIN_VALUE ? "" : "" + n.getElev() + "";
- VoiceHint hint = getVoiceHint(idx);
- MatchedWaypoint mwpt = getMatchedWaypoint(idx);
-
- if (showTime) {
- sele += "";
- }
- if (turnInstructionMode == 8) {
- if (mwpt != null &&
- !mwpt.name.startsWith("via") && !mwpt.name.startsWith("from") && !mwpt.name.startsWith("to")) {
- sele += "" + mwpt.name + "";
- }
- }
- boolean bNeedHeader = false;
- if (turnInstructionMode == 9) { // trkpt/sym style
-
- if (hint != null) {
-
- if (mwpt != null &&
- !mwpt.name.startsWith("via") && !mwpt.name.startsWith("from") && !mwpt.name.startsWith("to")) {
- sele += "" + mwpt.name + "";
- }
- sele += "" + hint.getCruiserMessageString() + "";
- sele += "" + hint.getCommandString(hint.cmd) + "";
- if (mwpt != null) {
- sele += "Via";
- }
- sele += "";
- if (showspeed) {
- double speed = 0;
- if (nn != null) {
- int dist = n.calcDistance(nn);
- float dt = n.getTime() - nn.getTime();
- if (dt != 0.f) {
- speed = ((3.6f * dist) / dt + 0.5);
- }
- }
- sele += "" + (((int) (speed * 10)) / 10.f) + "";
- }
-
- sele += "" + hint.getCommandString() + ";" + (int) (hint.distanceToNext) + "," + hint.formatGeometry() + "";
- if (n.message != null && n.message.wayKeyValues != null && !n.message.wayKeyValues.equals(lastway)) {
- sele += "" + n.message.wayKeyValues + "";
- lastway = n.message.wayKeyValues;
- }
- if (n.message != null && n.message.nodeKeyValues != null) {
- sele += "" + n.message.nodeKeyValues + "";
- }
- sele += "";
-
- }
- if (idx == 0 && hint == null) {
- if (mwpt != null && mwpt.direct) {
- sele += "beeline";
- } else {
- sele += "start";
- }
- sele += "Via";
-
- } else if (idx == nodes.size() - 1 && hint == null) {
-
- sele += "end";
- sele += "Via";
-
- } else {
- if (mwpt != null && hint == null) {
- if (mwpt.direct) {
- // bNextDirect = true;
- sele += "beeline";
- } else {
- sele += "" + mwpt.name + "";
- }
- sele += "Via";
- bNextDirect = false;
- }
- }
-
-
- if (hint == null) {
- bNeedHeader = (showspeed || (n.message != null && n.message.wayKeyValues != null && !n.message.wayKeyValues.equals(lastway))) ||
- (n.message != null && n.message.nodeKeyValues != null);
- if (bNeedHeader) {
- sele += "";
- if (showspeed) {
- double speed = 0;
- if (nn != null) {
- int dist = n.calcDistance(nn);
- float dt = n.getTime() - nn.getTime();
- if (dt != 0.f) {
- speed = ((3.6f * dist) / dt + 0.5);
- }
- }
- sele += "" + (((int) (speed * 10)) / 10.f) + "";
- }
- if (n.message != null && n.message.wayKeyValues != null && !n.message.wayKeyValues.equals(lastway)) {
- sele += "" + n.message.wayKeyValues + "";
- lastway = n.message.wayKeyValues;
- }
- if (n.message != null && n.message.nodeKeyValues != null) {
- sele += "" + n.message.nodeKeyValues + "";
- }
- sele += "";
- }
- }
- }
-
- if (turnInstructionMode == 2) { // locus style new
- if (hint != null) {
- if (mwpt != null) {
- if (!mwpt.name.startsWith("via") && !mwpt.name.startsWith("from") && !mwpt.name.startsWith("to")) {
- sele += "" + mwpt.name + "";
- }
- if (mwpt.direct && bNextDirect) {
- sele += "" + hint.getLocusSymbolString() + "pass_placeShaping";
- // bNextDirect = false;
- } else if (mwpt.direct) {
- if (idx == 0)
- sele += "pass_placeVia";
- else
- sele += "pass_placeShaping";
- bNextDirect = true;
- } else if (bNextDirect) {
- sele += "beeline" + hint.getLocusSymbolString() + "Shaping";
- bNextDirect = false;
- } else {
- sele += "" + hint.getLocusSymbolString() + "Via";
- }
- } else {
- sele += "" + hint.getLocusSymbolString() + "";
- }
- } else {
- if (idx == 0 && hint == null) {
-
- int pos = sele.indexOf("" + mwpt.name + "";
- if (mwpt != null && mwpt.direct) {
- bNextDirect = true;
- }
- sele += "pass_place";
- sele += "Via";
-
- } else if (idx == nodes.size() - 1 && hint == null) {
-
- int pos = sele.indexOf("" + mwpt.name + "";
- if (bNextDirect) {
- sele += "beeline";
- }
- sele += "pass_place";
- sele += "Via";
-
- } else {
- if (mwpt != null) {
- if (!mwpt.name.startsWith("via") && !mwpt.name.startsWith("from") && !mwpt.name.startsWith("to")) {
- sele += "" + mwpt.name + "";
- }
- if (mwpt.direct && bNextDirect) {
- sele += "beelinepass_placeShaping";
- } else if (mwpt.direct) {
- if (idx == 0)
- sele += "pass_placeVia";
- else
- sele += "pass_placeShaping";
- bNextDirect = true;
- } else if (bNextDirect) {
- sele += "beelinepass_placeShaping";
- bNextDirect = false;
- } else if (mwpt.name.startsWith("via") ||
- mwpt.name.startsWith("from") ||
- mwpt.name.startsWith("to")) {
- if (bNextDirect) {
- sele += "beelinepass_placeShaping";
- } else {
- sele += "pass_placeVia";
- }
- bNextDirect = false;
- } else {
- sele += "" + mwpt.name + "";
- sele += "pass_placeVia";
- }
- }
- }
- }
- }
- sb.append(" ").append(sele).append("\n");
-
- nn = n;
- }
-
- sb.append(" \n");
- sb.append(" \n");
- sb.append("\n");
-
- return sb.toString();
- }
-
- static public String formatAsGpxWaypoint(OsmNodeNamed n) {
- try {
- StringWriter sw = new StringWriter(8192);
- BufferedWriter bw = new BufferedWriter(sw);
- formatGpxHeader(bw);
- formatWaypointGpx(bw, n);
- formatGpxFooter(bw);
- bw.close();
- sw.close();
- return sw.toString();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- static public void formatGpxHeader(BufferedWriter sb) throws IOException {
- sb.append("\n");
- sb.append("\n");
- }
-
- static public void formatGpxFooter(BufferedWriter sb) throws IOException {
- sb.append("\n");
- }
-
- static public void formatWaypointGpx(BufferedWriter sb, OsmNodeNamed n) throws IOException {
- sb.append(" ");
- if (n.getSElev() != Short.MIN_VALUE) {
- sb.append("").append("" + n.getElev()).append("");
- }
- if (n.name != null) {
- sb.append("").append(StringUtils.escapeXml10(n.name)).append("");
- }
- if (n.nodeDescription != null) {
- sb.append("").append("hat desc").append("");
- }
- sb.append("\n");
- }
-
- public void writeKml(String filename) throws Exception {
- BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
-
- bw.write(formatAsKml());
- bw.close();
- }
-
- public String formatAsKml() {
- StringBuilder sb = new StringBuilder(8192);
-
- sb.append("\n");
-
- sb.append("\n");
- sb.append(" \n");
- sb.append(" KML Samples\n");
- sb.append(" 1\n");
- sb.append(" 3.497064\n");
- sb.append(" 872\n");
- sb.append(" To enable simple instructions add: 'instructions=1' as parameter to the URL\n");
- sb.append(" \n");
- sb.append(" Paths\n");
- sb.append(" 0\n");
- sb.append(" Examples of paths.\n");
- sb.append(" \n");
- sb.append(" Tessellated\n");
- sb.append(" 0\n");
- sb.append(" tag has a value of 1, the line will contour to the underlying terrain]]>\n");
- sb.append(" \n");
- sb.append(" 1\n");
- sb.append(" ");
-
- for (OsmPathElement n : nodes) {
- sb.append(formatILon(n.getILon())).append(",").append(formatILat(n.getILat())).append("\n");
- }
-
- sb.append(" \n");
- sb.append(" \n");
- sb.append(" \n");
- sb.append(" \n");
- if (exportWaypoints || !pois.isEmpty()) {
- if (!pois.isEmpty()) {
- sb.append(" \n");
- sb.append(" poi\n");
- for (int i = 0; i < pois.size(); i++) {
- OsmNodeNamed poi = pois.get(i);
- createPlaceMark(sb, poi.name, poi.ilat, poi.ilon);
- }
- sb.append(" \n");
- }
-
- if (exportWaypoints) {
- int size = matchedWaypoints.size();
- createFolder(sb, "start", matchedWaypoints.subList(0, 1));
- if (matchedWaypoints.size() > 2) {
- createFolder(sb, "via", matchedWaypoints.subList(1, size - 1));
- }
- createFolder(sb, "end", matchedWaypoints.subList(size - 1, size));
- }
- }
- sb.append(" \n");
- sb.append("\n");
-
- return sb.toString();
- }
-
- private void createFolder(StringBuilder sb, String type, List waypoints) {
- sb.append(" \n");
- sb.append(" " + type + "\n");
- for (int i = 0; i < waypoints.size(); i++) {
- MatchedWaypoint wp = waypoints.get(i);
- createPlaceMark(sb, wp.name, wp.waypoint.ilat, wp.waypoint.ilon);
- }
- sb.append(" \n");
- }
-
- private void createPlaceMark(StringBuilder sb, String name, int ilat, int ilon) {
- sb.append(" \n");
- sb.append(" " + StringUtils.escapeXml10(name) + "\n");
- sb.append(" \n");
- sb.append(" " + formatILon(ilon) + "," + formatILat(ilat) + "\n");
- sb.append(" \n");
- sb.append(" \n");
- }
-
public List iternity;
- public void writeJson(String filename) throws Exception {
- BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
-
- bw.write(formatAsGeoJson());
- bw.close();
- }
-
-
- public String formatAsGeoJson() {
- int turnInstructionMode = voiceHints != null ? voiceHints.turnInstructionMode : 0;
-
- StringBuilder sb = new StringBuilder(8192);
-
- sb.append("{\n");
- sb.append(" \"type\": \"FeatureCollection\",\n");
- sb.append(" \"features\": [\n");
- sb.append(" {\n");
- sb.append(" \"type\": \"Feature\",\n");
- sb.append(" \"properties\": {\n");
- sb.append(" \"creator\": \"BRouter-" + version + "\",\n");
- sb.append(" \"name\": \"").append(name).append("\",\n");
- sb.append(" \"track-length\": \"").append(distance).append("\",\n");
- sb.append(" \"filtered ascend\": \"").append(ascend).append("\",\n");
- sb.append(" \"plain-ascend\": \"").append(plainAscend).append("\",\n");
- sb.append(" \"total-time\": \"").append(getTotalSeconds()).append("\",\n");
- sb.append(" \"total-energy\": \"").append(energy).append("\",\n");
- sb.append(" \"cost\": \"").append(cost).append("\",\n");
- if (voiceHints != null && !voiceHints.list.isEmpty()) {
- sb.append(" \"voicehints\": [\n");
- for (VoiceHint hint : voiceHints.list) {
- sb.append(" [");
- sb.append(hint.indexInTrack);
- sb.append(',').append(hint.getJsonCommandIndex());
- sb.append(',').append(hint.getExitNumber());
- sb.append(',').append(hint.distanceToNext);
- sb.append(',').append((int) hint.angle);
-
- // not always include geometry because longer and only needed for comment style
- if (turnInstructionMode == 4) { // comment style
- sb.append(",\"").append(hint.formatGeometry()).append("\"");
- }
-
- sb.append("],\n");
- }
- sb.deleteCharAt(sb.lastIndexOf(","));
- sb.append(" ],\n");
- }
- if (showSpeedProfile) { // set in profile
- List sp = aggregateSpeedProfile();
- if (sp.size() > 0) {
- sb.append(" \"speedprofile\": [\n");
- for (int i = sp.size() - 1; i >= 0; i--) {
- sb.append(" [").append(sp.get(i)).append(i > 0 ? "],\n" : "]\n");
- }
- sb.append(" ],\n");
- }
- }
- // ... traditional message list
- {
- sb.append(" \"messages\": [\n");
- sb.append(" [\"").append(MESSAGES_HEADER.replaceAll("\t", "\", \"")).append("\"],\n");
- for (String m : aggregateMessages()) {
- sb.append(" [\"").append(m.replaceAll("\t", "\", \"")).append("\"],\n");
- }
- sb.deleteCharAt(sb.lastIndexOf(","));
- sb.append(" ],\n");
- }
-
- if (getTotalSeconds() > 0) {
- sb.append(" \"times\": [");
- DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getInstance(Locale.ENGLISH);
- decimalFormat.applyPattern("0.###");
- for (OsmPathElement n : nodes) {
- sb.append(decimalFormat.format(n.getTime())).append(",");
- }
- sb.deleteCharAt(sb.lastIndexOf(","));
- sb.append("]\n");
- } else {
- sb.deleteCharAt(sb.lastIndexOf(","));
- }
-
- sb.append(" },\n");
-
- if (iternity != null) {
- sb.append(" \"iternity\": [\n");
- for (String s : iternity) {
- sb.append(" \"").append(s).append("\",\n");
- }
- sb.deleteCharAt(sb.lastIndexOf(","));
- sb.append(" ],\n");
- }
- sb.append(" \"geometry\": {\n");
- sb.append(" \"type\": \"LineString\",\n");
- sb.append(" \"coordinates\": [\n");
-
- OsmPathElement nn = null;
- for (OsmPathElement n : nodes) {
- String sele = n.getSElev() == Short.MIN_VALUE ? "" : ", " + n.getElev();
- if (showspeed) { // hack: show speed instead of elevation
- double speed = 0;
- if (nn != null) {
- int dist = n.calcDistance(nn);
- float dt = n.getTime() - nn.getTime();
- if (dt != 0.f) {
- speed = ((3.6f * dist) / dt + 0.5);
- }
- }
- sele = ", " + (((int) (speed * 10)) / 10.f);
- }
- sb.append(" [").append(formatILon(n.getILon())).append(", ").append(formatILat(n.getILat()))
- .append(sele).append("],\n");
- nn = n;
- }
- sb.deleteCharAt(sb.lastIndexOf(","));
-
- sb.append(" ]\n");
- sb.append(" }\n");
- if (exportWaypoints || !pois.isEmpty()) {
- sb.append(" },\n");
- for (int i = 0; i <= pois.size() - 1; i++) {
- OsmNodeNamed poi = pois.get(i);
- addFeature(sb, "poi", poi.name, poi.ilat, poi.ilon);
- if (i < matchedWaypoints.size() - 1) {
- sb.append(",");
- }
- sb.append(" \n");
- }
- if (exportWaypoints) {
- for (int i = 0; i <= matchedWaypoints.size() - 1; i++) {
- String type;
- if (i == 0) {
- type = "from";
- } else if (i == matchedWaypoints.size() - 1) {
- type = "to";
- } else {
- type = "via";
- }
-
- MatchedWaypoint wp = matchedWaypoints.get(i);
- addFeature(sb, type, wp.name, wp.waypoint.ilat, wp.waypoint.ilon);
- if (i < matchedWaypoints.size() - 1) {
- sb.append(",");
- }
- sb.append(" \n");
- }
- }
- } else {
- sb.append(" }\n");
- }
- sb.append(" ]\n");
- sb.append("}\n");
-
- return sb.toString();
- }
-
- private void addFeature(StringBuilder sb, String type, String name, int ilat, int ilon) {
- sb.append(" {\n");
- sb.append(" \"type\": \"Feature\",\n");
- sb.append(" \"properties\": {\n");
- sb.append(" \"name\": \"" + StringUtils.escapeJson(name) + "\",\n");
- sb.append(" \"type\": \"" + type + "\"\n");
- sb.append(" },\n");
- sb.append(" \"geometry\": {\n");
- sb.append(" \"type\": \"Point\",\n");
- sb.append(" \"coordinates\": [\n");
- sb.append(" " + formatILon(ilon) + ",\n");
- sb.append(" " + formatILat(ilat) + "\n");
- sb.append(" ]\n");
- sb.append(" }\n");
- sb.append(" }");
- }
-
public VoiceHint getVoiceHint(int i) {
if (voiceHints == null) return null;
for (VoiceHint hint : voiceHints.list) {
@@ -1173,123 +417,6 @@ public final class OsmTrack {
return (int) (s + 0.5);
}
- public String getFormattedTime() {
- return format1(getTotalSeconds() / 60.) + "m";
- }
-
- public String getFormattedTime2() {
- int seconds = (int) (getTotalSeconds() + 0.5);
- int hours = seconds / 3600;
- int minutes = (seconds - hours * 3600) / 60;
- seconds = seconds - hours * 3600 - minutes * 60;
- String time = "";
- if (hours != 0)
- time = "" + hours + "h ";
- if (minutes != 0)
- time = time + minutes + "m ";
- if (seconds != 0)
- time = time + seconds + "s";
- return time;
- }
-
- SimpleDateFormat TIMESTAMP_FORMAT;
-
- public String getFormattedTime3(float time) {
- if (TIMESTAMP_FORMAT == null) {
- TIMESTAMP_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
- TIMESTAMP_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
- }
- // yyyy-mm-ddThh:mm:ss.SSSZ
- Date d = new Date((long) (time * 1000f));
- return TIMESTAMP_FORMAT.format(d);
- }
-
- public String getFormattedEnergy() {
- return format1(energy / 3600000.) + "kwh";
- }
-
- private static String formatILon(int ilon) {
- return formatPos(ilon - 180000000);
- }
-
- private static String formatILat(int ilat) {
- return formatPos(ilat - 90000000);
- }
-
- private static String formatPos(int p) {
- boolean negative = p < 0;
- if (negative)
- p = -p;
- char[] ac = new char[12];
- int i = 11;
- while (p != 0 || i > 3) {
- ac[i--] = (char) ('0' + (p % 10));
- p /= 10;
- if (i == 5)
- ac[i--] = '.';
- }
- if (negative)
- ac[i--] = '-';
- return new String(ac, i + 1, 11 - i);
- }
-
- private String format1(double n) {
- String s = "" + (long) (n * 10 + 0.5);
- int len = s.length();
- return s.substring(0, len - 1) + "." + s.charAt(len - 1);
- }
-
- public void dumpMessages(String filename, RoutingContext rc) throws Exception {
- BufferedWriter bw = filename == null ? null : new BufferedWriter(new FileWriter(filename));
- writeMessages(bw, rc);
- }
-
- public void writeMessages(BufferedWriter bw, RoutingContext rc) throws Exception {
- dumpLine(bw, MESSAGES_HEADER);
- for (String m : aggregateMessages()) {
- dumpLine(bw, m);
- }
- if (bw != null)
- bw.close();
- }
-
- private void dumpLine(BufferedWriter bw, String s) throws Exception {
- if (bw == null) {
- System.out.println(s);
- } else {
- bw.write(s);
- bw.write("\n");
- }
- }
-
- public void readGpx(String filename) throws Exception {
- File f = new File(filename);
- if (!f.exists())
- return;
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
-
- for (; ; ) {
- String line = br.readLine();
- if (line == null)
- break;
-
- int idx0 = line.indexOf("= 0) {
- idx0 += 12;
- int idx1 = line.indexOf('"', idx0);
- int ilon = (int) ((Double.parseDouble(line.substring(idx0, idx1)) + 180.) * 1000000. + 0.5);
- int idx2 = line.indexOf(" lat=\"");
- if (idx2 < 0)
- continue;
- idx2 += 6;
- int idx3 = line.indexOf('"', idx2);
- int ilat = (int) ((Double.parseDouble(line.substring(idx2, idx3)) + 90.) * 1000000. + 0.5);
- nodes.add(OsmPathElement.create(ilon, ilat, (short) 0, null, false));
- }
- }
- br.close();
- }
-
public boolean equalsTrack(OsmTrack t) {
if (nodes.size() != t.nodes.size())
return false;