Search in sources :

Example 36 with RoutingRequest

use of org.opentripplanner.routing.core.RoutingRequest in project OpenTripPlanner by opentripplanner.

the class EuclideanRemainingWeightHeuristic method initialize.

@Override
public void initialize(RoutingRequest options, long abortTime) {
    RoutingRequest req = options;
    Vertex target = req.rctx.target;
    this.transit = req.modes.isTransit();
    maxStreetSpeed = req.getStreetSpeedUpperBound();
    maxTransitSpeed = req.getTransitSpeedUpperBound();
    if (target.getDegreeIn() == 1) {
        Edge edge = Iterables.getOnlyElement(target.getIncoming());
        if (edge instanceof FreeEdge) {
            target = edge.getFromVertex();
        }
    }
    lat = target.getLat();
    lon = target.getLon();
    requiredWalkDistance = determineRequiredWalkDistance(req);
    walkReluctance = req.walkReluctance;
}
Also used : Vertex(org.opentripplanner.routing.graph.Vertex) RoutingRequest(org.opentripplanner.routing.core.RoutingRequest) FreeEdge(org.opentripplanner.routing.edgetype.FreeEdge) FreeEdge(org.opentripplanner.routing.edgetype.FreeEdge) Edge(org.opentripplanner.routing.graph.Edge)

Example 37 with RoutingRequest

use of org.opentripplanner.routing.core.RoutingRequest in project OpenTripPlanner by opentripplanner.

the class BikeParkEdge method traverseUnpark.

protected State traverseUnpark(State s0) {
    RoutingRequest options = s0.getOptions();
    /*
         * To unpark a bike, we need to be walking, and be allowed to bike.
         */
    if (s0.getNonTransitMode() != TraverseMode.WALK || !options.modes.getBicycle())
        return null;
    StateEditor s0e = s0.edit(this);
    s0e.incrementWeight(options.bikeParkCost);
    s0e.incrementTimeInSeconds(options.bikeParkTime);
    s0e.setBackMode(TraverseMode.LEG_SWITCH);
    s0e.setBikeParked(false);
    State s1 = s0e.makeState();
    return s1;
}
Also used : StateEditor(org.opentripplanner.routing.core.StateEditor) State(org.opentripplanner.routing.core.State) RoutingRequest(org.opentripplanner.routing.core.RoutingRequest)

Example 38 with RoutingRequest

use of org.opentripplanner.routing.core.RoutingRequest in project OpenTripPlanner by opentripplanner.

the class TileService method tileGet.

@GET
@Produces("image/*")
public Response tileGet() throws Exception {
    Envelope2D env = SlippyTile.tile2Envelope(x, y, z);
    TileRequest tileRequest = new TileRequest(env, 256, 256);
    RoutingRequest sptRequestA = buildRequest();
    Layer layer = layers.get(0);
    Style style = styles.get(0);
    RenderRequest renderRequest = new RenderRequest(format, layer, style, true, false);
    Router router = otpServer.getRouter(routerId);
    // router.renderer.getResponse(tileRequest, sptRequestA, sptRequestB, renderRequest);
    return null;
}
Also used : TileRequest(org.opentripplanner.analyst.request.TileRequest) Style(org.opentripplanner.api.parameter.Style) RenderRequest(org.opentripplanner.analyst.request.RenderRequest) Router(org.opentripplanner.standalone.Router) RoutingRequest(org.opentripplanner.routing.core.RoutingRequest) Envelope2D(org.geotools.geometry.Envelope2D) Layer(org.opentripplanner.api.parameter.Layer) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 39 with RoutingRequest

use of org.opentripplanner.routing.core.RoutingRequest in project OpenTripPlanner by opentripplanner.

the class TimeGridWs method getTimeGridPng.

