コード例 #1
0
ファイル: test_trips.py プロジェクト: jamespfennell/transiter
def build_gtfs_rt_message(current_time, stop_id_to_time, use_stop_sequences):
    return gtfs.FeedMessage(
        header=gtfs.FeedHeader(gtfs_realtime_version="2.0", timestamp=current_time),
        entity=[
            gtfs.FeedEntity(
                id="1",
                trip_update=gtfs.TripUpdate(
                    trip=gtfs.TripDescriptor(
                        trip_id=TRIP_ID, route_id=ROUTE_ID, direction_id=True
                    ),
                    stop_time_update=[
                        gtfs.TripUpdate.StopTimeUpdate(
                            arrival=gtfs.TripUpdate.StopTimeEvent(time=time),
                            departure=gtfs.TripUpdate.StopTimeEvent(time=time + 15),
                            stop_id=stop_id,
                            stop_sequence=stop_sequence + 25
                            if use_stop_sequences
                            else None,
                        )
                        for stop_sequence, (stop_id, time) in enumerate(
                            stop_id_to_time.items()
                        )
                        if time >= current_time
                    ],
                ),
            )
        ],
    )
コード例 #2
0
def create_vehicle_position_entity(timestamp, trip_route_id, trip_direction_id,
                                   vehicle_id, vehicle_label,
                                   vehicle_license_plate, pos_latitude,
                                   pos_longitude, pos_bearing, pos_odometer,
                                   pos_speed):
    feed_entity = gtfs_realtime_pb2.FeedEntity()
    # The ids are used only to provide incrementality support. The id should be unique within a FeedMessage. Consequent
    # FeedMessages may contain FeedEntities with the same id. In case of a DIFFERENTIAL update the new FeedEntity with
    # some id will replace the old FeedEntity with the same id (or delete it - see is_deleted below). The actual GTFS
    # entities (e.g. stations, routes, trips) referenced by the feed must be specified by explicit selectors (see
    # EntitySelector below for more info).
    feed_entity.id = str(uuid.uuid4())

    # moment at which the vehicle's position was measured. In POSIX time
    feed_entity.vehicle.timestamp = timestamp

    # trip descriptor
    feed_entity.vehicle.trip.route_id = trip_route_id
    feed_entity.vehicle.trip.direction_id = trip_direction_id

    # vehicle descriptor
    feed_entity.vehicle.vehicle.id = vehicle_id
    feed_entity.vehicle.vehicle.label = vehicle_label
    feed_entity.vehicle.vehicle.license_plate = vehicle_license_plate

    # position
    feed_entity.vehicle.position.latitude = pos_latitude
    feed_entity.vehicle.position.longitude = pos_longitude
    feed_entity.vehicle.position.bearing = pos_bearing
    feed_entity.vehicle.position.odometer = pos_odometer
    feed_entity.vehicle.position.speed = pos_speed

    return feed_entity
コード例 #3
0
def setup_test(
    system_id, informed_entity, install_system_1, transiter_host, source_server
):

    __, realtime_feed_url = install_system_1(system_id)

    message = gtfs.FeedMessage(
        header=gtfs.FeedHeader(gtfs_realtime_version="2.0", timestamp=int(time.time())),
        entity=[
            gtfs.FeedEntity(
                id="trip_id",
                trip_update=gtfs.TripUpdate(
                    trip=gtfs.TripDescriptor(trip_id="trip_id", route_id="A")
                ),
            ),
            gtfs.FeedEntity(
                id="alert_id",
                alert=gtfs.Alert(
                    active_period=[
                        gtfs.TimeRange(
                            start=int(TIME_1.timestamp()), end=int(TIME_2.timestamp()),
                        )
                    ],
                    header_text=gtfs.TranslatedString(
                        translation=[
                            gtfs.TranslatedString.Translation(
                                text="Advertencia", language="es"
                            )
                        ],
                    ),
                    informed_entity=[informed_entity],
                    cause=gtfs.Alert.Cause.STRIKE,
                    effect=gtfs.Alert.Effect.MODIFIED_SERVICE,
                ),
            ),
        ],
    )

    source_server.put(realtime_feed_url, message.SerializeToString())
    requests.post(
        "{}/systems/{}/feeds/GtfsRealtimeFeed?sync=true".format(
            transiter_host, system_id
        )
    )
コード例 #4
0
ファイル: xml2pb.py プロジェクト: roman-122/xml2pb
def makeProtoBuffer(trips, locations):
    '''
    Create a protobuffer object from the trips object.
    Trips is expected to be a dictionary keyed to trip_id strings.
    The values are dictionaries with `stop_sequence` and `dev` items.
    '''
    feed = gtfs_realtime_pb2.FeedMessage()

    # Set Header
    feed.header.gtfs_realtime_version = "2.0"
    feed.header.incrementality = 0
    feed.header.timestamp = int(time.time())

    # Create an trip update entity for each trip
    for trip_id, trip in trips.items():
        entity = gtfs_realtime_pb2.FeedEntity()
        entity.id = trip_id

        entity.trip_update.trip.trip_id = trip_id

        stop_time_update = entity.trip_update.StopTimeUpdate()
        stop_time_update.stop_sequence = trip['stop_sequence']
        stop_time_update.arrival.delay = trip['dev']

        entity.trip_update.stop_time_update.append(stop_time_update)
        feed.entity.append(entity)
    # Create vehicle location for each vehicle location
    for vehicle_id, info in locations.items():
        entity = gtfs_realtime_pb2.FeedEntity()
        entity.id = vehicle_id
        entity.vehicle.timestamp = info['timestamp']
        entity.vehicle.trip.trip_id = info['trip']['trip_id']
        entity.vehicle.vehicle.id = vehicle_id
        entity.vehicle.position.latitude = info['position']['latitude']
        entity.vehicle.position.longitude = info['position']['longitude']
        entity.vehicle.position.bearing = info['position']['bearing']
        entity.vehicle.position.speed = info['position']['speed']
        feed.entity.append(entity)
    return feed
コード例 #5
0
 def create(entity_id, **kwargs):
     return gtfs_realtime.FeedEntity(id=entity_id, **kwargs)
コード例 #6
0
"""
Arrows Denote class aggregation relation:
FEED_MESSAGE -> FEEDENTITY -> TRIPUPDATE -> StopTimeUpdate -> STOPTIMEEVENT
"""

FEED_MESSAGE = {
    "class": gtfs_realtime_pb2.FeedMessage(),
    "description": "",
    "fields": {
        "trip_updates_and_alerts": "entity",
        "FeedHeader": "header",
    }
}

FEEDENTITY = {
    "class": gtfs_realtime_pb2.FeedEntity(),
    "description": "",
    "fields": {
        "Trip_Update": "trip_update",
        "VehiclePosition": "vehicle",
        "Alert": "alert",
    }
}

TRIPUPDATE = {
    "class": gtfs_realtime_pb2.TripUpdate(),
    "description": "",
    "fields": {
        "timestamp": "timestamp",
        "delay": "delay",
        "stop_time_update": "stop_time_update",