
org.opentripplanner.updater.vehicle_position.GtfsRealtimeHttpVehiclePositionSource 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;
import com.google.transit.realtime.GtfsRealtime.VehiclePosition;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.opentripplanner.framework.io.OtpHttpClient;
import org.opentripplanner.framework.io.OtpHttpClientException;
import org.opentripplanner.framework.io.OtpHttpClientFactory;
import org.opentripplanner.framework.tostring.ToStringBuilder;
import org.opentripplanner.updater.spi.HttpHeaders;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Responsible for downloading GTFS-rt vehicle positions from a URL and loading into memory.
*/
public class GtfsRealtimeHttpVehiclePositionSource {
private static final Logger LOG = LoggerFactory.getLogger(
GtfsRealtimeHttpVehiclePositionSource.class
);
/**
* URL to grab GTFS-RT feed from
*/
private final URI url;
private final HttpHeaders headers;
private final OtpHttpClient otpHttpClient;
public GtfsRealtimeHttpVehiclePositionSource(URI url, HttpHeaders headers) {
this.url = url;
this.headers = HttpHeaders.of().acceptProtobuf().add(headers).build();
this.otpHttpClient = new OtpHttpClientFactory().create(LOG);
}
/**
* Parses raw GTFS-RT data into vehicle positions
*/
public List getPositions() {
try {
return otpHttpClient.getAndMap(url, headers.asMap(), this::getPositions);
} catch (OtpHttpClientException e) {
LOG.warn("Error reading vehicle positions from {}", url, e);
}
return List.of();
}
@Override
public String toString() {
return ToStringBuilder
.of(GtfsRealtimeHttpVehiclePositionSource.class)
.addObj("url", url)
.toString();
}
public List getPositions(InputStream is) throws IOException {
List positions = null;
List feedEntityList;
GtfsRealtime.FeedMessage feedMessage;
if (is != null) {
// Decode message
feedMessage = GtfsRealtime.FeedMessage.parseFrom(is);
feedEntityList = feedMessage.getEntityList();
// Create List of TripUpdates
positions = new ArrayList<>(feedEntityList.size());
for (GtfsRealtime.FeedEntity feedEntity : feedEntityList) {
if (feedEntity.hasVehicle()) {
positions.add(feedEntity.getVehicle());
}
}
}
return positions;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy