-
Notifications
You must be signed in to change notification settings - Fork 183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revert some changes made in transfers.txt transfer_type=4 and 5 proposal #363
Conversation
There is real world data for transfer_type=4 and transfer_type=5 so I don't see what the problem is. If only a producer is the problem here I'll check what we can do. |
@skinkie when do you think you could have a feed produced? I agree the functionality is important and making sure we have a producer is probably simpler than reverting and re-adding later. |
Then let me ask some follow-up questions. Ultimately, my question is "Why do we need transfer_type=5?" Start with a feed that isn't publishing For a feed that is publishing So when would This gets me to the semantics of the following language in the spec:
What is the scope of that override? If there is a single |
I think the initial message of #303 explains it well. On your feed example questions, the general message to me is that But trip to trip transfers provide the information in a clearer and less error-prone way (see the last two sections of #303). We can disagree on those points but being a different way of providing the same information it not a bad thing per se. See how fares v1 and v2 are co-existing.
The goal of that paragraph was to overwrite a single linked-trip but I can see how it can be miss-interpreted. We can change it. |
I don't mind
Is that how you've actually implemented it on your side? Was that the understanding of feed providers as well? Coming back to MBTA's currently published feed, they are only specifying |
I think you need to define what is the "original With that in mind my interpretation of "use the original block_id semantics" and "I only allow in-seat transfers for trip-pairs explicitly listed with In real-world usage where consumers have heuristics about Unfortunately, since both use-case of |
I’ll forgive your alleged innocence :) because we both know the spec has plenty of ambiguities and gaps big enough to drive buses through.
There is no safety in “safe to assume”. If we think it’s reasonable to say that “if a feed contains |
I think this would be a reasonable change in the specification. |
I acknowledge that it's quite hard to undo years of doing things a certain way, but would not be the right thing to nudge producers into providing explicit transfers of type 4 rather than relying on block_ids? I know, I know, I'm asking for a lot but at least we can add a bit of language to the spec in that respect. However, I also think that it's reasonable to say that a single transfer of type=4 will disable the implicit in-seat transfers created by block_ids. |
MBTA never considers |
Ok, now we are getting somewhere. I proposed the following text:
You'll notice I took the liberty of scoping the override behavior at the agency level, as opposed to the feed level. Selfishly, I would like a mechanism where if I need to merge two feeds, one which uses But now back to my original question: why do we need Running through the scenarios again:
So what about an agency that wants to include Instead, I'd propose a new field in
This approach has the advantage that it's more explicit about the intention of the behavior and it doesn't need to be updated as trips and blocks change. I'm putting this forward as a hypothetical proposal that doesn't necessarily need to be included in this PR. But I keep coming back to my original question: why do we need |
I'm ok with the proposed change in principle. However I'd argue that
An agency could want to provide operational level information of vehicle operating multiple trips without including any |
How would they use |
Very simply, the agency will add trip to trip transfer with transfer_type=5 to convey those two trips are operated by the same vehicle. From the spec :
and
I feel this might be better discussed in a call if you prefer, I feel we're going in circles. |
Apologies, you are right, I was hung up on the in-seat transfer behavior and forgetting the goal to model trip connectivity more generally. Do you think we met the bar for adding |
My assumption was that an agency which has both |
No indeed, I would work first on making sure there's no consumer wanting to produce this before reverting.
No, that's the main use-case. |
Do you think it's going to be necessary to have a producer both provide data with Again, apologies for my mental hang-up on I acknowledge that even for same-vehicle trip continuation (ignoring in-seat transfers), block_ids are underspecified in the spec and you are attempting to fix that with |
I have no objection to removing it, as long as there is not anybody producing such data. |
Removing type=5 would make the OTP implementation a lot simpler as well. Even simpler if we agree that a feed with type 4 automatically disables block based in-seat transfers. |
Not sure what you mean. If we consume transfer_type=5 and take it into account into our real time backend, wouldn't that be enough?
Yes, use of linked trips transfer is not going to be a quick transition and I'm surprised @hannesj and @leonardehrenfried want to move away from type 5. The number of time we had to explain this crazy rule to agencies, the number of feeds with invalid block_id, and the fact that each consumer needs to have their own implementation of logic to reconstruct trip links to warrants a better solution. Yes, in-seats transfers were the lowest hanging feature needed, but it doesn't change that We're checking with producers that told us they were interested in type 5 in the past and will update here after. |
It is not that I want to move away from it, I just think its inclusion in the standard might have been premature, as no producer for such datasets exist yet. |
Ok, not hearing any news on the Please vote with a +1 (for) or -1 (against) in the comments. Voting ends on 2023-01-26 at 23:59:59 UTC. |
Sorry for the late comment on this thread, I was on an extended personal leave. TriMet has plans to provide trip-to-trip transfers in our GTFS using both transfer_type 4 & 5. I plan to provide transfer_type=5 to avoid any ambiguity. I should have to space to work on this in a few months, with a target completion date in April. |
What are your thoughts on this @mgilligan? April is far enough away that I'm still inclined to revert |
0; I am not against removing it (simplicity) and also not against keeping it (completeness). OpenGeo |
@bdferris-v2, I do not have a strong feeling either way. As @skinkie said, I like the completeness of having both types but if there is no strong opinion by consumers, I will just provide transfer_type=4 in my initial implementation. So, my vote is 0 (zero) |
I was also still waiting on @BodoMinea who mentioned they were producing those types of transfers in #303 but could not confirm if it was type=5. To me it fells silly to revert for a few months, considering there's multiple working implementation (OTP and us), an open source tool that produces the data, and interest in more producer to create the data. Our bad on not double checking type=5, we'll be better about it next time. I'll vote 0 too, considering the conflict of interest here. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have left comments in line to recommend 2 editorial modifications to this PR.
- a typo fix
- adding an explicit mention that stops's
location_type
other than stations or stops are forbidden for thefrom_stop_it
andto_stop_id
fields
@@ -514,22 +514,22 @@ For a given ordered pair of arriving trip and departing trip, the transfer with | |||
|
|||
| Field Name | Type | Presence | Description | | |||
| ------ | ------ | ------ | ------ | | |||
| `from_stop_id` | Foreign ID referencing `stops.stop_id` | **Conditionally Required** | Identifies a stop or station where a connection between routes begins. If this field refers to a station, the transfer rule applies to all its child stops. Refering to a station is forbiden for `transfer_types` 4 and 5. | | |||
| `to_stop_id` | Foreign ID referencing `stops.stop_id` | **Conditionally Required** | Identifies a stop or station where a connection between routes ends. If this field refers to a station, the transfer rule applies to all child stops. Refering to a station is forbiden for `transfer_types` 4 and 5. | | |||
| `from_stop_id` | Foreign ID referencing `stops.stop_id` | **Required** | Identifies a stop or station where a connection between routes begins. If this field refers to a station, the transfer rule applies to all its child stops. Refering to a station is forbiden if `transfer_type` is `4`. | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we update Refering
-> Referring
and forbiden
-> forbidden
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should explicitly mention, in both from_stop_id
and to_stop_id
:
Stops with location_type
values 2
(Entrance/Exit), 3
(Generic Node), or 4
(Boarding Area) are forbidden.
This would justify the presence of the validator rule transfer_with_invalid_stop_location_type
.
| `from_stop_id` | Foreign ID referencing `stops.stop_id` | **Conditionally Required** | Identifies a stop or station where a connection between routes begins. If this field refers to a station, the transfer rule applies to all its child stops. Refering to a station is forbiden for `transfer_types` 4 and 5. | | ||
| `to_stop_id` | Foreign ID referencing `stops.stop_id` | **Conditionally Required** | Identifies a stop or station where a connection between routes ends. If this field refers to a station, the transfer rule applies to all child stops. Refering to a station is forbiden for `transfer_types` 4 and 5. | | ||
| `from_stop_id` | Foreign ID referencing `stops.stop_id` | **Required** | Identifies a stop or station where a connection between routes begins. If this field refers to a station, the transfer rule applies to all its child stops. Refering to a station is forbiden if `transfer_type` is `4`. | | ||
| `to_stop_id` | Foreign ID referencing `stops.stop_id` | **Required** | Identifies a stop or station where a connection between routes ends. If this field refers to a station, the transfer rule applies to all child stops. Refering to a station is forbiden if `transfer_type` is `4`. | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here: Refering
-> Referring
and forbiden
-> forbidden
Transcollines intends on starting the production of I'll abstain from voting due to a conflict of interest (I am employed by Transit App and Transcollines, and myself and other Transit app colleagues discussed this issue earlier today which resulted in @gcamp voting 0. Because of this, I feel voting would be in violation of the "1 vote per stakeholder" rule as Transit App has already voted) |
Noting the general ambivalence in the voting thus far :) I'll just restate that my main concern was less about the ideal of But I'd still like to get in the "--Conditionally-- Required" and scope definition changes. I'm happy to let this vote go a few more days to see if there is any more feedback, but ultimately, I can try again with a revised PR. |
Re: type=5 I would be in favour of removing it if we add some language to the effect of "if a transfer of type=5 exists in the feed, then block-based interlining is disabled for this feed". However, unless I'm wrong block-based interlining was never in the spec and always a Google extension that others adopted. So, it's hard to disable something that's not in the spec as that would implicitly enable it for all other feeds. |
Transcollines is now producing |
Apologies, I got sidetracked with other work and let this one slip. In case there was any question, the original vote did not pass. But in the meantime, we've also got a feed with |
@brodyFlannigan thanks for the feed! Can I ask you a few follow-up questions? Can you speak to how you decided when to specify So for example, for
I see you've specified By the same token, let's consider the block where you did specify
Here, either So, coming back to my main question: can you speak more to how you decided when to specify |
Hi Brian,
I hope this answers your questions. Brody Flannigan |
@brodyFlannigan thanks! A few follow ups:
If the spec was more explicit about in-seat transfer behavior (namely, the addition of the line"If the trips associated with an agency include any linked trip in-seat transfers, as specified via
If your real-time producer supported |
Hi Brian, Sorry about the delayed response. Here are the answers to your questions
Yes, as the in-seat transfer is explicitly forbidden in "real-life", therefore I feel it is relevant to include it in the data to express the explicit nature of this operational practice.
Possibly, however this is not currently envisioned by our RT producer. Should the full semantics become supported by our producer, we would re-evaluate the relevance of the block_id field at that time. |
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
Ping @bdferris-v2, do you want to revise this PR? |
Our agency is implementing a route network change in June of this year, and our planned GTFS feed is testing implementation of (passenger-facing) transfer_type 4 AND 5 values - while also maintaining our consistent output of block_id "vehicle" data. Our intent is supplementing these additional transfers of from stop/trip to stop/trip items with a value of 4 - where passengers can anticipate being able to stay in vehicle between trips (same block_id), and from stop/trip to stop/trip items with a value of 5 - where passengers can anticipate being asked to exit the vehicle at the final stop of the arrival trip and needing to re-enter at the (same/nearby) departure stop for the departure trip (same block_id). Our agency did try using the open source tool referenced above, to "automatically" read in our GTFS feed data (block_ids) - in order to generate the "universe" of from stop/trip to stop/trip items. Our agency does make internal use of the block_id values (for vehicle operation/tracking purposes), so we would hope to avoid needing to follow on the apparent path of Boston MBTA (that seems to purge block_id values from the version of the GTFS they submit to Google, while keeping block_id values in their "standard" feed) |
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
@bdferris-v2 are you planning to continue this PR, maybe with the editorial changes and cleanup? |
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
This pull request has been closed due to inactivity. Pull requests can always be reopened after they have been closed. See the Specification Amendment Process. |
In #303, the spec was updated to include functionality for in-seat trip-to-trip transfers via the addition of two new values
4
and5
fortransfer_type
intransfers.txt
.This PR proposes two changes, one large and one small:
(Large) Drop
transfer_type=5
from the spec. In the original PR discussion Add trip-to-trip transfers with in-seat option #303, there were two feed providers who utilizedtransfer_type=4
but there was never a producer who utilizedtransfer_type=5
. Per the spec guiding principles, speculative features are discouraged. I acknowledge the potential use-case fortransfer_type=5
but I'm not sure it's been fully proven out. I'd be willing to keep5
as a reserved value if we think there is someone actively working on this.(Small) Revert the change that made
from_stop_id
andto_stop_id
conditionally required. After discussions with the original change authors (link), it became clear that the intention was that stop id fields are still required, but that they just shouldn't refer to a station for the in-seat transfer types.See the related discussion from the #gtfs Slack channel and also in MobilityData/gtfs-validator#1266.
Announcement in https://groups.google.com/g/gtfs-changes/c/kF-HUR-L-kU/m/NJ8Vm6yJAQAJ