@GET
@Produces({ "image/png" })
public Response getTimeGridPng(@QueryParam("base64") @DefaultValue("false") boolean base64) throws Exception {
    /* Fetch the Router for this request using server and routerId fields from superclass. */
    Router router = otpServer.getRouter(routerId);
    if (precisionMeters < 10)
        throw new IllegalArgumentException("Too small precisionMeters: " + precisionMeters);
    if (offRoadDistanceMeters < 10)
        throw new IllegalArgumentException("Too small offRoadDistanceMeters: " + offRoadDistanceMeters);
    // Build the request
    RoutingRequest sptRequest = buildRequest();
    SampleGridRequest tgRequest = new SampleGridRequest();
    tgRequest.maxTimeSec = maxTimeSec;
    tgRequest.precisionMeters = precisionMeters;
    tgRequest.offRoadDistanceMeters = offRoadDistanceMeters;
    if (coordinateOrigin != null)
        tgRequest.coordinateOrigin = new GenericLocation(null, coordinateOrigin).getCoordinate();
    // Get a sample grid
    ZSampleGrid<WTWD> sampleGrid = router.sampleGridRenderer.getSampleGrid(tgRequest, sptRequest);
    int cols = sampleGrid.getXMax() - sampleGrid.getXMin() + 1;
    int rows = sampleGrid.getYMax() - sampleGrid.getYMin() + 1;
    // Hard-coded to RGBA
    int channels = 4;
    // We force to 8 bits channel depth, some clients won't support more than 8
    // (namely, HTML5 canvas...)
    ImageInfo imgInfo = new ImageInfo(cols, rows, 8, true, false, false);
    /**
     * TODO: PNGJ allow for progressive (ie line-by-line) writing. Thus we could theorically
     * prevent having to allocate a bit pixel array in the first place, but we would need a
     * line-by-line iterator on the sample grid, which is currently not the case.
     */
    int[][] rgba = new int[rows][cols * channels];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PngWriter pw = new PngWriter(baos, imgInfo);
    pw.getMetadata().setText(PngChunkTextVar.KEY_Software, "OTPA");
    pw.getMetadata().setText(PngChunkTextVar.KEY_Creation_Time, new Date().toString());
    pw.getMetadata().setText(PngChunkTextVar.KEY_Description, "Sample grid bitmap");
    String gridCornerStr = String.format(Locale.US, "%.8f,%.8f", sampleGrid.getCenter().y + sampleGrid.getYMin() * sampleGrid.getCellSize().y, sampleGrid.getCenter().x + sampleGrid.getXMin() * sampleGrid.getCellSize().x);
    String gridCellSzStr = String.format(Locale.US, "%.12f,%.12f", sampleGrid.getCellSize().y, sampleGrid.getCellSize().x);
    String offRoadDistStr = String.format(Locale.US, "%d", offRoadDistanceMeters);
    PngChunkTEXT gridCornerChunk = new PngChunkTEXT(imgInfo);
    gridCornerChunk.setKeyVal(OTPA_GRID_CORNER, gridCornerStr);
    pw.getChunksList().queue(gridCornerChunk);
    PngChunkTEXT gridCellSzChunk = new PngChunkTEXT(imgInfo);
    gridCellSzChunk.setKeyVal(OTPA_GRID_CELL_SIZE, gridCellSzStr);
    pw.getChunksList().queue(gridCellSzChunk);
    PngChunkTEXT offRoadDistChunk = new PngChunkTEXT(imgInfo);
    offRoadDistChunk.setKeyVal(OTPA_OFFROAD_DIST, offRoadDistStr);
    pw.getChunksList().queue(offRoadDistChunk);
    double unit;
    switch(zDataType) {
        case TIME:
            // 1:1sec, max 18h
            unit = 1.0;
            break;
        case BOARDINGS:
            // 1:0.001 boarding, max 65.5
            unit = 1000.0;
            break;
        case WALK_DISTANCE:
            // 1:0.1m, max 6.55km
            unit = 10.0;
            break;
        default:
            throw new IllegalArgumentException("Unsupported Z DataType.");
    }
    for (ZSamplePoint<WTWD> p : sampleGrid) {
        WTWD z = p.getZ();
        int row = p.getY() - sampleGrid.getYMin();
        int col = p.getX() - sampleGrid.getXMin();
        double zz;
        switch(zDataType) {
            case TIME:
                zz = z.wTime / z.w;
                break;
            case BOARDINGS:
                zz = z.wBoardings / z.w;
                break;
            case WALK_DISTANCE:
                zz = z.wWalkDist / z.w;
                break;
            default:
                throw new IllegalArgumentException("Unsupported Z DataType.");
        }
        int iz;
        if (Double.isInfinite(zz)) {
            iz = 65535;
        } else {
            iz = ImageLineHelper.clampTo_0_65535((int) Math.round(zz * unit));
            if (iz == 65535)
                // Clamp
                iz = 65534;
        }
        // d is expressed as a percentage of grid size, max 255%.
        // Sometimes d will be bigger than 2.55 x grid size,
        // but this should not be too much important as we are off-bounds.
        int id = ImageLineHelper.clampTo_0_255((int) Math.round(z.d / precisionMeters * 100));
        int offset = col * channels;
        // z low 8 bits
        rgba[row][offset + 0] = (iz & 0xFF);
        // z high 8 bits
        rgba[row][offset + 1] = (iz >> 8);
        // d
        rgba[row][offset + 2] = id;
        /*
             * Keep the alpha channel at 255, otherwise the RGB channel will be downsampled on some
             * rendering clients (namely, JS canvas).
             */
        rgba[row][offset + 3] = 255;
    }
    for (int row = 0; row < rgba.length; row++) {
        ImageLineInt iline = new ImageLineInt(imgInfo, rgba[row]);
        pw.writeRow(iline, row);
    }
    pw.end();
    // Disallow caching on client side
    CacheControl cc = new CacheControl();
    cc.setNoCache(true);
    // Also put the meta-data in the HTML header (easier to read from JS)
    byte[] data = baos.toByteArray();
    if (base64) {
        data = Base64.encodeBase64(data);
    }
    return Response.ok().cacheControl(cc).entity(data).header(OTPA_GRID_CORNER, gridCornerStr).header(OTPA_GRID_CELL_SIZE, gridCellSzStr).header(OTPA_OFFROAD_DIST, offRoadDistStr).build();
}
Also used : PngChunkTEXT(ar.com.hjg.pngj.chunks.PngChunkTEXT) WTWD(org.opentripplanner.analyst.request.SampleGridRenderer.WTWD) SampleGridRequest(org.opentripplanner.analyst.request.SampleGridRequest) Router(org.opentripplanner.standalone.Router) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ZSamplePoint(org.opentripplanner.common.geometry.ZSampleGrid.ZSamplePoint) Date(java.util.Date) PngWriter(ar.com.hjg.pngj.PngWriter) GenericLocation(org.opentripplanner.common.model.GenericLocation) RoutingRequest(org.opentripplanner.routing.core.RoutingRequest) CacheControl(javax.ws.rs.core.CacheControl) ImageInfo(ar.com.hjg.pngj.ImageInfo) ImageLineInt(ar.com.hjg.pngj.ImageLineInt)

