From 76c1641899fad63ddefd61077023e028dd29de27 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Sat, 23 Aug 2014 20:54:22 +0200 Subject: [PATCH 1/2] add GeoJSON track format --- .../src/main/java/btools/router/OsmTrack.java | 37 +++++++++++++++++++ .../btools/server/request/ServerHandler.java | 10 ++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/brouter-core/src/main/java/btools/router/OsmTrack.java b/brouter-core/src/main/java/btools/router/OsmTrack.java index 7bdb61b..5959d98 100644 --- a/brouter-core/src/main/java/btools/router/OsmTrack.java +++ b/brouter-core/src/main/java/btools/router/OsmTrack.java @@ -286,6 +286,43 @@ public final class OsmTrack return sb.toString(); } + public String formatAsGeoJson() + { + 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-1.0.2\",\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( " \"cost\": \"" ).append( cost ).append( "\"\n" ); + sb.append( " },\n" ); + sb.append( " \"geometry\": {\n" ); + sb.append( " \"type\": \"LineString\",\n" ); + sb.append( " \"coordinates\": [\n" ); + + for( OsmPathElement n : nodes ) + { + String sele = n.getSElev() == Short.MIN_VALUE ? "" : ", " + n.getElev(); + sb.append( " [" ).append(formatPos(n.getILon() - 180000000)).append(", ").append(formatPos(n.getILat() - 90000000)).append(sele).append( "],\n" ); + } + sb.deleteCharAt( sb.lastIndexOf( "," ) ); + + sb.append( " ]\n" ); + sb.append( " }\n" ); + sb.append( " }\n" ); + sb.append( " ]\n" ); + sb.append( "}\n" ); + + return sb.toString(); + } + private static String formatPos( int p ) { boolean negative = p < 0; diff --git a/brouter-server/src/main/java/btools/server/request/ServerHandler.java b/brouter-server/src/main/java/btools/server/request/ServerHandler.java index 2e91b62..68fc2b9 100644 --- a/brouter-server/src/main/java/btools/server/request/ServerHandler.java +++ b/brouter-server/src/main/java/btools/server/request/ServerHandler.java @@ -21,7 +21,7 @@ import java.util.List; * nogos = lon,lat,radius|... (optional, radius in meters) * profile = profile file name without .brf * alternativeidx = [0|1|2|3] (optional, default 0) - * format = [kml|gpx] (optional, default gpx) + * format = [kml|gpx|geojson] (optional, default gpx) * * Example URLs: * http://localhost:17777/brouter?lonlats=8.799297,49.565883|8.811764,49.563606&nogos=&profile=trekking&alternativeidx=0&format=gpx @@ -100,6 +100,10 @@ public class ServerHandler extends RequestHandler { else if ("kml".equals(format)) { result = track.formatAsKml(); + } + else if ("geojson".equals(format)) + { + result = track.formatAsGeoJson(); } else if ("csv".equals(format)) { @@ -141,6 +145,10 @@ public class ServerHandler extends RequestHandler { { result = "application/vnd.google-earth.kml+xml"; } + else if ( "geojson".equals( format ) ) + { + result = "application/vnd.geo+json"; + } else if ( "csv".equals( format ) ) { result = "text/tab-separated-values"; From dbc0222784e9e4e6d910b848a33cfe702591d86d Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Sat, 23 Aug 2014 21:55:45 +0200 Subject: [PATCH 2/2] formatting: replace tabs with spaces --- .../btools/server/request/ServerHandler.java | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/brouter-server/src/main/java/btools/server/request/ServerHandler.java b/brouter-server/src/main/java/btools/server/request/ServerHandler.java index 68fc2b9..bbee59a 100644 --- a/brouter-server/src/main/java/btools/server/request/ServerHandler.java +++ b/brouter-server/src/main/java/btools/server/request/ServerHandler.java @@ -32,14 +32,14 @@ public class ServerHandler extends RequestHandler { private RoutingContext rc; - public ServerHandler( ServiceContext serviceContext, HashMap params ) - { - super( serviceContext, params ); - } + public ServerHandler( ServiceContext serviceContext, HashMap params ) + { + super( serviceContext, params ); + } - @Override - public RoutingContext readRoutingContext() - { + @Override + public RoutingContext readRoutingContext() + { rc = new RoutingContext(); String profile = params.get( "profile" ); @@ -61,50 +61,50 @@ public class ServerHandler extends RequestHandler { } return rc; - } + } - @Override - public List readWayPointList() - { - // lon,lat|... - String lonLats = params.get( "lonlats" ); - if (lonLats == null) throw new IllegalArgumentException( "lonlats parameter not set" ); + @Override + public List readWayPointList() + { + // lon,lat|... + String lonLats = params.get( "lonlats" ); + if (lonLats == null) throw new IllegalArgumentException( "lonlats parameter not set" ); - String[] coords = lonLats.split("\\|"); - if (coords.length < 2) throw new IllegalArgumentException( "we need two lat/lon points at least!" ); - + String[] coords = lonLats.split("\\|"); + if (coords.length < 2) throw new IllegalArgumentException( "we need two lat/lon points at least!" ); + List wplist = new ArrayList(); for (int i = 0; i < coords.length; i++) - { - String[] lonLat = coords[i].split(","); - wplist.add( readPosition( lonLat[0], lonLat[1], "via" + i ) ); - } + { + String[] lonLat = coords[i].split(","); + wplist.add( readPosition( lonLat[0], lonLat[1], "via" + i ) ); + } wplist.get(0).name = "from"; wplist.get(wplist.size()-1).name = "to"; return wplist; - } - - @Override - public String formatTrack(OsmTrack track) - { - String result; - // optional, may be null - String format = params.get( "format" ); + } + + @Override + public String formatTrack(OsmTrack track) + { + String result; + // optional, may be null + String format = params.get( "format" ); - if (format == null || "gpx".equals(format)) - { - result = track.formatAsGpx(); - } - else if ("kml".equals(format)) - { - result = track.formatAsKml(); + if (format == null || "gpx".equals(format)) + { + result = track.formatAsGpx(); + } + else if ("kml".equals(format)) + { + result = track.formatAsKml(); + } + else if ("geojson".equals(format)) + { + result = track.formatAsGeoJson(); } - else if ("geojson".equals(format)) - { - result = track.formatAsGeoJson(); - } else if ("csv".equals(format)) { try @@ -119,13 +119,13 @@ public class ServerHandler extends RequestHandler { return "Error: " + ex.getMessage(); } } - else { - System.out.println("unknown track format '" + format + "', using default"); - result = track.formatAsGpx(); - } - - return result; - } + else { + System.out.println("unknown track format '" + format + "', using default"); + result = track.formatAsGpx(); + } + + return result; + } @Override public String getMimeType()