Package org.opentripplanner.routing.edgetype

Examples of org.opentripplanner.routing.edgetype.StreetEdge


            }
        }
        //and add back in replacements
        for (LinkedList<P2<StreetEdge>> toAdd : networkLinkerLibrary.replacements.values()) {
            for (P2<StreetEdge> edges : toAdd) {
                StreetEdge edge1 = edges.first;
                if (edge1.getToVertex().getLabel().startsWith("split ") || edge1.getFromVertex().getLabel().startsWith("split ")) {
                    continue;
                }
                edge1.getFromVertex().addOutgoing(edge1);
                edge1.getToVertex().addIncoming(edge1);
                StreetEdge edge2 = edges.second;
                if (edge2 != null) {
                    edge2.getFromVertex().addOutgoing(edge2);
                    edge2.getToVertex().addIncoming(edge2);
                }
            }
        }

        /*
 
View Full Code Here


        HashSet<StreetEdge> edgeSet = new HashSet<StreetEdge>(edges);
        LinkedList<P2<StreetEdge>> replacement = linker.replacements.get(edgeSet);
        if (replacement == null) {
            replacement = new LinkedList<P2<StreetEdge>>();
            Iterator<StreetEdge> iter = edges.iterator();
            StreetEdge first = iter.next();
            StreetEdge second = null;
            while (iter.hasNext()) {
                StreetEdge edge = iter.next();
                if (edge.getFromVertex() == first.getToVertex() && edge.getToVertex() == first.getFromVertex()) {
                    second = edge;
                }
            }
            StreetEdge secondClone;
            if (second == null) {
                secondClone = null;
            } else {
                secondClone = ((StreetEdge) second).clone();
            }
            P2<StreetEdge> newEdges = new P2<StreetEdge>(((StreetEdge) first).clone(), secondClone);
            replacement.add(newEdges);
            linker.replacements.put(edgeSet, replacement);
        }

        // If the original replacement edge pair has already been split,
        // decide out which sub-segment the current coordinate lies on.
        double bestDist = Double.MAX_VALUE;
        P2<StreetEdge> bestPair = null;
        Point p = GeometryUtils.getGeometryFactory().createPoint(coordinate);
        for (P2<StreetEdge> pair : replacement) {
            StreetEdge e1 = pair.first;
            double dist = e1.getGeometry().distance(p);
            if (dist < bestDist) {
                bestDist = dist;
                bestPair = pair;
            }
        }
View Full Code Here

     * very close to one of the existing endpoints. Returns the vertices located at the split point.
     */
    private Collection<StreetVertex> split(LinkedList<P2<StreetEdge>> replacement, String label,
            P2<StreetEdge> bestPair, Coordinate coordinate) {

        StreetEdge e1 = bestPair.first;
        StreetEdge e2 = bestPair.second;

        String name = e1.getName();
        StreetVertex e1v1 = (StreetVertex) e1.getFromVertex();
        StreetVertex e1v2 = (StreetVertex) e1.getToVertex();
        LineString forwardGeometry = e1.getGeometry();
       
        StreetVertex e2v1 = null;
        StreetVertex e2v2 = null;
        P2<LineString> backGeometryPair = null;
        if (e2 != null) {
            e2v1 = (StreetVertex) e2.getFromVertex();
            e2v2 = (StreetVertex) e2.getToVertex();
            LineString backGeometry = e2.getGeometry();
            backGeometryPair = GeometryUtils.splitGeometryAtPoint(backGeometry,
                    coordinate);
        }
       
        P2<LineString> forwardGeometryPair = GeometryUtils.splitGeometryAtPoint(forwardGeometry,
                coordinate);

        LineString forward1Geom = forwardGeometryPair.first;
        LineString forward2Geom = forwardGeometryPair.second;
        Coordinate midCoord = forward1Geom.getEndPoint().getCoordinate();

        // determine how far along the original pair the split would occur
        double totalGeomLength = forwardGeometry.getLength();
        double lengthRatioIn = forward1Geom.getLength() / totalGeomLength;

        // If coordinate is coincident with an endpoint of the edge pair, splitting is unnecessary.
        // note: the pair potentially being split was generated by the 'replace' method,
        // so the two PlainStreetEdges are known to be pointing in opposite directions.
        if (lengthRatioIn < 0.00001) {
            ArrayList<StreetVertex> out = new ArrayList<StreetVertex>();
            out.add(e1v1);
            if (e2 != null) {
                out.add(e2v2);
            }
            return out;
        } else if (lengthRatioIn > 0.99999) {
            ArrayList<StreetVertex> out = new ArrayList<StreetVertex>();
            out.add(e1v2);
            if (e2 != null) {
                out.add(e1v2);
            }
            return out;
        }

        double lengthIn  = e1.getDistance() * lengthRatioIn;
        double lengthOut = e1.getDistance() * (1 - lengthRatioIn);

        // Split each edge independently. If a only one splitter vertex is used, routing may take
        // shortcuts thought the splitter vertex to avoid turn penalties.
        IntersectionVertex e1midpoint = new IntersectionVertex(linker.graph, "split 1 at " + label, midCoord.x, midCoord.y, name);
        // We are replacing two edges with four edges
        // Note: Always enable elevation. This should not be a big waste of memory.
        StreetWithElevationEdge forward1 = new StreetWithElevationEdge(e1v1, e1midpoint, forward1Geom, name, lengthIn,
                e1.getPermission(), e1.isBack());
        StreetWithElevationEdge forward2 = new StreetWithElevationEdge(e1midpoint, e1v2, forward2Geom, name, lengthOut,
                e1.getPermission(), e1.isBack());
        if (e1 instanceof AreaEdge) {
            ((AreaEdge) e1).getArea().addVertex(e1midpoint, linker.graph);
        }

        addEdges(forward1, forward2);

        StreetWithElevationEdge backward1 = null;
        StreetWithElevationEdge backward2 = null;
        IntersectionVertex e2midpoint = null;
        if (e2 != null) {
            e2midpoint  = new IntersectionVertex(linker.graph, "split 2 at " + label, midCoord.x, midCoord.y, name);
            backward1 = new StreetWithElevationEdge(e2v1, e2midpoint, backGeometryPair.first,
                    name, lengthOut, e2.getPermission(), e2.isBack());
            backward2 = new StreetWithElevationEdge(e2midpoint, e2v2, backGeometryPair.second,
                    name, lengthIn, e2.getPermission(), e2.isBack());
            if (e2 instanceof AreaEdge) {
                ((AreaEdge) e2).getArea().addVertex(e2midpoint, linker.graph);
            }
            backward1.setBicycleSafetyFactor(e2.getBicycleSafetyFactor());
            backward2.setBicycleSafetyFactor(e2.getBicycleSafetyFactor());
            backward1.setElevationProfile(ElevationUtils.getPartialElevationProfile(
                    e2.getElevationProfile(), 0, lengthOut), false);
            backward2.setElevationProfile(ElevationUtils.getPartialElevationProfile(
                    e2.getElevationProfile(), lengthIn, totalGeomLength), false);
            backward1.setHasBogusName(e2.hasBogusName());
            backward2.setHasBogusName(e2.hasBogusName());
            backward1.setStairs(e2.isStairs());
            backward2.setStairs(e2.isStairs());
            backward1.setWheelchairAccessible(e2.isWheelchairAccessible());
            backward2.setWheelchairAccessible(e2.isWheelchairAccessible());
            addEdges(backward1, backward2);
        }

        forward1.setBicycleSafetyFactor(e1.getBicycleSafetyFactor());
        forward2.setBicycleSafetyFactor(e1.getBicycleSafetyFactor());
View Full Code Here

        // Create a small graph with 2 vertices and one edge and it's serialized form
        smallGraph = new Graph();
        StreetVertex v1 = new IntersectionVertex(smallGraph, "v1", 0, 0);
        StreetVertex v2 = new IntersectionVertex(smallGraph, "v2", 0, 0.1);
        new StreetEdge(v1, v2, null, "v1v2", 11000, StreetTraversalPermission.PEDESTRIAN, false);
        baos = new ByteArrayOutputStream();
        smallGraph.save(new ObjectOutputStream(baos));
        smallGraphData = baos.toByteArray();
    }
