commit
c16c242a65
4 changed files with 62 additions and 11 deletions
|
@ -289,7 +289,11 @@ public final class OsmTrack
|
||||||
public void dumpMessages( String filename, RoutingContext rc ) throws Exception
|
public void dumpMessages( String filename, RoutingContext rc ) throws Exception
|
||||||
{
|
{
|
||||||
BufferedWriter bw = filename == null ? null : new BufferedWriter( new FileWriter( filename ) );
|
BufferedWriter bw = filename == null ? null : new BufferedWriter( new FileWriter( filename ) );
|
||||||
|
writeMessages( bw, rc );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeMessages( BufferedWriter bw, RoutingContext rc ) throws Exception
|
||||||
|
{
|
||||||
// csv-header-line
|
// csv-header-line
|
||||||
|
|
||||||
String header = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost";
|
String header = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost";
|
||||||
|
|
|
@ -96,16 +96,16 @@ public class RouteServer extends Thread
|
||||||
cr.quite = true;
|
cr.quite = true;
|
||||||
cr.doRun( maxRunningTime );
|
cr.doRun( maxRunningTime );
|
||||||
|
|
||||||
writeHttpHeader(bw);
|
|
||||||
|
|
||||||
if ( cr.getErrorMessage() != null )
|
if ( cr.getErrorMessage() != null )
|
||||||
{
|
{
|
||||||
|
writeHttpHeader(bw);
|
||||||
bw.write( cr.getErrorMessage() );
|
bw.write( cr.getErrorMessage() );
|
||||||
bw.write( "\n" );
|
bw.write( "\n" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
OsmTrack track = cr.getFoundTrack();
|
OsmTrack track = cr.getFoundTrack();
|
||||||
|
writeHttpHeader(bw, handler.getMimeType());
|
||||||
if ( track != null )
|
if ( track != null )
|
||||||
{
|
{
|
||||||
bw.write( handler.formatTrack(track) );
|
bw.write( handler.formatTrack(track) );
|
||||||
|
@ -204,12 +204,18 @@ public class RouteServer extends Thread
|
||||||
}
|
}
|
||||||
return maxRunningTime;
|
return maxRunningTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeHttpHeader(BufferedWriter bw) throws IOException {
|
private static void writeHttpHeader( BufferedWriter bw ) throws IOException
|
||||||
|
{
|
||||||
|
writeHttpHeader( bw, "text/plain" );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void writeHttpHeader( BufferedWriter bw, String mimeType ) throws IOException
|
||||||
|
{
|
||||||
// http-header
|
// http-header
|
||||||
bw.write( "HTTP/1.1 200 OK\n" );
|
bw.write( "HTTP/1.1 200 OK\n" );
|
||||||
bw.write( "Connection: close\n" );
|
bw.write( "Connection: close\n" );
|
||||||
bw.write( "Content-Type: text/xml; charset=utf-8\n" );
|
bw.write( "Content-Type: " + mimeType + "; charset=utf-8\n" );
|
||||||
bw.write( "Access-Control-Allow-Origin: *\n" );
|
bw.write( "Access-Control-Allow-Origin: *\n" );
|
||||||
bw.write( "\n" );
|
bw.write( "\n" );
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,4 +25,5 @@ public abstract class RequestHandler
|
||||||
|
|
||||||
public abstract String formatTrack(OsmTrack track);
|
public abstract String formatTrack(OsmTrack track);
|
||||||
|
|
||||||
|
public abstract String getMimeType();
|
||||||
}
|
}
|
|
@ -1,14 +1,15 @@
|
||||||
package btools.server.request;
|
package btools.server.request;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import btools.router.OsmNodeNamed;
|
import btools.router.OsmNodeNamed;
|
||||||
import btools.router.OsmTrack;
|
import btools.router.OsmTrack;
|
||||||
import btools.router.RoutingContext;
|
import btools.router.RoutingContext;
|
||||||
import btools.server.ServiceContext;
|
import btools.server.ServiceContext;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URL query parameter handler for web and standalone server. Supports all
|
* URL query parameter handler for web and standalone server. Supports all
|
||||||
|
@ -29,6 +30,8 @@ import java.io.File;
|
||||||
*/
|
*/
|
||||||
public class ServerHandler extends RequestHandler {
|
public class ServerHandler extends RequestHandler {
|
||||||
|
|
||||||
|
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 );
|
||||||
|
@ -37,7 +40,7 @@ public class ServerHandler extends RequestHandler {
|
||||||
@Override
|
@Override
|
||||||
public RoutingContext readRoutingContext()
|
public RoutingContext readRoutingContext()
|
||||||
{
|
{
|
||||||
RoutingContext rc = new RoutingContext();
|
rc = new RoutingContext();
|
||||||
|
|
||||||
String profile = params.get( "profile" );
|
String profile = params.get( "profile" );
|
||||||
// when custom profile replace prefix with directory path
|
// when custom profile replace prefix with directory path
|
||||||
|
@ -98,6 +101,20 @@ public class ServerHandler extends RequestHandler {
|
||||||
{
|
{
|
||||||
result = track.formatAsKml();
|
result = track.formatAsKml();
|
||||||
}
|
}
|
||||||
|
else if ("csv".equals(format))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
BufferedWriter bw = new BufferedWriter(sw);
|
||||||
|
track.writeMessages( bw, rc );
|
||||||
|
return sw.toString();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
@ -105,7 +122,30 @@ public class ServerHandler extends RequestHandler {
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMimeType()
|
||||||
|
{
|
||||||
|
// default
|
||||||
|
String result = "text/plain";
|
||||||
|
|
||||||
|
// optional, may be null
|
||||||
|
String format = params.get( "format" );
|
||||||
|
if ( format != null )
|
||||||
|
{
|
||||||
|
if ( "gpx".equals( format ) || "kml".equals( format ) )
|
||||||
|
{
|
||||||
|
result = "text/xml";
|
||||||
|
}
|
||||||
|
else if ( "csv".equals( format ) )
|
||||||
|
{
|
||||||
|
result = "text/tab-separated-values";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private static OsmNodeNamed readPosition( String vlon, String vlat, String name )
|
private static OsmNodeNamed readPosition( String vlon, String vlat, String name )
|
||||||
{
|
{
|
||||||
if ( vlon == null ) throw new IllegalArgumentException( "lon " + name + " not found in input" );
|
if ( vlon == null ) throw new IllegalArgumentException( "lon " + name + " not found in input" );
|
||||||
|
|
Loading…
Reference in a new issue