Add vehicle access equipments
[!NOTE]
This proposal is part of a series of proposals focusing on accessibility around vehicle types. It is motivated by the development of a NeTEx based vehicle registry as well as the German handbook of accessible travel chains. We are happy to contribute the necessary XSD changes via a pull request on approval.
Rationale
There exist different passenger boarding systems and features that try to reduce or bridge vertical and or horizontal gaps between vehicle and platform.
Vehicle lift/hoist
Whether the vehicle has any onboard lift for wheelchair passengers. The measurements of interest are:
- space the lift occupies on the quay/platform when fully extended (width and length reaching out of the vehicle)
- usable/inner width and length of the lift platform (e.g. excluding rails or toe plate ramps) when the lift is being operated
- lifting height i.a. the maximum height the lift can hoist measured from the vehicle floor height to the ground
Real world examples:
Vehicle ramp:
Whether the vehicle has an extendable ramp to access the vehicle or platform step free. This includes:
- portable ramps that are carried by the vehicle and have to be deployed manually by public transport staff
- integrated ramps that are built into the vehicle and have to be unfolded manually by public transport staff
- integrated ramps that are built into the vehicle and are extended (semi-)automatically by a mechanism
If the ramp is integrated into the floor of the vehicle then this space needs to be kept clear in order to use/unfold the ramp. The length of the ramp gives information about:
- whether the horizontal gap can be bridged
- the incline of the ramp based on vehicle boarding height and platform height
- the remaining space on the platform based on platform width (important to know whether the ramp can be rolled onto)
The usable width of the ramp (excluding e.g. a railing) gives information whether a wheelchair fits on the ramp.
Real world examples:
- Automatic sliding ramp for bus (video)
- Automatic sliding ramp for bus (video)
- Manual and automatic folding ramps (video)
- Automatic folding ramp (video)
- Manual portable ramp for train (video)
- Automatic ramps for high floor bus (video)
Vehicle sliding step
Sliding steps also known as automatic gap fillers serve to bridge the horizontal gap between vehicle and platform. The main difference to an automatic ramp is that a ramp is inclined while a sliding step is not, meaning steps can only bridge horizontal gaps. Also a ramp rests on the platform or the ground, while a sliding step is self-supporting. The length of the extension is usually adjustable. The extensions can also automatically stop on contact with the platform. More information on sliding steps and their standardization can be found in the EuroSpec.
Real world examples:
Vehicle folding steps
In Germany this is denoted as "Klapptrittstufe" describing step(s) that are automatically unfolded to reduce the stepping height on lower platforms. When unfolded (depending on the type of construction) the steps can also reduce the horizontal gap, but they will always result in a stepped access. On platforms that match the boarding height the step is not unfolded potentially allowing for a stepless access.
Real world examples:
- Unfolding steps used on none-high-platforms:
- City railway (video) (see this article for photos where steps are folded)
- Tram (video)
- Metro (video)
- City railway (video)
- City railway (video) (could be interpreted as a folding and a sliding step)
- Entrance with fixed step and optional folding step:
Kneeling
Kneeling refers to the lowering of a vehicle, either the entire vehicle, one side of the vehicle or only a specific axle of the vehicle (e.g. front entrance axle). The relevant measurement is the kneeling height. For passengers this can be translated to a minimum and maximum boarding height per entrance.
Real world examples:
Use cases
- Accessibility (routing + passenger information)
- Mind the gap (passenger information)
- Passenger transfer time (routing + passenger information)
Multiple of these properties are required in the German handbook of public transport accessibility from the DELFI association.
Status quo
Currently multiple different means of access are packed into the AccessVehicleEquipment. This includes ramps, hoist, steps, door features and more. AccessVehicleEquipment already covers the following subset of relevant properties:
EquipmentLengthEquipmentWidthBearingCapacityFixedBoardingHeightThe existence of sliding steps can only be modeled viaVehicleAccessFacilityList=slidingStep
Whether the equipment is operated automatically and how long it takes is not recorded yet. Details regarding lift, sliding steps, retractable steps and kneeling are not yet modeled in NeTEx.
Proposal
The proposal follows the idea of having a separate equipment per feature group which can then be assigned to individual deck plan entrances. It is meant to be a more detailed alternative and not a replacement of AccessVehicleEquipment.
The key questions this proposal tries to answer are:
- What are possible boarding heights of a vehicle?
- Are there any steps after the boarding height?
- What horizontal or vertical gap can be bridged using the equipment?
- Is there enough space to use the specific access equipment?
AutomaticOperationGroup
The AutomaticOperationGroup will model whether something operates automatically as well as the duration of the deployment (OutOperationDuration) and retraction (InOperationDuration). If the equipment is automatic then the time can either be measured or taken from the manufacturer specification. For none automatic equipment an estimated/average usage time can be provided. Automatic means the entire operation from start to the end requires no manual handling (except of pressing a button). For example a lift is not automatic if unfolding or unlocking it by hand is required even though the actual lifting is done by an electric mechanism.
<xsd:group name="AutomaticOperationGroup">
<xsd:sequence>
<xsd:element name="IsAutomatic" type="xsd:boolean" minOccurs="0"/>
<xsd:element name="InOperationDuration" type="xsd:duration" minOccurs="0"/>
<xsd:element name="OutOperationDuration" type="xsd:duration" minOccurs="0"/>
</xsd:sequence>
</xsd:group>
This group will be used in different contexts/equipment later on (retractable step, sliding step, lift, ramp) wherefore the terms of the properties should be kept generic. Below is a list of potential alternative terms:
- InOperationDuration: Backward, Return, Pull-In, Boarding, Enter, Departure, Intake, Retrieval, Recovery, Retraction, Reversal
- OutOperationDuration: Forward, Release, Pull-Out, Alighting, Exit, Arrival, Yield, Provisioning, Extension, Service, Deployment, Extraction
Since the in- and out operation durations are usually identical it could be sufficient to only have a single OperationDuration property. However the separation makes it less ambiguous when calculating the passenger boarding and alighting time for lifts. For boarding both durations have to be taken into account (as it requires a full cycle) while only the "out" duration is relevant for alighting.
HorizontalGapReductionGroup
This group is included in hoist, ramp and retractable step equipment.
EquipmentLength,EquipmentWidthandBearingCapacitydescribe the same properties as defined inAccessVehicleEquipment.MinimumEquipmentLengthandMaximumEquipmentLengthcan be used alternatively toEquipmentLengthto describe an equipment that has a variable length. Modeling the minimum length is mainly useful for:- Sliding steps can either stop extending themselves on impact with the platform or be programmed to only extend by a certain amount. It is important to know whether a sliding step can be used at a platform even if the horizontal gap is smaller than the maximum stroke (the full extension length of the sliding step).
- Sliding ramps and telescopic ramps (example image) can be extended to different degrees. Usually one wants to maximize the length to decrease the ramp's slope, but for a narrow platform there may not be enough space to roll onto the ramp if it is fully extended. Knowing the smallest ramp length helps to know whether the ramp can still be deployed with an increase in slope.
<xsd:group name="HorizontalGapReductionGroup">
<xsd:sequence>
<xsd:choice>
<xsd:sequence>
<xsd:element name="MinimumEquipmentLength" type="LengthType" default="0" minOccurs="0"/>
<xsd:element name="MaximumEquipmentLength" type="LengthType" minOccurs="1"/>
</xsd:sequence>
<xsd:element name="EquipmentLength" type="LengthType" minOccurs="0"/>
</xsd:choice>
<xsd:element name="EquipmentWidth" type="LengthType" minOccurs="0"/>
<xsd:element name="BearingCapacity" type="WeightType" minOccurs="0"/>
</xsd:sequence>
</xsd:group>
Alternatively the terms Width, Length and MaximumLoad from the place ramp/lift equipment could also be reused here. More descriptive terms would be OuterLength and OuterWidth as they better describe that only the length outside of the vehicle matters.
RetractableStepVehicleEquipment
RetractableStepVehicleEquipment can be used to model sliding steps and foldable steps.
BoardingHeightdescribes the height from the ground to the lowest step. An alternative term would beHeightFromGroundwhich exists inDeckPlanand is also more in line with terms likeHeightFromFloororDistanceFromFront. For a single sliding step which is usually used to bridge a horizontal gap, this is identical (perhaps deviating by one centimeter) to the entrance boarding height.NumberOfStepsdescribes the retractable step count.StepHeightis the height difference of the individual steps or if only one step is described the height difference from the step boarding height to the entrance boarding height. Thus this can mostly be calculated by:
StepHeight = (PassengerEntrance.BoardingHeight - RetractableStepVehicleEquipment.BoardingHeight) / RetractableStepVehicleEquipment.NumberOfSteps
- The
EquipmentLengthproperty inherited fromHorizontalGapReductionGroupdescribes only the total length the steps reach out of the vehicle entrance. For sliding steps with a variable lengthMaximumEquipmentLengthshould be used.
<xsd:group name="RetractableStepVehicleEquipmentGroup">
<xsd:sequence>
<xsd:group ref="HorizontalGapReductionGroup"/>
<xsd:element name="BoardingHeight" type="LengthType" minOccurs="0">
<xsd:element name="NumberOfSteps" type="xsd:positiveInteger" minOccurs="0">
<xsd:element name="StepHeight" type="LengthType" minOccurs="0">
<xsd:group ref="AutomaticOperationGroup"/>
</xsd:sequence>
</xsd:group>
RampVehicleEquipment
RampVehicleEquipment can be used to model ramps of a vehicle entrance.
Fixeddenotes whether the ramp is integrated into the vehicle or not. The term is reused fromAccessVehicleEquipment.AssistanceRequiredcan be used to model whether the usage or operation of the ramp requires assistance. In other words the passenger either physically or legally cannot board/alight independently. It is generally desirable if passengers do not depend on any assistance to use the equipment. An alternative idea was to reuse thePublicUseproperty from theEnvironmentPropertiesGroupwith thePublicUseEnumeration. This however would only cover the legal part of the question and could be misunderstood as "who is allowed to use the equipment to board/alight". The latter could be solved by naming the propertyOperatedBy, but it would still not answer the question if for example the equipment is operated by the bus driver by pressing a button in the cockpit. In this scenario technically thestaffOnlyvalue would apply but the wheelchair user might not need any direct assistance from the driver. Also the facility enumerationsAssistanceNeededEnumerationandAssistanceFacilityEnumerationwere deemed unsuitable to properly describe the scenario.
The lowest achievable boarding height can be calculated based on the vehicle entrance boarding height, the length of the ramp and the maximum allowed incline (8.33% - 10%).
<xsd:group name="RampVehicleEquipmentGroup">
<xsd:sequence>
<xsd:element name="Fixed" type="xsd:boolean" minOccurs="0">
<xsd:group ref="HorizontalGapReductionGroup"/>
<xsd:element name="AssistanceRequired" type="xsd:boolean" minOccurs="0">
<xsd:group ref="AutomaticOperationGroup"/>
</xsd:sequence>
</xsd:group>
HoistVehicleEquipment
HoistVehicleEquipment can be used to model lifts and hoists of a vehicle entrance.
InnerLength&InnerWidthis the clearance length/width of the lifting platform. The terms are obtained from the place lift equipment. Alternative terms would bePlatformLengthandPlatformWidth.LiftingHeightdescribes the maximum height difference the lift can overcome. This is the distance between the vehicle’s floor height and the lowest point the lift can reach. An initial idea was to reuseBoardingHeightinstead ofLiftingHeightwhich could be used to record the lowest possible boarding height that can be achieved with the lift (minimum 0). However for trains the "passenger ground height" might be below the "vehicle ground height" (which is the top of the rail) wherefore a negativeBoardingHeightwould be required. See Train lift (video)AssistanceRequired(seeRampVehicleEquipment)
<xsd:group name="HoistVehicleEquipmentGroup">
<xsd:sequence>
<xsd:group ref="HorizontalGapReductionGroup"/>
<xsd:element name="InnerLength" type="LengthType" minOccurs="0">
<xsd:element name="InnerWidth" type="LengthType" minOccurs="0">
<xsd:element name="LiftingHeight" type="LengthType" minOccurs="0">
<xsd:element name="AssistanceRequired" type="xsd:boolean" minOccurs="0">
<xsd:group ref="AutomaticOperationGroup"/>
</xsd:sequence>
</xsd:group>
Kneeling
Only the lowest boarding height that can be achieved with kneeling is modeled, while the existing BoardingHeight is defined to be the boarding height without kneeling (i.a. the maximum boarding height). One can still subtract the KneelingBoardingHeight from the BoardingHeight to get the kneeling height difference which can be used for things like calculating the lowest ground clearance.
The properties are added to the AccessVehicleEquipment as they have a similar level of detail as other properties like LowFloor or Hoist + HoistOperatingRadius. The equipment can still be added to the entire vehicle or a particular entrance if the kneeling only affects a particular entrance.
<xsd:group name="AccessVehicleEquipmentBoardingGroup">
<xsd:sequence>
...
<xsd:element name="Kneeling" type="xsd:boolean" minOccurs="0">
<xsd:element name="KneelingBoardingHeight" type="LengthType" minOccurs="0">
</xsd:sequence>
</xsd:group>
Examples
[!NOTE]
In all examples the default entrance boarding height is modeled viaAccessVehicleEquipment/BoardingHeightinstead of usingPassengerEntrance/HeightFromGroundas it is less ambiguous especially when the entrance has steps. Otherwise it might be unclear if the steps are included in theHeightFromGroundor not and whether the steps are inside or outside of the entrance. Some might also be tempted to measure the height from ground at the lowest point of the door and not the lowest entry point.
ICE with 1 built-in step and 1 foldable step (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.5</BoardingHeight>
<NumberOfSteps>1</NumberOfSteps>
<!-- Not yet supported. Could be calculated based on vehicle floor height, HeightFromGround and NumberOfSteps -->
<StepHeight>0.15</StepHeight>
</AccessVehicleEquipment>
<RetractableStepVehicleEquipment>
<NumberOfSteps>1</NumberOfSteps>
<BoardingHeight>0.35</BoardingHeight>
<EquipmentLength>0.2<EquipmentLength>
<IsAutomatic>true</IsAutomatic>
</RetractableStepVehicleEquipment>
Tram with 3 (optional) foldable steps where the lowest step reaches out of the vehicle entrance (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.7</BoardingHeight>
</AccessVehicleEquipment>
<RetractableStepVehicleEquipment>
<NumberOfSteps>3</NumberOfSteps>
<!-- can theoretically be derived from (AccessVehicleEquipment.BoardingHeight - RetractableStepVehicleEquipment.BoardingHeight) / RetractableStepVehicleEquipment.NumberOfSteps -->
<StepHeight>0.15</StepHeight>
<BoardingHeight>0.25</BoardingHeight>
<!-- Only the last step reaches out of the train, this is the only step contributing to the equipment length -->
<EquipmentLength>0.2<EquipmentLength>
<IsAutomatic>true</IsAutomatic>
</RetractableStepVehicleEquipment>
Stepless train entrance with sliding step (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.7</BoardingHeight>
</AccessVehicleEquipment>
<RetractableStepVehicleEquipment>
<NumberOfSteps>1</NumberOfSteps>>
<BoardingHeight>0.69</BoardingHeight>
<MaximumEquipmentLength>0.2<MaximumEquipmentLength>
<IsAutomatic>true</IsAutomatic>
</RetractableStepVehicleEquipment>
Combi ramp (electrical sliding ramp and manual fold out ramp)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.3</BoardingHeight>
</AccessVehicleEquipment>
<RampVehicleEquipment>
<Fixed>true</Fixed>
<EquipmentLength>0.678<EquipmentLength>
<EquipmentWidth>0.917<EquipmentWidth>
<BearingCapacity>350</BearingCapacity>
<AssistanceRequired>false</AssistanceRequired>
<IsAutomatic>true</IsAutomatic>
<InOperationDuration>8</InOperationDuration>
<OutOperationDuration>8</OutOperationDuration>
</RampVehicleEquipment>
<RampVehicleEquipment>
<Fixed>true</Fixed>
<EquipmentLength>0.819<EquipmentLength>
<EquipmentWidth>1.004<EquipmentWidth>
<BearingCapacity>350</BearingCapacity>
<AssistanceRequired>true</AssistanceRequired>
<IsAutomatic>false</IsAutomatic>
</RampVehicleEquipment>
Portable ramp (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.7</BoardingHeight>
</AccessVehicleEquipment>
<RampVehicleEquipment>
<Fixed>false</Fixed>
<EquipmentLength>2<EquipmentLength>
<EquipmentWidth>1<EquipmentWidth>
<BearingCapacity>350</BearingCapacity>
<AssistanceRequired>true</AssistanceRequired>
<IsAutomatic>false</IsAutomatic>
</RampVehicleEquipment>
Automatic outside the door ramp (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.7</BoardingHeight>
</AccessVehicleEquipment>
<RampVehicleEquipment>
<Fixed>true</Fixed>
<EquipmentLength>0.6<EquipmentLength>
<EquipmentWidth>1<EquipmentWidth>
<BearingCapacity>350</BearingCapacity>
<AssistanceRequired>false</AssistanceRequired>
<IsAutomatic>true</IsAutomatic>
<InOperationDuration>1</InOperationDuration>
<OutOperationDuration>1</OutOperationDuration>
</RampVehicleEquipment>
Automatic double arm lift (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>1</BoardingHeight>
</AccessVehicleEquipment>
<HoistVehicleEquipment>
<!-- This differs widely from the useable/inner width as the arms of the lift have to be taken into account as well -->
<EquipmentLength>3<EquipmentLength>
<EquipmentWidth>1.2<EquipmentWidth>
<BearingCapacity>500</BearingCapacity>
<InnerLength>1.5</InnerLength>
<InnerWidth>1</InnerWidth>
<!-- More than the actual boarding height as boarding height is measured from the top of the rail -->
<LiftingHeight>1.2</LiftingHeight>
<AssistanceRequired>true</AssistanceRequired>
<IsAutomatic>true</IsAutomatic>
<InOperationDuration>20</InOperationDuration>
<OutOperationDuration>20</OutOperationDuration>
</HoistVehicleEquipment>
Automatic tram lift (video)
<!-- references equipments -->
<PassengerEntrance/>
<AccessVehicleEquipment>
<BoardingHeight>0.2</BoardingHeight>
</AccessVehicleEquipment>
<HoistVehicleEquipment>
<EquipmentLength>0.4<EquipmentLength>
<BearingCapacity>350</BearingCapacity>
<InnerLength>1.2</InnerLength>
<InnerWidth>1</InnerWidth>->
<LiftingHeight>0.32</LiftingHeight>
<AssistanceRequired>false</AssistanceRequired>
<IsAutomatic>true</IsAutomatic>
</HoistVehicleEquipment>
Kneeling with ramp (video)
<!-- Front entrance -->
<PassengerEntrance>
<actualVehicleEquipments>
<ActualVehicleEquipment>
<Units>1</Units>
<AccessVehicleEquipmentRef version="any" ref="1"/>
</ActualVehicleEquipment>
</actualVehicleEquipments>
</PassengerEntrance>
<!-- Middle entrance -->
<PassengerEntrance>
<actualVehicleEquipments>
<ActualVehicleEquipment>
<Units>1</Units>
<AccessVehicleEquipmentRef version="any" ref="1"/>
</ActualVehicleEquipment>
<ActualVehicleEquipment>
<Units>1</Units>
<RampVehicleEquipmentRef version="any" ref="2"/>
</ActualVehicleEquipment>
</actualVehicleEquipments>
</PassengerEntrance>
<AccessVehicleEquipment id="1">
<BoardingHeight>0.3</BoardingHeight>
<Kneeling>true</Kneeling>
<KneelingBoardingHeight>0.2</KneelingBoardingHeight>
</AccessVehicleEquipment>
<RampVehicleEquipment id="2">
<Fixed>true</Fixed>
<EquipmentLength>1<EquipmentLength>
<EquipmentWidth>1<EquipmentWidth>
<BearingCapacity>350</BearingCapacity>
<AssistanceRequired>true</AssistanceRequired>
<IsAutomatic>false</IsAutomatic>
</RampVehicleEquipment>
Discarded ideas:
Usable ramp width
Ramps may have handrails wherefore the equipment width would not be the same as the usable/clearance/inner width. Therefore we could add the property InnerWidth to the RampVehicleEquipment to differentiate between the EquipmentWidth.
Resolution: So far we haven't found any vehicle ramp that has a handrail or were the usable width noticeably deviates from the EquipmentWidth.
IsAdjustableEquipmentLength
Have IsAdjustableEquipmentLength instead of Minimum/MaximumEquipmentLength to denote that the equipment (usually a sliding step or ramp) length is adjustable.
<xsd:element name="IsAdjustableEquipmentLength" type="xsd:boolean" minOccurs="0">
Resolution: Being able to optionally depict a range by providing min and max is more valuable.
Ranges
An alternative idea to the Minimum/MaximumEquipmentLength properties and the IsAdjustableEquipmentLength property is to introduce a special LengthOrRangeType type that can either contain a LengthType or two child elements (<Minimum> & <Maximum>) depicting a range. This allows modeling features that influence the accessibility of public transport vehicle onboarding/alighting with varying lengths like: kneeling, sliding steps and ramp lengths.
Modeling this with tight constraints using XSD 1.0 does not seem to be possible (see) but with XSD 1.1 it can be somewhat done:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.1">
<xsd:simpleType name="LengthType">
<xsd:restriction base="xsd:decimal"/>
</xsd:simpleType>
<xsd:complexType name="LengthOrRangeType" mixed="true">
<xsd:sequence>
<xsd:element name="Minimum" type="LengthType" minOccurs="0" maxOccurs="1" />
<xsd:element name="Maximum" type="LengthType" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
<xsd:assert test="
(count(*) eq 2 and not(text()[normalize-space()])) or
(not(*) and . castable as LengthType)
"/>
</xsd:complexType>
<xsd:element name="Length" type="LengthOrRangeType"/>
</xsd:schema>
Valid XML:
<?xml version="1.0"?>
<Length>
<Minimum>3</Minimum>
<Maximum>1</Maximum>
</Length>
<?xml version="1.0"?>
<Length>5</Length>
Invalid XML:
<?xml version="1.0"?>
<Length>
<Minimum>3</Minimum>
<Maximum>1</Maximum>
5
</Length>
Resolution: Very flexible as well as nice to write and read but hard to consume/parse. Very uncommon practice in NeTEx.