View Full Code Here

        StreetVertex broad1 = vertex("broad_1st", 2.0, 0.0);
        StreetVertex broad2 = vertex("broad_2nd", 1.0, 0.0);
        StreetVertex broad3 = vertex("broad_3rd", 0.0, 0.0);

        // Each block along the main streets has unit length and is one-way
        StreetEdge maple1_2 = edge(maple1, maple2, 100.0, false);
        StreetEdge maple2_3 = edge(maple2, maple3, 100.0, false);

        StreetEdge main1_2 = edge(main1, main2, 100.0, false);
        StreetEdge main2_3 = edge(main2, main3, 100.0, false);

        broad1_2 = edge(broad1, broad2, 100.0, false);
        StreetEdge broad2_3 = edge(broad2, broad3, 100.0, false);

        // Each cross-street connects
        maple_main1 = edge(maple1, main1, 50.0, false);
        StreetEdge main_broad1 = edge(main1, broad1, 100.0, false);

        StreetEdge maple_main2 = edge(maple2, main2, 50.0, false);
        StreetEdge main_broad2 = edge(main2, broad2, 50.0, false);

        StreetEdge maple_main3 = edge(maple3, main3, 100.0, false);
        StreetEdge main_broad3 = edge(main3, broad3, 100.0, false);

        // Turn restrictions are only for driving modes.
        // - can't turn from 1st onto Main.
        // - can't turn from 2nd onto Main.
        // - can't turn from 2nd onto Broad.
View Full Code Here

        coords[0] = vA.getCoordinate();
        coords[1] = vB.getCoordinate();
        LineString geom = GeometryUtils.getGeometryFactory().createLineString(coords);

        StreetTraversalPermission perm = StreetTraversalPermission.ALL;
        return new StreetEdge(vA, vB, geom, name, length, perm, back);
    }
