CSV download
This commit is contained in:
parent
e17375adfd
commit
8827b205e5
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
|
||||
{
|
||||
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
|
||||
|
||||
String header = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost";
|
||||
|
|
|
@ -96,16 +96,16 @@ public class RouteServer extends Thread
|
|||
cr.quite = true;
|
||||
cr.doRun( maxRunningTime );
|
||||
|
||||
writeHttpHeader(bw);
|
||||
|
||||
if ( cr.getErrorMessage() != null )
|
||||
{
|
||||
writeHttpHeader(bw);
|
||||
bw.write( cr.getErrorMessage() );
|
||||
bw.write( "\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
OsmTrack track = cr.getFoundTrack();
|
||||
writeHttpHeader(bw, handler.getMimeType());
|
||||
if ( track != null )
|
||||
{
|
||||
bw.write( handler.formatTrack(track) );
|
||||
|
@ -205,11 +205,17 @@ public class RouteServer extends Thread
|
|||
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
|
||||
bw.write( "HTTP/1.1 200 OK\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( "\n" );
|
||||
}
|
||||
|
|
|
@ -25,4 +25,5 @@ public abstract class RequestHandler
|
|||
|
||||
public abstract String formatTrack(OsmTrack track);
|
||||
|
||||
public abstract String getMimeType();
|
||||
}
|
|
@ -1,14 +1,15 @@
|
|||
package btools.server.request;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import btools.router.OsmNodeNamed;
|
||||
import btools.router.OsmTrack;
|
||||
import btools.router.RoutingContext;
|
||||
import btools.server.ServiceContext;
|
||||
import java.io.BufferedWriter;
|
||||
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
|
||||
|
@ -29,6 +30,8 @@ import java.io.File;
|
|||
*/
|
||||
public class ServerHandler extends RequestHandler {
|
||||
|
||||
private RoutingContext rc;
|
||||
|
||||
public ServerHandler( ServiceContext serviceContext, HashMap<String, String> params )
|
||||
{
|
||||
super( serviceContext, params );
|
||||
|
@ -37,7 +40,7 @@ public class ServerHandler extends RequestHandler {
|
|||
@Override
|
||||
public RoutingContext readRoutingContext()
|
||||
{
|
||||
RoutingContext rc = new RoutingContext();
|
||||
rc = new RoutingContext();
|
||||
|
||||
String profile = params.get( "profile" );
|
||||
// when custom profile replace prefix with directory path
|
||||
|
@ -98,6 +101,20 @@ public class ServerHandler extends RequestHandler {
|
|||
{
|
||||
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 {
|
||||
System.out.println("unknown track format '" + format + "', using default");
|
||||
result = track.formatAsGpx();
|
||||
|
@ -106,6 +123,29 @@ public class ServerHandler extends RequestHandler {
|
|||
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 )
|
||||
{
|
||||
if ( vlon == null ) throw new IllegalArgumentException( "lon " + name + " not found in input" );
|
||||
|
|
Loading…
Reference in a new issue