commit
0cb894465e
2 changed files with 90 additions and 45 deletions
|
@ -286,6 +286,43 @@ public final class OsmTrack
|
||||||
return sb.toString();
|
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 )
|
private static String formatPos( int p )
|
||||||
{
|
{
|
||||||
boolean negative = p < 0;
|
boolean negative = p < 0;
|
||||||
|
|
|
@ -21,7 +21,7 @@ import java.util.List;
|
||||||
* nogos = lon,lat,radius|... (optional, radius in meters)
|
* nogos = lon,lat,radius|... (optional, radius in meters)
|
||||||
* profile = profile file name without .brf
|
* profile = profile file name without .brf
|
||||||
* alternativeidx = [0|1|2|3] (optional, default 0)
|
* alternativeidx = [0|1|2|3] (optional, default 0)
|
||||||
* format = [kml|gpx] (optional, default gpx)
|
* format = [kml|gpx|geojson] (optional, default gpx)
|
||||||
*
|
*
|
||||||
* Example URLs:
|
* Example URLs:
|
||||||
* http://localhost:17777/brouter?lonlats=8.799297,49.565883|8.811764,49.563606&nogos=&profile=trekking&alternativeidx=0&format=gpx
|
* http://localhost:17777/brouter?lonlats=8.799297,49.565883|8.811764,49.563606&nogos=&profile=trekking&alternativeidx=0&format=gpx
|
||||||
|
@ -32,14 +32,14 @@ public class ServerHandler extends RequestHandler {
|
||||||
|
|
||||||
private RoutingContext rc;
|
private RoutingContext rc;
|
||||||
|
|
||||||
public ServerHandler( ServiceContext serviceContext, HashMap<String, String> params )
|
public ServerHandler( ServiceContext serviceContext, HashMap<String, String> params )
|
||||||
{
|
{
|
||||||
super( serviceContext, params );
|
super( serviceContext, params );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RoutingContext readRoutingContext()
|
public RoutingContext readRoutingContext()
|
||||||
{
|
{
|
||||||
rc = new RoutingContext();
|
rc = new RoutingContext();
|
||||||
|
|
||||||
String profile = params.get( "profile" );
|
String profile = params.get( "profile" );
|
||||||
|
@ -61,46 +61,50 @@ public class ServerHandler extends RequestHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<OsmNodeNamed> readWayPointList()
|
public List<OsmNodeNamed> readWayPointList()
|
||||||
{
|
{
|
||||||
// lon,lat|...
|
// lon,lat|...
|
||||||
String lonLats = params.get( "lonlats" );
|
String lonLats = params.get( "lonlats" );
|
||||||
if (lonLats == null) throw new IllegalArgumentException( "lonlats parameter not set" );
|
if (lonLats == null) throw new IllegalArgumentException( "lonlats parameter not set" );
|
||||||
|
|
||||||
String[] coords = lonLats.split("\\|");
|
String[] coords = lonLats.split("\\|");
|
||||||
if (coords.length < 2) throw new IllegalArgumentException( "we need two lat/lon points at least!" );
|
if (coords.length < 2) throw new IllegalArgumentException( "we need two lat/lon points at least!" );
|
||||||
|
|
||||||
List<OsmNodeNamed> wplist = new ArrayList<OsmNodeNamed>();
|
List<OsmNodeNamed> wplist = new ArrayList<OsmNodeNamed>();
|
||||||
for (int i = 0; i < coords.length; i++)
|
for (int i = 0; i < coords.length; i++)
|
||||||
{
|
{
|
||||||
String[] lonLat = coords[i].split(",");
|
String[] lonLat = coords[i].split(",");
|
||||||
wplist.add( readPosition( lonLat[0], lonLat[1], "via" + i ) );
|
wplist.add( readPosition( lonLat[0], lonLat[1], "via" + i ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
wplist.get(0).name = "from";
|
wplist.get(0).name = "from";
|
||||||
wplist.get(wplist.size()-1).name = "to";
|
wplist.get(wplist.size()-1).name = "to";
|
||||||
|
|
||||||
return wplist;
|
return wplist;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String formatTrack(OsmTrack track)
|
public String formatTrack(OsmTrack track)
|
||||||
{
|
{
|
||||||
String result;
|
String result;
|
||||||
// optional, may be null
|
// optional, may be null
|
||||||
String format = params.get( "format" );
|
String format = params.get( "format" );
|
||||||
|
|
||||||
if (format == null || "gpx".equals(format))
|
if (format == null || "gpx".equals(format))
|
||||||
{
|
{
|
||||||
result = track.formatAsGpx();
|
result = track.formatAsGpx();
|
||||||
}
|
}
|
||||||
else if ("kml".equals(format))
|
else if ("kml".equals(format))
|
||||||
{
|
{
|
||||||
result = track.formatAsKml();
|
result = track.formatAsKml();
|
||||||
}
|
}
|
||||||
|
else if ("geojson".equals(format))
|
||||||
|
{
|
||||||
|
result = track.formatAsGeoJson();
|
||||||
|
}
|
||||||
else if ("csv".equals(format))
|
else if ("csv".equals(format))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -115,13 +119,13 @@ public class ServerHandler extends RequestHandler {
|
||||||
return "Error: " + ex.getMessage();
|
return "Error: " + ex.getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
System.out.println("unknown track format '" + format + "', using default");
|
System.out.println("unknown track format '" + format + "', using default");
|
||||||
result = track.formatAsGpx();
|
result = track.formatAsGpx();
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMimeType()
|
public String getMimeType()
|
||||||
|
@ -141,6 +145,10 @@ public class ServerHandler extends RequestHandler {
|
||||||
{
|
{
|
||||||
result = "application/vnd.google-earth.kml+xml";
|
result = "application/vnd.google-earth.kml+xml";
|
||||||
}
|
}
|
||||||
|
else if ( "geojson".equals( format ) )
|
||||||
|
{
|
||||||
|
result = "application/vnd.geo+json";
|
||||||
|
}
|
||||||
else if ( "csv".equals( format ) )
|
else if ( "csv".equals( format ) )
|
||||||
{
|
{
|
||||||
result = "text/tab-separated-values";
|
result = "text/tab-separated-values";
|
||||||
|
|
Loading…
Reference in a new issue