
org.opentripplanner.gtfs.graphbuilder.GtfsBundle Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
The newest version!
package org.opentripplanner.gtfs.graphbuilder;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.onebusaway.csv_entities.CsvInputSource;
import org.opentripplanner.datastore.api.CompositeDataSource;
import org.opentripplanner.datastore.api.FileType;
import org.opentripplanner.datastore.configure.DataStoreModule;
import org.opentripplanner.graph_builder.ConfiguredDataSource;
import org.opentripplanner.graph_builder.module.GtfsFeedId;
import org.opentripplanner.transit.model.site.StopTransferPriority;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class GtfsBundle {
private static final Logger LOG = LoggerFactory.getLogger(GtfsBundle.class);
private final CompositeDataSource dataSource;
private GtfsFeedId feedId;
private CsvInputSource csvInputSource;
public int subwayAccessTime;
private double maxStopToShapeSnapDistance = 150;
private final boolean removeRepeatedStops;
private final StopTransferPriority stationTransferPreference;
private final boolean discardMinTransferTimes;
private final boolean blockBasedInterlining;
private final int maxInterlineDistance;
/** Used by unit tests */
public GtfsBundle(File gtfsFile) {
this(DataStoreModule.compositeSource(gtfsFile, FileType.GTFS));
}
private GtfsBundle(CompositeDataSource compositeDataSource) {
this(
new ConfiguredDataSource<>(
compositeDataSource,
new GtfsFeedParametersBuilder().withSource(compositeDataSource.uri()).build()
)
);
}
public GtfsBundle(ConfiguredDataSource configuredDataSource) {
this.dataSource = (CompositeDataSource) configuredDataSource.dataSource();
if (configuredDataSource.config().feedId() != null) {
this.feedId = new GtfsFeedId.Builder().id(configuredDataSource.config().feedId()).build();
}
this.removeRepeatedStops = configuredDataSource.config().removeRepeatedStops();
this.stationTransferPreference = configuredDataSource.config().stationTransferPreference();
this.discardMinTransferTimes = configuredDataSource.config().discardMinTransferTimes();
this.blockBasedInterlining = configuredDataSource.config().blockBasedInterlining();
this.maxInterlineDistance = configuredDataSource.config().maxInterlineDistance();
}
public CsvInputSource getCsvInputSource() {
if (csvInputSource == null) {
csvInputSource =
new CsvInputSource() {
@Override
public boolean hasResource(String s) {
return dataSource.content().stream().anyMatch(it -> it.name().equals(s));
}
@Override
public InputStream getResource(String s) {
return dataSource.entry(s).asInputStream();
}
@Override
public void close() {}
};
}
return csvInputSource;
}
public void close() {
try {
dataSource.close();
} catch (IOException e) {
LOG.warn(
"Failed to close datasource {}, details: {}",
dataSource.path(),
e.getLocalizedMessage(),
e
);
}
}
public String toString() {
String src = dataSource.path();
if (feedId != null) {
src += " (" + feedId.getId() + ")";
}
return "GTFS bundle at " + src;
}
/**
* So that we can load multiple gtfs feeds into the same database.
*/
public GtfsFeedId getFeedId() {
if (feedId == null) {
feedId = new GtfsFeedId.Builder().fromGtfsFeed(getCsvInputSource()).build();
}
return feedId;
}
public void setFeedId(GtfsFeedId feedId) {
this.feedId = feedId;
}
public void checkInputs() {
if (csvInputSource != null) {
LOG.warn("unknown CSV source type; cannot check inputs");
return;
}
if (!dataSource.exists()) {
throw new RuntimeException(
"GTFS Path " + dataSource.path() + " does not exist or " + "cannot be read."
);
}
}
public double getMaxStopToShapeSnapDistance() {
return maxStopToShapeSnapDistance;
}
public void setMaxStopToShapeSnapDistance(double maxStopToShapeSnapDistance) {
this.maxStopToShapeSnapDistance = maxStopToShapeSnapDistance;
}
public boolean removeRepeatedStops() {
return removeRepeatedStops;
}
public StopTransferPriority stationTransferPreference() {
return stationTransferPreference;
}
public boolean discardMinTransferTimes() {
return discardMinTransferTimes;
}
public boolean blockBasedInterlining() {
return blockBasedInterlining;
}
public int maxInterlineDistance() {
return maxInterlineDistance;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy