Search in sources :

Example 1 with GtfsModule

use of org.opentripplanner.graph_builder.module.GtfsModule in project OpenTripPlanner by opentripplanner.

the class GtfsTest method setUp.

protected void setUp() {
    File gtfs = new File("src/test/resources/" + getFeedName());
    File gtfsRealTime = new File("src/test/resources/" + getFeedName() + ".pb");
    GtfsBundle gtfsBundle = new GtfsBundle(gtfs);
    feedId = new GtfsFeedId.Builder().id("FEED").build();
    gtfsBundle.setFeedId(feedId);
    List<GtfsBundle> gtfsBundleList = Collections.singletonList(gtfsBundle);
    GtfsModule gtfsGraphBuilderImpl = new GtfsModule(gtfsBundleList);
    alertsUpdateHandler = new AlertsUpdateHandler();
    graph = new Graph();
    router = new Router("TEST", graph);
    gtfsBundle.setTransfersTxtDefinesStationPaths(true);
    gtfsGraphBuilderImpl.buildGraph(graph, null);
    // Set the agency ID to be used for tests to the first one in the feed.
    agencyId = graph.getAgencies(feedId.getId()).iterator().next().getId();
    System.out.printf("Set the agency ID for this test to %s\n", agencyId);
    graph.index(new DefaultStreetVertexIndexFactory());
    timetableSnapshotSource = new TimetableSnapshotSource(graph);
    timetableSnapshotSource.purgeExpiredData = (false);
    graph.timetableSnapshotSource = (timetableSnapshotSource);
    alertPatchServiceImpl = new AlertPatchServiceImpl(graph);
    alertsUpdateHandler.setAlertPatchService(alertPatchServiceImpl);
    alertsUpdateHandler.setFeedId(feedId.getId());
    try {
        final boolean fullDataset = false;
        InputStream inputStream = new FileInputStream(gtfsRealTime);
        FeedMessage feedMessage = FeedMessage.PARSER.parseFrom(inputStream);
        List<FeedEntity> feedEntityList = feedMessage.getEntityList();
        List<TripUpdate> updates = new ArrayList<TripUpdate>(feedEntityList.size());
        for (FeedEntity feedEntity : feedEntityList) {
            updates.add(feedEntity.getTripUpdate());
        }
        timetableSnapshotSource.applyTripUpdates(graph, fullDataset, updates, feedId.getId());
        alertsUpdateHandler.update(feedMessage);
    } catch (Exception exception) {
    }
}
Also used : TripUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate) GtfsFeedId(org.opentripplanner.graph_builder.module.GtfsFeedId) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Router(org.opentripplanner.standalone.Router) DefaultStreetVertexIndexFactory(org.opentripplanner.routing.impl.DefaultStreetVertexIndexFactory) AlertPatchServiceImpl(org.opentripplanner.routing.impl.AlertPatchServiceImpl) FileInputStream(java.io.FileInputStream) FeedMessage(com.google.transit.realtime.GtfsRealtime.FeedMessage) GtfsModule(org.opentripplanner.graph_builder.module.GtfsModule) Graph(org.opentripplanner.routing.graph.Graph) GtfsBundle(org.opentripplanner.graph_builder.model.GtfsBundle) FeedEntity(com.google.transit.realtime.GtfsRealtime.FeedEntity) File(java.io.File) TimetableSnapshotSource(org.opentripplanner.updater.stoptime.TimetableSnapshotSource) AlertsUpdateHandler(org.opentripplanner.updater.alerts.AlertsUpdateHandler)

Example 2 with GtfsModule

use of org.opentripplanner.graph_builder.module.GtfsModule in project OpenTripPlanner by opentripplanner.

the class GraphBuilder method forDirectory.

/**
 * Factory method to create and configure a GraphBuilder with all the appropriate modules to build a graph from
 * the files in the given directory, accounting for any configuration files located there.
 *
 * TODO parameterize with the router ID and call repeatedly to make multiple builders
 * note of all command line options this is only using  params.inMemory params.preFlight and params.build directory
 */
public static GraphBuilder forDirectory(CommandLineParameters params, File dir) {
    LOG.info("Wiring up and configuring graph builder task.");
    GraphBuilder graphBuilder = new GraphBuilder();
    List<File> gtfsFiles = Lists.newArrayList();
    List<File> osmFiles = Lists.newArrayList();
    JsonNode builderConfig = null;
    JsonNode routerConfig = null;
    File demFile = null;
    LOG.info("Searching for graph builder input files in {}", dir);
    if (!dir.isDirectory() && dir.canRead()) {
        LOG.error("'{}' is not a readable directory.", dir);
        return null;
    }
    graphBuilder.setPath(dir);
    // Find and parse config files first to reveal syntax errors early without waiting for graph build.
    builderConfig = OTPMain.loadJson(new File(dir, BUILDER_CONFIG_FILENAME));
    GraphBuilderParameters builderParams = new GraphBuilderParameters(builderConfig);
    // Load the router config JSON to fail fast, but we will only apply it later when a router starts up
    routerConfig = OTPMain.loadJson(new File(dir, Router.ROUTER_CONFIG_FILENAME));
    LOG.info(ReflectionLibrary.dumpFields(builderParams));
    for (File file : dir.listFiles()) {
        switch(InputFileType.forFile(file)) {
            case GTFS:
                LOG.info("Found GTFS file {}", file);
                gtfsFiles.add(file);
                break;
            case OSM:
                LOG.info("Found OSM file {}", file);
                osmFiles.add(file);
                break;
            case DEM:
                if (!builderParams.fetchElevationUS && demFile == null) {
                    LOG.info("Found DEM file {}", file);
                    demFile = file;
                } else {
                    LOG.info("Skipping DEM file {}", file);
                }
                break;
            case OTHER:
                LOG.warn("Skipping unrecognized file '{}'", file);
        }
    }
    boolean hasOSM = builderParams.streets && !osmFiles.isEmpty();
    boolean hasGTFS = builderParams.transit && !gtfsFiles.isEmpty();
    if (!(hasOSM || hasGTFS)) {
        LOG.error("Found no input files from which to build a graph in {}", dir);
        return null;
    }
    if (hasOSM) {
        List<OpenStreetMapProvider> osmProviders = Lists.newArrayList();
        for (File osmFile : osmFiles) {
            OpenStreetMapProvider osmProvider = new AnyFileBasedOpenStreetMapProviderImpl(osmFile);
            osmProviders.add(osmProvider);
        }
        OpenStreetMapModule osmModule = new OpenStreetMapModule(osmProviders);
        DefaultStreetEdgeFactory streetEdgeFactory = new DefaultStreetEdgeFactory();
        streetEdgeFactory.useElevationData = builderParams.fetchElevationUS || (demFile != null);
        osmModule.edgeFactory = streetEdgeFactory;
        osmModule.customNamer = builderParams.customNamer;
        osmModule.setDefaultWayPropertySetSource(builderParams.wayPropertySet);
        osmModule.skipVisibility = !builderParams.areaVisibility;
        osmModule.platformEntriesLinking = builderParams.platformEntriesLinking;
        osmModule.staticBikeRental = builderParams.staticBikeRental;
        osmModule.staticBikeParkAndRide = builderParams.staticBikeParkAndRide;
        osmModule.staticParkAndRide = builderParams.staticParkAndRide;
        osmModule.banDiscouragedWalking = builderParams.banDiscouragedWalking;
        osmModule.banDiscouragedBiking = builderParams.banDiscouragedBiking;
        graphBuilder.addModule(osmModule);
        PruneFloatingIslands pruneFloatingIslands = new PruneFloatingIslands();
        pruneFloatingIslands.setPruningThresholdIslandWithoutStops(builderParams.pruningThresholdIslandWithoutStops);
        pruneFloatingIslands.setPruningThresholdIslandWithStops(builderParams.pruningThresholdIslandWithStops);
        graphBuilder.addModule(pruneFloatingIslands);
    }
    if (hasGTFS) {
        List<GtfsBundle> gtfsBundles = Lists.newArrayList();
        for (File gtfsFile : gtfsFiles) {
            GtfsBundle gtfsBundle = new GtfsBundle(gtfsFile);
            gtfsBundle.setTransfersTxtDefinesStationPaths(builderParams.useTransfersTxt);
            if (builderParams.parentStopLinking) {
                gtfsBundle.linkStopsToParentStations = true;
            }
            gtfsBundle.parentStationTransfers = builderParams.stationTransfers;
            gtfsBundle.subwayAccessTime = (int) (builderParams.subwayAccessTime * 60);
            gtfsBundle.maxInterlineDistance = builderParams.maxInterlineDistance;
            gtfsBundles.add(gtfsBundle);
        }
        GtfsModule gtfsModule = new GtfsModule(gtfsBundles);
        gtfsModule.setFareServiceFactory(builderParams.fareServiceFactory);
        graphBuilder.addModule(gtfsModule);
        if (hasOSM) {
            if (builderParams.matchBusRoutesToStreets) {
                graphBuilder.addModule(new BusRouteStreetMatcher());
            }
            graphBuilder.addModule(new TransitToTaggedStopsModule());
        }
    }
    // This module is outside the hasGTFS conditional block because it also links things like bike rental
    // which need to be handled even when there's no transit.
    graphBuilder.addModule(new StreetLinkerModule());
    // We want to do run this module after loading the OSM street network but before finding transfers.
    if (builderParams.elevationBucket != null) {
        // Download the elevation tiles from an Amazon S3 bucket
        S3BucketConfig bucketConfig = builderParams.elevationBucket;
        File cacheDirectory = new File(params.cacheDirectory, "ned");
        DegreeGridNEDTileSource awsTileSource = new DegreeGridNEDTileSource();
        awsTileSource = new DegreeGridNEDTileSource();
        awsTileSource.awsAccessKey = bucketConfig.accessKey;
        awsTileSource.awsSecretKey = bucketConfig.secretKey;
        awsTileSource.awsBucketName = bucketConfig.bucketName;
        NEDGridCoverageFactoryImpl gcf = new NEDGridCoverageFactoryImpl(cacheDirectory);
        gcf.tileSource = awsTileSource;
        GraphBuilderModule elevationBuilder = new ElevationModule(gcf);
        graphBuilder.addModule(elevationBuilder);
    } else if (builderParams.fetchElevationUS) {
        // Download the elevation tiles from the official web service
        File cacheDirectory = new File(params.cacheDirectory, "ned");
        ElevationGridCoverageFactory gcf = new NEDGridCoverageFactoryImpl(cacheDirectory);
        GraphBuilderModule elevationBuilder = new ElevationModule(gcf);
        graphBuilder.addModule(elevationBuilder);
    } else if (demFile != null) {
        // Load the elevation from a file in the graph inputs directory
        ElevationGridCoverageFactory gcf = new GeotiffGridCoverageFactoryImpl(demFile);
        GraphBuilderModule elevationBuilder = new ElevationModule(gcf);
        graphBuilder.addModule(elevationBuilder);
    }
    if (hasGTFS) {
        // The stops can be linked to each other once they are already linked to the street network.
        if (!builderParams.useTransfersTxt) {
            // This module will use streets or straight line distance depending on whether OSM data is found in the graph.
            graphBuilder.addModule(new DirectTransferGenerator(builderParams.maxTransferDistance));
        }
    }
    graphBuilder.addModule(new EmbedConfig(builderConfig, routerConfig));
    if (builderParams.htmlAnnotations) {
        graphBuilder.addModule(new AnnotationsToHTML(params.build, builderParams.maxHtmlAnnotationsPerFile));
    }
    graphBuilder.serializeGraph = (!params.inMemory) || params.preFlight;
    return graphBuilder;
}
Also used : ElevationModule(org.opentripplanner.graph_builder.module.ned.ElevationModule) NEDGridCoverageFactoryImpl(org.opentripplanner.graph_builder.module.ned.NEDGridCoverageFactoryImpl) S3BucketConfig(org.opentripplanner.standalone.S3BucketConfig) JsonNode(com.fasterxml.jackson.databind.JsonNode) GtfsModule(org.opentripplanner.graph_builder.module.GtfsModule) GeotiffGridCoverageFactoryImpl(org.opentripplanner.graph_builder.module.ned.GeotiffGridCoverageFactoryImpl) GraphBuilderModule(org.opentripplanner.graph_builder.services.GraphBuilderModule) StreetLinkerModule(org.opentripplanner.graph_builder.module.StreetLinkerModule) EmbedConfig(org.opentripplanner.graph_builder.module.EmbedConfig) TransitToTaggedStopsModule(org.opentripplanner.graph_builder.module.TransitToTaggedStopsModule) DegreeGridNEDTileSource(org.opentripplanner.graph_builder.module.ned.DegreeGridNEDTileSource) DirectTransferGenerator(org.opentripplanner.graph_builder.module.DirectTransferGenerator) OpenStreetMapModule(org.opentripplanner.graph_builder.module.osm.OpenStreetMapModule) OpenStreetMapProvider(org.opentripplanner.openstreetmap.services.OpenStreetMapProvider) ElevationGridCoverageFactory(org.opentripplanner.graph_builder.services.ned.ElevationGridCoverageFactory) PruneFloatingIslands(org.opentripplanner.graph_builder.module.PruneFloatingIslands) GtfsBundle(org.opentripplanner.graph_builder.model.GtfsBundle) BusRouteStreetMatcher(org.opentripplanner.graph_builder.module.map.BusRouteStreetMatcher) AnyFileBasedOpenStreetMapProviderImpl(org.opentripplanner.openstreetmap.impl.AnyFileBasedOpenStreetMapProviderImpl) GraphBuilderParameters(org.opentripplanner.standalone.GraphBuilderParameters) ZipFile(java.util.zip.ZipFile) File(java.io.File) DefaultStreetEdgeFactory(org.opentripplanner.graph_builder.services.DefaultStreetEdgeFactory)

Aggregations

File (java.io.File)2 GtfsBundle (org.opentripplanner.graph_builder.model.GtfsBundle)2 GtfsModule (org.opentripplanner.graph_builder.module.GtfsModule)2 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 FeedEntity (com.google.transit.realtime.GtfsRealtime.FeedEntity)1 FeedMessage (com.google.transit.realtime.GtfsRealtime.FeedMessage)1 TripUpdate (com.google.transit.realtime.GtfsRealtime.TripUpdate)1 FileInputStream (java.io.FileInputStream)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 ZipFile (java.util.zip.ZipFile)1 DirectTransferGenerator (org.opentripplanner.graph_builder.module.DirectTransferGenerator)1 EmbedConfig (org.opentripplanner.graph_builder.module.EmbedConfig)1 GtfsFeedId (org.opentripplanner.graph_builder.module.GtfsFeedId)1 PruneFloatingIslands (org.opentripplanner.graph_builder.module.PruneFloatingIslands)1 StreetLinkerModule (org.opentripplanner.graph_builder.module.StreetLinkerModule)1 TransitToTaggedStopsModule (org.opentripplanner.graph_builder.module.TransitToTaggedStopsModule)1 BusRouteStreetMatcher (org.opentripplanner.graph_builder.module.map.BusRouteStreetMatcher)1 DegreeGridNEDTileSource (org.opentripplanner.graph_builder.module.ned.DegreeGridNEDTileSource)1 ElevationModule (org.opentripplanner.graph_builder.module.ned.ElevationModule)1