All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.scripting.api.OtpsEntryPoint Maven / Gradle / Ivy

package org.opentripplanner.scripting.api;

import java.io.IOException;

import org.opentripplanner.analyst.batch.RasterPopulation;
import org.opentripplanner.analyst.batch.SyntheticRasterPopulation;
import org.opentripplanner.routing.core.RoutingRequest;
import org.opentripplanner.standalone.CommandLineParameters;
import org.opentripplanner.standalone.OTPMain;
import org.opentripplanner.standalone.OTPServer;

import com.beust.jcommander.JCommander;

/**
 * This is the main entry point (facade) for use by scripts. An instance of this facade is
 * accessible through the bean named "otp" in the various scripts, or by creating one if using OTP
 * as a library from an external script.
 * 
 * This facade allow a script to access / create OTP objects (routers, populations, ...)
 * 
 * @see OtpsRouter
 * @see OtpsPopulation
 * 
 * @author laurent
 */
public class OtpsEntryPoint {

    private OTPServer otpServer;

    private Object retval = null;

    public OtpsEntryPoint(OTPServer otpServer) {
        this.otpServer = otpServer;
    }

    /**
     * Create an OTP scripting entry point using the same command-line parameters as used by the OTP
     * application. This is useful when using scripting from an outside environment, using OTP as a
     * library. For example in jython the following script 'myscript.py':
     * 
     * 
     *   #!/usr/bin/jython
     *   from org.opentripplanner.scripting.api import OtpsEntryPoint
     *   otp = OtpsEntryPoint.fromArgs([ "-g", "." ])
     *   ...
     * 
* * One can then run jython with: * *
     *   CLASSPATH=otp.jar jython myscript.py
     * 
* * @param args Command-line arguments, as used by the application. * @return The "otp" scripting facade bean. * @throws Exception */ public static OtpsEntryPoint fromArgs(String[] args) throws Exception { if (args == null) args = new String[0]; CommandLineParameters params = new CommandLineParameters(); @SuppressWarnings("unused") JCommander jc = new JCommander(params, args); params.analyst = true; // Force analyst params.infer(); OTPMain otpMain = new OTPMain(params); if (params.build != null) // TODO Enable this throw new IllegalArgumentException("Building from script is not yet supported."); if (params.scriptFile != null) // This would be weird throw new IllegalArgumentException("Scripting from script is not supported."); if (params.visualize) // Useless throw new IllegalArgumentException("Vizualizer from script is not supported."); if (params.server) // Why not? throw new IllegalArgumentException("Server from script is not supported."); otpMain.run(); return new OtpsEntryPoint(otpMain.otpServer); } public static OtpsEntryPoint fromArgs() throws Exception { return fromArgs(null); } /** * @return The default router. If there is one router, this will be the default. */ public OtpsRouter getRouter() { return getRouter(null); } /** * @param routerId The ID of the router to request. * @return The router of the given ID. */ public OtpsRouter getRouter(String routerId) { return new OtpsRouter(otpServer.getRouter(routerId)); } /** * @return A new plan request that can be used to plan route / shortest path tree on a router. */ public OtpsRoutingRequest createRequest() { RoutingRequest rreq = new RoutingRequest(); return new OtpsRoutingRequest(rreq); } /** * @return A new empty population. */ public OtpsPopulation createEmptyPopulation() { return new OtpsPopulation(); } /** * Create a grid of evently spaced points in a rectangle. Coordinates are expressed in the given * CRS, by default WGS84 geographical. * * @param top * @param bottom * @param left * @param right * @param rows * @param cols * @return A new grid population of rows x cols individuals, regularly spaced. */ public OtpsPopulation createGridPopulation(double top, double bottom, double left, double right, int rows, int cols) { SyntheticRasterPopulation rasterPop = new SyntheticRasterPopulation(); rasterPop.left = left; rasterPop.right = right; rasterPop.top = top; rasterPop.bottom = bottom; rasterPop.cols = cols; rasterPop.rows = rows; rasterPop.setup(); return new OtpsPopulation(rasterPop); } /** * Load a population from a CSV file. * * @param filename The filename to load data from. * @param latColName The name of the latitude column header. * @param lonColName The name of the longitude column header. * @return A population containing an individual per CSV row. * @throws IOException If something bad happens (file not found, invalid format...) */ public OtpsPopulation loadCSVPopulation(String filename, String latColName, String lonColName) throws IOException { return OtpsPopulation.loadFromCSV(filename, latColName, lonColName); } /** * Load a population from a raster (GeoTIFF) file. * * @param filename The filename to load data from. * @return A population containing an individual per cell. */ public OtpsPopulation loadRasterPopulation(String filename) { RasterPopulation rasterPop = new RasterPopulation(); rasterPop.sourceFilename = filename; rasterPop.setup(); return new OtpsPopulation(rasterPop); } /** * @return A new CSV output. */ public OtpsCsvOutput createCSVOutput() { return new OtpsCsvOutput(); } /** * @param retval Set the return value of the script, which will be returned in web mode. For * command-line mode, the return value is not used (for now). */ public void setRetval(Object retval) { this.retval = retval; } public Object getRetval() { return retval; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy