
org.opentripplanner.updater.vehicle_position.PollingVehiclePositionUpdater 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.updater.vehicle_position;
import com.google.transit.realtime.GtfsRealtime.VehiclePosition;
import java.util.List;
import java.util.Set;
import org.opentripplanner.framework.tostring.ToStringBuilder;
import org.opentripplanner.service.realtimevehicles.RealtimeVehicleRepository;
import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle;
import org.opentripplanner.standalone.config.routerconfig.updaters.VehiclePositionsUpdaterConfig;
import org.opentripplanner.updater.spi.PollingGraphUpdater;
import org.opentripplanner.updater.spi.WriteToGraphCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Map vehicle positions to
* {@link RealtimeVehicle} and add them to OTP
* patterns via a GTFS-RT source.
*/
public class PollingVehiclePositionUpdater extends PollingGraphUpdater {
private static final Logger LOG = LoggerFactory.getLogger(PollingVehiclePositionUpdater.class);
/**
* Update streamer
*/
private final GtfsRealtimeHttpVehiclePositionSource vehiclePositionSource;
private final Set vehiclePositionFeatures;
/**
* Parent update manager. Is used to execute graph writer runnables.
*/
private WriteToGraphCallback saveResultOnGraph;
private final String feedId;
private final RealtimeVehicleRepository realtimeVehicleRepository;
private final boolean fuzzyTripMatching;
public PollingVehiclePositionUpdater(
VehiclePositionsUpdaterParameters params,
RealtimeVehicleRepository realtimeVehicleRepository
) {
super(params);
this.vehiclePositionSource =
new GtfsRealtimeHttpVehiclePositionSource(params.url(), params.headers());
this.realtimeVehicleRepository = realtimeVehicleRepository;
this.feedId = params.feedId();
this.fuzzyTripMatching = params.fuzzyTripMatching();
this.vehiclePositionFeatures = params.vehiclePositionFeatures();
LOG.info(
"Creating vehicle position updater running every {}: {}",
pollingPeriod(),
vehiclePositionSource
);
}
@Override
public void setup(WriteToGraphCallback writeToGraphCallback) {
this.saveResultOnGraph = writeToGraphCallback;
}
/**
* Repeatedly makes blocking calls to an UpdateStreamer to retrieve new stop time updates, and
* applies those updates to the graph.
*/
@Override
public void runPolling() {
// Get update lists from update source
List updates = vehiclePositionSource.getPositions();
if (updates != null) {
// Handle updating trip positions via graph writer runnable
var runnable = new VehiclePositionUpdaterRunnable(
realtimeVehicleRepository,
vehiclePositionFeatures,
feedId,
fuzzyTripMatching,
updates
);
saveResultOnGraph.execute(runnable);
}
}
@Override
public String toString() {
return ToStringBuilder.of(this.getClass()).addObj("source", vehiclePositionSource).toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy