package btools.server; import java.io.File; import java.net.URLDecoder; import java.util.List; import java.util.Map; import btools.router.OsmNodeNamed; import btools.router.OsmTrack; import btools.router.RoutingContext; import btools.router.RoutingEngine; import btools.router.RoutingParamCollector; public class BRouter { public static void main(String[] args) throws Exception { if (args.length == 3 || args.length == 4) { // cgi-input-mode try { System.setProperty("segmentBaseDir", args[0]); System.setProperty("profileBaseDir", args[1]); String queryString = args[2]; queryString = URLDecoder.decode(queryString, "ISO-8859-1"); int lonIdx = queryString.indexOf("lonlats="); int sepIdx = queryString.indexOf("&", lonIdx); String lonlats = queryString.substring(lonIdx + 8, sepIdx); RoutingContext rc = new RoutingContext(); RoutingParamCollector routingParamCollector = new RoutingParamCollector(); List wplist = routingParamCollector.getWayPointList(lonlats); Map params = routingParamCollector.getUrlParams(queryString); int engineMode = 0; if (params.containsKey("engineMode")) { engineMode = Integer.parseInt(params.get("engineMode")); } routingParamCollector.setParams(rc, wplist, params); String exportName = null; if (args.length == 4) { exportName = args[3]; } else { // cgi-header System.out.println("Content-type: text/plain"); System.out.println(); } long maxRunningTime = 60000; // the cgi gets a 1 Minute timeout String sMaxRunningTime = System.getProperty("maxRunningTime"); if (sMaxRunningTime != null) { maxRunningTime = Integer.parseInt(sMaxRunningTime) * 1000; } RoutingEngine re = new RoutingEngine(exportName, null, new File(args[0]), wplist, rc, engineMode); re.doRun(maxRunningTime); if (re.getErrorMessage() != null) { System.out.println(re.getErrorMessage()); } } catch (Throwable e) { System.out.println("unexpected exception: " + e); } System.exit(0); } System.out.println("BRouter " + OsmTrack.version + " / " + OsmTrack.versionDate); if (args.length < 5) { System.out.println("Find routes in an OSM map"); System.out.println("usage: java -jar brouter.jar [parameter-list] [profile-parameter-list] "); System.out.println(" or: java -cp %CLASSPATH% btools.server.BRouter > [parameter-list] [profile-parameter-list]"); System.out.println(" or: java -jar brouter.jar [output-filename]"); System.exit(0); } int engineMode = 0; try { engineMode = Integer.parseInt(args[2]); } catch (NumberFormatException e) { } RoutingParamCollector routingParamCollector = new RoutingParamCollector(); List wplist = routingParamCollector.getWayPointList(args[4]); System.setProperty("segmentBaseDir", args[0]); System.setProperty("profileBaseDir", args[1]); String moreParams = null; String profileParams = null; if (args.length >= 6) { moreParams = args[5]; } if (args.length == 7) { profileParams = args[6]; } RoutingContext rc = new RoutingContext(); rc.localFunction = args[3]; if (moreParams != null) { Map params = routingParamCollector.getUrlParams(moreParams); routingParamCollector.setParams(rc, wplist, params); } if (profileParams != null) { Map params = routingParamCollector.getUrlParams(profileParams); routingParamCollector.setProfileParams(rc, params); } try { RoutingEngine re = null; if (engineMode == RoutingEngine.BROUTER_ENGINEMODE_GETELEV) { re = new RoutingEngine("testinfo", null, new File(args[0]), wplist, rc, engineMode); } else { re = new RoutingEngine("testtrack", null, new File(args[0]), wplist, rc, engineMode); } re.doRun(0); } catch (Exception e) { System.out.println(e.getMessage()); } } }