Dev:Simple crossing
The purpose of this example is twofold. It shall teach newcomers the principles of a model’s topology of railML® 3. As for the proficient users, this tutorial is to provide a common way to describe simple railway crossing, e.g. for certification purposes.
A railway crossing is a point where two tracks cross each other and either enable trains to move from one track to the other or not.
Simple crossings do not enable trains to move from one track to the other. They are described with <crossing> element of railML® 3.
Introduction
Usually, simple crossing is part of a diamond (scissor) crossover. It consists of a simple crossing and four railway switches.
Below you can see a source code of a diamond crossover description. Please refer to “Example data” of railML.org website for an example of a linear positioning system definition. Below code snippet below deliberately misses these, as well as some other references for the sake of space reasons (this section is already very-very long).
1 <infrastructure id="is_01"> 2 <topology> 3 <netElements> 4 <netElement id="ne26"> 5 <relation ref="nr_ne26ne9_swi53"/> 6 <relation ref="nr_ne26ne25_swi53"/> 7 <relation ref="nr_ne26ne31_scr314"/> 8 <relation ref="nr_ne26ne32_scr314"/> 9 <relation ref="nr_ne26ne29_scr314"/> 10 <associatedPositioningSystem id="ne26_aps01"> 11 <intrinsicCoordinate id="ne26_aps01_ic01" 12 intrinsicCoord="0"/> 13 <intrinsicCoordinate id="ne26_aps01_ic02" 14 intrinsicCoord="1"/> 15 </associatedPositioningSystem> 16 </netElement> 17 <netElement id="ne31"> 18 <relation ref="nr_ne30ne31_swi312"/> 19 <relation ref="nr_ne26ne31_scr314"/> 20 <relation ref="nr_ne31ne25_swi312"/> 21 <relation ref="nr_ne31ne32_scr314"/> 22 <relation ref="nr_ne31ne29_scr314"/> 23 <associatedPositioningSystem id="ne31_aps01"> 24 <intrinsicCoordinate id="ne31_aps01_ic01" 25 intrinsicCoord="0"/> 26 <intrinsicCoordinate id="ne31_aps01_ic02" 27 intrinsicCoord="1"/> 28 </associatedPositioningSystem> 29 </netElement> 30 <netElement id="ne32"> 31 <relation ref="nr_ne26ne32_scr314"/> 32 <relation ref="nr_ne31ne32_scr314"/> 33 <relation ref="nr_ne28ne32_swi313"/> 34 <relation ref="nr_ne32ne29_scr314"/> 35 <relation ref="nr_ne32ne10_swi313"/> 36 <associatedPositioningSystem id="ne32_aps01"> 37 <intrinsicCoordinate id="ne32_aps01_ic01" 38 intrinsicCoord="0"/> 39 <intrinsicCoordinate id="ne32_aps01_ic02" 40 intrinsicCoord="1"/> 41 </associatedPositioningSystem> 42 </netElement> 43 <netElement id="ne29"> 44 <relation ref="nr_ne26ne29_scr314"/> 45 <relation ref="nr_ne31ne29_scr314"/> 46 <relation ref="nr_ne28ne29_swi55"/> 47 <relation ref="nr_ne32ne29_scr314"/> 48 <relation ref="nr_ne29ne27_swi55"/> 49 <associatedPositioningSystem id="ne29_aps01"> 50 <intrinsicCoordinate id="ne29_aps01_ic01" 51 intrinsicCoord="0"/> 52 <intrinsicCoordinate id="ne29_aps01_ic02" 53 intrinsicCoord="1"/> 54 </associatedPositioningSystem> 55 </netElement> 56 </netElements> 57 <netRelations> 58 <netRelation id="nr_ne26ne31_scr314" 59 positionOnA="1" 60 positionOnB="1" 61 navigability="None"> 62 <elementA ref="ne26"/> 63 <elementB ref="ne31"/> 64 </netRelation> 65 <netRelation id="nr_ne26ne32_scr314" 66 positionOnA="1" 67 positionOnB="0" 68 navigability="None"> 69 <elementA ref="ne26"/> 70 <elementB ref="ne32"/> 71 </netRelation> 72 <netRelation id="nr_ne26ne29_scr314" 73 positionOnA="1" 74 positionOnB="0" 75 navigability="Both"> 76 <elementA ref="ne26"/> 77 <elementB ref="ne29"/> 78 </netRelation> 79 <netRelation id="nr_ne31ne32_scr314" 80 positionOnA="1" 81 positionOnB="0" 82 navigability="Both"> 83 <elementA ref="ne31"/> 84 <elementB ref="ne32"/> 85 </netRelation> 86 <netRelation id="nr_ne31ne29_scr314" 87 positionOnA="1" 88 positionOnB="0" 89 navigability="None"> 90 <elementA ref="ne31"/> 91 <elementB ref="ne29"/> 92 </netRelation> 93 <netRelation id="nr_ne32ne29_scr314" 94 positionOnA="0" 95 positionOnB="0" 96 navigability="None"> 97 <elementA ref="ne32"/> 98 <elementB ref="ne29"/> 99 </netRelation> 100 <netRelation id="nr_ne26ne9_swi53" 101 positionOnA="0" 102 positionOnB="0" 103 navigability="Both"> 104 <elementA ref="ne26"/> 105 <elementB ref="ne9"/> 106 </netRelation> 107 <netRelation id="nr_ne26ne25_swi53" 108 positionOnA="0" 109 positionOnB="1" 110 navigability="None"> 111 <elementA ref="ne26"/> 112 <elementB ref="ne25"/> 113 </netRelation> 114 <netRelation id="nr_ne9ne25_swi53" 115 positionOnA="0" 116 positionOnB="1" 117 navigability="Both"> 118 <elementA ref="ne9"/> 119 <elementB ref="ne25"/> 120 </netRelation> 121 <netRelation id="nr_ne30ne25_swi312" 122 positionOnA="0" 123 positionOnB="0" 124 navigability="Both"> 125 <elementA ref="ne30"/> 126 <elementB ref="ne25"/> 127 </netRelation> 128 <netRelation id="nr_ne30ne31_swi312" 129 positionOnA="0" 130 positionOnB="0" 131 navigability="Both"> 132 <elementA ref="ne30"/> 133 <elementB ref="ne31"/> 134 </netRelation> 135 <netRelation id="nr_ne31ne25_swi312" 136 positionOnA="0" 137 positionOnB="0" 138 navigability="None"> 139 <elementA ref="ne31"/> 140 <elementB ref="ne25"/> 141 </netRelation> 142 <netRelation id="nr_ne28ne32_swi313" 143 positionOnA="0" 144 positionOnB="1" 145 navigability="None"> 146 <elementA ref="ne28"/> 147 <elementB ref="ne32"/> 148 </netRelation> 149 <netRelation id="nr_ne28ne10_swi313" 150 positionOnA="1" 151 positionOnB="0" 152 navigability="Both"> 153 <elementA ref="ne10"/> 154 <elementB ref="ne28"/> 155 </netRelation> 156 <netRelation id="nr_ne32ne10_swi313" 157 positionOnA="1" 158 positionOnB="1" 159 navigability="Both"> 160 <elementA ref="ne10"/> 161 <elementB ref="ne32"/> 162 </netRelation> 163 <netRelation id="nr_ne28ne27_swi55" 164 positionOnA="1" 165 positionOnB="0" 166 navigability="Both"> 167 <elementA ref="ne28"/> 168 <elementB ref="ne27"/> 169 </netRelation> 170 <netRelation id="nr_ne28ne29_swi55" 171 positionOnA="1" 172 positionOnB="1" 173 navigability="None"> 174 <elementA ref="ne28"/> 175 <elementB ref="ne29"/> 176 </netRelation> 177 <netRelation id="nr_ne29ne27_swi55" 178 positionOnA="1" 179 positionOnB="0" 180 navigability="Both"> 181 <elementA ref="ne29"/> 182 <elementB ref="ne27"/> 183 </netRelation> 184 </netRelations> ... 185 </topology> 186 <functionalInfrastructure> 187 <switches> 188 <switchIS id="swi27" 189 continueCourse="right" 190 branchCourse="left" 191 type="ordinarySwitch"> 192 <name name="70W02" 193 language="en"/> 194 <spotLocation id="swi27_sloc01" 195 netElementRef="ne26" 196 applicationDirection="normal" 197 intrinsicCoord="0.0000"/> 198 <designator register="_Example" 199 entry="SWITCH 70W02"/> 200 <leftBranch netRelationRef="nr_ne24ne26_swi27" 201 branchingSpeed="60" 202 joiningSpeed="60" 203 radius="-500"/> 204 <rightBranch netRelationRef="nr_ne23ne26_swi27" 205 branchingSpeed="60" 206 joiningSpeed="60" 207 radius="0"/> 208 </switchIS> 209 <switchIS id="swi53" 210 continueCourse="right" 211 branchCourse="left" 212 type="ordinarySwitch"> 213 <name name="Sw15" 214 language="en"/> 215 <spotLocation id="swi53_sloc01" 216 netElementRef="ne9" 217 applicationDirection="reverse" 218 intrinsicCoord="0.0000"/> 219 <designator register="_Example" 220 entry="SWITCH Sw15"/> 221 <leftBranch netRelationRef="nr_ne9ne25_swi53" 222 branchingSpeed="60" 223 joiningSpeed="40" 224 radius="0"/> 225 <rightBranch netRelationRef="nr_ne26ne9_swi53" 226 branchingSpeed="40" 227 joiningSpeed="40" 228 radius="500"/> 229 </switchIS> 230 <switchIS id="swi312" 231 continueCourse="right" 232 branchCourse="left" 233 type="ordinarySwitch"> 234 <name name="Sw01" 235 language="en"/> 236 <spotLocation id="swi312_sloc01" 237 netElementRef="ne30" 238 applicationDirection="normal" 239 intrinsicCoord="0.0000"/> 240 <designator register="_Example" 241 entry="SWITCH Sw01"/> 242 <leftBranch netRelationRef="nr_ne30ne31_swi312" 243 branchingSpeed="60" 244 joiningSpeed="60" 245 radius="-500"/> 246 <rightBranch netRelationRef="nr_ne30ne25_swi312" 247 branchingSpeed="60" 248 joiningSpeed="60" 249 radius="0"/> 250 </switchIS> 251 <switchIS id="swi313" 252 continueCourse="right" 253 branchCourse="left" 254 type="ordinarySwitch"> 255 <name name="Sw02" 256 language="en"/> 257 <spotLocation id="swi313_sloc01" 258 netElementRef="ne10" 259 applicationDirection="normal" 260 intrinsicCoord="1.0000"/> 261 <designator register="_Example" 262 entry="SWITCH Sw02"/> 263 <leftBranch netRelationRef="nr_ne32ne10_swi313" 264 branchingSpeed="40" 265 joiningSpeed="60" 266 radius="-500"/> 267 <rightBranch netRelationRef="nr_ne28ne10_swi313" 268 branchingSpeed="40" 269 joiningSpeed="60" 270 radius="0"/> 271 </switchIS> 272 </switches> 273 <crossings> 274 <crossing id="scr314"> 275 <name name="Sw03" 276 language="en"/> 277 <spotLocation id="scr314_sloc01" 278 netElementRef="ne31" 279 intrinsicCoord="1.0000"/> 280 <designator register="_Example" 281 entry="CROSSING Sw03"/> 282 <straightBranch netRelationRef="nr_ne31ne32_scr314"/> 283 <straightBranch netRelationRef="nr_ne26ne29_scr314"/> 284 </crossing> 285 </crossings> 286 <tracks> 287 <track id="trk9" 288 mainDirection="both" 289 type="mainTrack" 290 infrastructureManagerRef="ou_01"> 291 <name name="track9" 292 language="en"/> 293 <linearLocation id="trk9_lloc01" 294 applicationDirection="both"> 295 <associatedNetElement keepsOrientation="false" 296 netElementRef="ne9"/> 297 </linearLocation> 298 <designator register="_Example" 299 entry="TRACK track9"/> 300 <length value="240.000" 301 type="physical"/> 302 <trackEnd ref="swi53"/> 303 </track> 304 <track id="trk25" 305 mainDirection="both" 306 type="mainTrack" 307 infrastructureManagerRef="ou_01"> 308 <name name="track25" 309 language="en"/> 310 <linearLocation id="trk25_lloc01" 311 applicationDirection="both"> 312 <associatedNetElement keepsOrientation="false" 313 netElementRef="ne25"/> 314 </linearLocation> 315 <designator register="_Example" 316 entry="TRACK track25"/> 317 <length value="150.000" 318 type="physical"/> 319 <trackBegin ref="swi53"/> 320 <trackEnd ref="swi312"/> 321 </track> 322 <track id="trk30" 323 mainDirection="both" 324 type="mainTrack" 325 infrastructureManagerRef="ou_01"> 326 <name name="track30" 327 language="en"/> 328 <linearLocation id="trk30_lloc01" 329 applicationDirection="both"> 330 <associatedNetElement keepsOrientation="true" 331 netElementRef="ne30"/> 332 </linearLocation> 333 <designator register="_Example" 334 entry="TRACK track30"/> 335 <length value="1110.000" 336 type="physical"/> 337 <trackBegin ref="swi312"/> 338 </track> 339 <track id="trk26" 340 mainDirection="both" 341 type="mainTrack" 342 infrastructureManagerRef="ou_01"> 343 <name name="track26" 344 language="en"/> 345 <linearLocation id="trk26_lloc01" 346 applicationDirection="both"> 347 <associatedNetElement keepsOrientation="true" 348 netElementRef="ne26"/> 349 </linearLocation> 350 <designator register="_Example" 351 entry="TRACK track26"/> 352 <length value="106.066" 353 type="physical"/> 354 <trackBegin ref="swi53"/> 355 <trackEnd ref="scr314"/> 356 </track> 357 <track id="trk31" 358 mainDirection="both" 359 type="mainTrack" 360 infrastructureManagerRef="ou_01"> 361 <name name="track31" 362 language="en"/> 363 <linearLocation id="trk31_lloc01" 364 applicationDirection="both"> 365 <associatedNetElement keepsOrientation="true" 366 netElementRef="ne31"/> 367 </linearLocation> 368 <designator register="_Example" 369 entry="TRACK track31"/> 370 <length value="106.066" 371 type="physical"/> 372 <trackBegin ref="swi312"/> 373 <trackEnd ref="scr314"/> 374 </track> 375 <track id="trk32" 376 mainDirection="both" 377 type="mainTrack" 378 infrastructureManagerRef="ou_01"> 379 <name name="track32" 380 language="en"/> 381 <linearLocation id="trk32_lloc01" 382 applicationDirection="both"> 383 <associatedNetElement keepsOrientation="false" 384 netElementRef="ne32"/> 385 </linearLocation> 386 <designator register="_Example" 387 entry="TRACK track32"/> 388 <length value="106.066" 389 type="physical"/> 390 <trackBegin ref="swi313"/> 391 <trackEnd ref="scr314"/> 392 </track> 393 <track id="trk29" 394 mainDirection="both" 395 type="mainTrack" 396 infrastructureManagerRef="ou_01"> 397 <name name="track29" 398 language="en"/> 399 <linearLocation id="trk29_lloc01" 400 applicationDirection="both"> 401 <associatedNetElement keepsOrientation="false" 402 netElementRef="ne29"/> 403 </linearLocation> 404 <designator register="_Example" 405 entry="TRACK track29"/> 406 <length value="106.066" 407 type="physical"/> 408 <trackBegin ref="swi55"/> 409 <trackEnd ref="scr314"/> 410 </track> 411 <track id="trk27" 412 mainDirection="both" 413 type="mainTrack" 414 infrastructureManagerRef="ou_01"> 415 <name name="track27" 416 language="en"/> 417 <linearLocation id="trk27_lloc01" 418 applicationDirection="both"> 419 <associatedNetElement keepsOrientation="true" 420 netElementRef="ne27"/> 421 </linearLocation> 422 <designator register="_Example" 423 entry="TRACK track27"/> 424 <length value="1172.132" 425 type="physical"/> 426 <trackBegin ref="swi55"/> 427 </track> 428 <track id="trk28" 429 mainDirection="both" 430 type="mainTrack" 431 infrastructureManagerRef="ou_01"> 432 <name name="track28" 433 language="en"/> 434 <linearLocation id="trk28_lloc01" 435 applicationDirection="both"> 436 <associatedNetElement keepsOrientation="false" 437 netElementRef="ne28"/> 438 </linearLocation> 439 <designator register="_Example" 440 entry="TRACK track28"/> 441 <length value="150.000" 442 type="physical"/> 443 <trackBegin ref="swi55"/> 444 <trackEnd ref="swi313"/> 445 </track> 446 <track id="trk10" 447 mainDirection="both" 448 type="mainTrack" 449 infrastructureManagerRef="ou_01"> 450 <name name="track10" 451 language="en"/> 452 <linearLocation id="trk10_lloc01" 453 applicationDirection="both"> 454 <associatedNetElement keepsOrientation="true" 455 netElementRef="ne10"/> 456 </linearLocation> 457 <designator register="_Example" 458 entry="TRACK track10"/> 459 <length value="2648.528" 460 type="physical"/> 461 <trackEnd ref="swi313"/> 462 </track> 463 </tracks> 464 </functionalInfrastructure> 465</infrastructure>
Topological layer of a simple crossing
To describe a simple crossing at the topological level, at least four net elements must be defined (ellipses) to go through straight branches of the crossing ‒ from track 26 to track 29 ‒ and from track 32 to track 31 (Figure 3, lines 3-56 of the listing). Elements are linked by relations (green and red circles, line 57-185 of listing).
As our example is complicated by diamond crossing, additionally, six net elements are defined for railway switches (swi53, swi312, swi313, swi55). Please note that railway switch description uses only branching and continue branches for its description, the switchable crossing description makes use of only straight and turning branches, while simple crossing uses only straight branches.
In the figure relations (circles) are highlighted by the colour of the corresponding crossing or switch from the above figure.
The condensed relations matrices for simple crossing and diamond crossover are presented in the tables below.
ne26 | ne29 | ne31 | ne32 | |
---|---|---|---|---|
ne26 | + | - | - | |
ne29 | + | - | - | |
ne31 | - | - | + | |
ne32 | - | - | + |
ne9 | ne25 | ne30 | ne26 | ne29 | ne31 | ne32 | ne10 | ne28 | ne27 | |
---|---|---|---|---|---|---|---|---|---|---|
ne9 | + | + | ||||||||
ne25 | + | + | - | |||||||
ne30 | + | + | ||||||||
ne26 | + | + | - | - | ||||||
ne29 | + | - | - | - | + | |||||
ne31 | - | + | - | - | + | |||||
ne32 | - | - | + | + | - | |||||
ne10 | + | + | ||||||||
ne28 | - | - | + | + | ||||||
ne27 | + | + |
In the table, pluses are navigable relations (e.g., line 72 of the listing). The train can go through a simple crossing only in a “straight” branch ‒ from element 51 to 75 (e.g. from track 26 to track 29).
The branching mechanism of a simple crossing means that to get from track 26 (element ne26) to track 31 (element ne31), one should return to the switch swi53. In that, it is not possible to go directly from track 26 to track 31.
To represent the impossibility of going from track 26 to track 31 directly, non-navigable relations (attribute @navigability)=“none”, e.g. line 58 of the listing) are used ‒ minuses.
Functional
Based on the topology, child <spotLocation> defines the logical location of a simple crossing (line 277). Track 31 is located at element ne31 (line 363 of the listing) and a crossing scr314 is located at element ne31 (line 277). This implies that the crossing is located at track 31.
The simple crossing is then connected to navigable relations via <straightBranch> children (lines 282, and 283 of the listing). Simple crossings are not explicitly linked with non-navigable relations (line 58 of the listing). This thesis means that both navigable and non-navigable relations are necessary to describe the topology of an ordinary railway switch but only the first ones are linked to a switch by @netRelationRef attributes of a switch’s children. On the other hand, non-navigable relations are linked to a switch in an implicit manner. If a non-navigable relation links the “branch” and “continue” course elements of a switch, then it also describes this switch.
For a crossing @continueCourse and @branchCourse attributes should not be used. There is also no beginning of a crossing, so it is not possible to define an application direction.
Comparison with railML 2
According to Connection_between_tracks in railML® 2, there are three ways to describe a crossing: with 4, 3 or 2 tracks. In railML3 it is also possible to merge let's say ne30 and ne94 into one track. Yet the topology layer remains the same.
According to Connection_between_tracks in railML® 2, the navigability of straight branches is described implicitly with the combination of “incoming” and “outgoing” attributes, i.e. @passable=“true” is not defined. In railML® 3 navigability is defined explicitly by a corresponding attribute.
Scope
In railML® 2 <crossing> is used to describe double, single switch crossings as well as simple crossings.
In railML® 3 <switchIS> is used to describe double, single switch crossings. <crossing> is only used for simple crossings.