Example 40 with RoutingRequest

use of org.opentripplanner.routing.core.RoutingRequest in project OpenTripPlanner by opentripplanner.

the class TestIntermediatePlaces method handleRequest.

private void handleRequest(GenericLocation from, GenericLocation to, GenericLocation[] via, String modes, boolean arriveBy) {
    RoutingRequest request = new RoutingRequest(modes);
    request.setDateTime("2016-04-20", "13:00", timeZone);
    request.setArriveBy(arriveBy);
    request.from = from;
    request.to = to;
    for (GenericLocation intermediateLocation : via) {
        request.addIntermediatePlace(intermediateLocation);
    }
    List<GraphPath> pathList = graphPathFinder.graphPathFinderEntryPoint(request);
    assertNotNull(pathList);
    assertFalse(pathList.isEmpty());
    TripPlan plan = GraphPathToTripPlanConverter.generatePlan(pathList, request);
    assertLocationIsVeryCloseToPlace(from, plan.from);
    assertLocationIsVeryCloseToPlace(to, plan.to);
    assertTrue(1 <= plan.itinerary.size());
    for (Itinerary itinerary : plan.itinerary) {
        validateIntermediatePlacesVisited(itinerary, via);
        assertTrue(via.length < itinerary.legs.size());
        validateLegsTemporally(request, itinerary);
        validateLegsSpatially(plan, itinerary);
        if (modes.contains("TRANSIT")) {
            assert itinerary.transitTime > 0;
        }
    }
}
Also used : GraphPath(org.opentripplanner.routing.spt.GraphPath) TripPlan(org.opentripplanner.api.model.TripPlan) Itinerary(org.opentripplanner.api.model.Itinerary) GenericLocation(org.opentripplanner.common.model.GenericLocation) RoutingRequest(org.opentripplanner.routing.core.RoutingRequest)

Aggregations

RoutingRequest (org.opentripplanner.routing.core.RoutingRequest)124 GraphPath (org.opentripplanner.routing.spt.GraphPath)56 ShortestPathTree (org.opentripplanner.routing.spt.ShortestPathTree)52 State (org.opentripplanner.routing.core.State)42 Test (org.junit.Test)35 Vertex (org.opentripplanner.routing.graph.Vertex)35 Graph (org.opentripplanner.routing.graph.Graph)24 GenericLocation (org.opentripplanner.common.model.GenericLocation)21 Edge (org.opentripplanner.routing.graph.Edge)18 StateEditor (org.opentripplanner.routing.core.StateEditor)17 TraverseModeSet (org.opentripplanner.routing.core.TraverseModeSet)17 IntersectionVertex (org.opentripplanner.routing.vertextype.IntersectionVertex)17 AStar (org.opentripplanner.routing.algorithm.AStar)15 AgencyAndId (org.onebusaway.gtfs.model.AgencyAndId)14 TransitStop (org.opentripplanner.routing.vertextype.TransitStop)13 StreetEdge (org.opentripplanner.routing.edgetype.StreetEdge)12 Coordinate (com.vividsolutions.jts.geom.Coordinate)11 DominanceFunction (org.opentripplanner.routing.spt.DominanceFunction)11 NonLocalizedString (org.opentripplanner.util.NonLocalizedString)11 Trip (org.onebusaway.gtfs.model.Trip)9