View Full Code Here

        StreetVertex broad1 = vertex("broad_1st", 2.0, 0.0);
        StreetVertex broad2 = vertex("broad_2nd", 1.0, 0.0);
        StreetVertex broad3 = vertex("broad_3rd", 0.0, 0.0);

        // Each block along the main streets has unit length and is one-way
        StreetEdge maple1_2 = edge(maple1, maple2, 100.0, false);
        StreetEdge maple2_3 = edge(maple2, maple3, 100.0, false);

        StreetEdge main1_2 = edge(main1, main2, 100.0, false);
        StreetEdge main2_3 = edge(main2, main3, 100.0, false);

        StreetEdge broad1_2 = edge(broad1, broad2, 100.0, false);
        StreetEdge broad2_3 = edge(broad2, broad3, 100.0, false);

        // Each cross-street connects
        StreetEdge maple_main1 = edge(maple1, main1, 50.0, false);
        StreetEdge main_broad1 = edge(main1, broad1, 100.0, false);

        StreetEdge maple_main2 = edge(maple2, main2, 50.0, false);
        StreetEdge main_broad2 = edge(main2, broad2, 50.0, false);

        StreetEdge maple_main3 = edge(maple3, main3, 100.0, false);
        StreetEdge main_broad3 = edge(main3, broad3, 100.0, false);

        this.fromEdge = maple1_2;
        this.straightAheadEdge = maple2_3;
    }
View Full Code Here

        coords[0] = vA.getCoordinate();
        coords[1] = vB.getCoordinate();
        LineString geom = GeometryUtils.getGeometryFactory().createLineString(coords);

        StreetTraversalPermission perm = StreetTraversalPermission.ALL;
        return new StreetEdge(vA, vB, geom, name, length, perm, back);
    }
View Full Code Here

        LineString lineStringBC = new LineString(coordinatesBC, geometryFactory);
        LineString lineStringCD = new LineString(coordinatesCD, geometryFactory);
        LineString lineStringAD = new LineString(coordinatesAD, geometryFactory);

        // Powers of 2 avoid complications related to floating point arithmetic
        new StreetEdge(intersectionA, intersectionB, lineStringAB, "Edge AB", 2 * speed,
                StreetTraversalPermission.ALL, false);
        new StreetEdge(intersectionB, intersectionC, lineStringBC, "Edge BC", 4 * speed,
                StreetTraversalPermission.ALL, false);
        new StreetEdge(intersectionC, intersectionD, lineStringCD, "Edge CD", 8 * speed,
                StreetTraversalPermission.ALL, false);
        new StreetEdge(intersectionA, intersectionD, lineStringAD, "Edge AD", 16 * speed,
                StreetTraversalPermission.ALL, false);

        StreetfulStopLinker streetfulStopLinker = new StreetfulStopLinker();

        assertEquals(9, graph.countVertices());
View Full Code Here

        tl = new IntersectionVertex(graph, "tl", -74.01, 40.01);
        tr = new IntersectionVertex(graph, "tr", -74.0, 40.01);
        bl = new IntersectionVertex(graph, "bl", -74.01, 40.0);
        br = new IntersectionVertex(graph, "br", -74.00, 40.0);

        top = new StreetEdge(tl, tr,
                GeometryUtils.makeLineString(-74.01, 40.01, -74.0, 40.01), "top", 1500,
                StreetTraversalPermission.ALL, false);
        bottom = new StreetEdge(br, bl,
                GeometryUtils.makeLineString(-74.01, 40.0, -74.0, 40.0), "bottom", 1500,
                StreetTraversalPermission.ALL, false);
        left = new StreetEdge(bl, tl,
                GeometryUtils.makeLineString(-74.01, 40.0, -74.01, 40.01), "left", 1500,
                StreetTraversalPermission.ALL, false);
        right = new StreetEdge(br, tr,
                GeometryUtils.makeLineString(-74.0, 40.0, -74.0, 40.01), "right", 1500,
                StreetTraversalPermission.PEDESTRIAN, false);
       
        @SuppressWarnings("unused")
        StreetEdge topBack = new StreetEdge(tr, tl, (LineString) top.getGeometry()
                .reverse(), "topBack", 1500, StreetTraversalPermission.ALL, true);
        @SuppressWarnings("unused")
        StreetEdge bottomBack = new StreetEdge(br, bl, (LineString) bottom.getGeometry()
                .reverse(), "bottomBack", 1500, StreetTraversalPermission.ALL, true);
        leftBack = new StreetEdge(tl, bl, (LineString) left.getGeometry().reverse(),
                "leftBack", 1500, StreetTraversalPermission.ALL, true);
        rightBack = new StreetEdge(tr, br, (LineString) right.getGeometry().reverse(),
                "rightBack", 1500, StreetTraversalPermission.ALL, true);

        Stop s1 = new Stop();
        s1.setName("transitVertex 1");
        s1.setLon(-74.005);
View Full Code Here

TOP

Related Classes of org.opentripplanner.routing.edgetype.StreetEdge

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.