Lignes et Horaires - Rochefort
defmodule Rochefort do
def repo_root do
Path.join(__DIR__, "../..")
end
def rbus_file do
Path.join(repo_root(), "/data/ca_rochefort_ocean-aggregated-netex-2025-03-03.zip")
end
def install_required_libraries() do
Mix.install([
{:kino, "~> 0.19.0"},
{:kino_maplibre, "~> 0.1.13"},
{:req, "~> 0.5.17"},
{:unzip, "~> 0.13.0"},
{:saxy, "~> 1.6"}
])
end
def compile_required_code() do
Code.compile_file("lib/zip_support.ex", repo_root())
Code.compile_file("lib/kino_tooling.ex", repo_root())
Code.require_file("lib/xml_support.ex", repo_root())
Code.require_file("lib/xml_summariser.ex", repo_root())
Code.require_file("lib/helpers.ex", repo_root())
end
def entries(file) do
file
|> ZipSupport.open_zip!()
|> ZipSupport.list_zip_entries()
end
def list_netex_content(mode, file \\ rbus_file())
def list_netex_content(:datatable, file) do
file
|> entries()
|> Enum.map(& %{"name" => &1})
|> Kino.DataTable.new()
end
def list_netex_content(:markdown, file) do
file
|> entries
|> Enum.map(& "* `#{&1}`")
|> Enum.join("\n")
|> Kino.Markdown.new()
end
def zip_stream(zip, entry_name) do
zip
|> Unzip.file_stream!(entry_name)
end
def xml_summary(file_filter, file \\ rbus_file()) when is_struct(file_filter, Regex) do
zip_handle = file
|> ZipSupport.open_zip!()
entry_name = zip_handle
|> ZipSupport.list_zip_entries()
|> Enum.filter(& &1 =~ file_filter)
|> Helpers.one!()
summary = zip_handle
|> Unzip.file_stream!(entry_name)
|> Stream.map(&IO.iodata_to_binary(&1))
|> XmlSummariser.summarise!()
"""
```xml
#{summary}
```
"""
|> Kino.Markdown.new()
end
end
Rochefort.install_required_libraries()
Rochefort.compile_required_code()
# Geo library must be already required
defmodule Rochefort.Carto do
def show_route_link(file_filter, route_link_xpath) do
zip = ZipSupport.open_zip!(Rochefort.rbus_file())
line_file = ZipSupport.list_zip_entries(zip)
|> Enum.filter(& &1 =~ file_filter)
|> Helpers.one!()
content = ZipSupport.read_entry!(zip, line_file) |> XmlSupport.string_to_xmerl!()
routelink = content |> XmlSupport.xpath!(route_link_xpath) |> List.first()
{:xmlObj, :string, data} = :xmerl_xpath.string(
~c"string(gis:LineString/gis:posList/text())",
routelink)
coordinates = data
|> :erlang.list_to_binary()
|> String.split(~r/\s/)
|> Enum.map(&String.to_float(&1))
|> Enum.chunk_every(2)
|> Enum.map(fn(x) -> Enum.reverse(x) end)
|> Enum.map(&List.to_tuple(&1))
geom = %Geo.LineString{coordinates: coordinates}
# TODO: compute proper bounding box based on coordinates
MapLibre.new(style: "https://tiles.openfreemap.org/styles/liberty", center: {-0.9572910070419312, 45.925331115722656}, zoom: 15)
|> MapLibre.add_geo_source("geom", geom)
|> MapLibre.add_layer(
id: "geom_line",
source: "geom",
type: :line,
paint: [line_color: "#f63b8a", line_opacity: 0.7, line_width: 5]
)
end
end
:ok
INTRODUCTION - 00:00:00
Bienvenue dans la partie de formation qui traite du Réseau ! Nous aborderons entre autres les principes des Lignes, des Itinéraires, des Horaires et Calendriers…
🔹 Déroulement de la formation
-
Nous commencerons par une approche sur le réel, en partant de l’offre de “Rochefort Océan”
-
Nous plongerons ensuite dans les données des fichiers NeTEx
-
Et nous mettrons au fur et à mesure en lien le réel et les données NeTEx, pour ce qui concerne la topologie et les horaires des lignes ainsi que la définition des calendriers.
🔹 Ce que vous allez apprendre
-
Les bases du format NeTEx et son utilisation dans la modélisation des lignes et des horaires de passage.
-
Les principaux éléments XML décrivant un Réseau (Line, Route, ServiceJourneyPattern, ServiceJourney…) et les Calendriers.
-
Comment lire un fichier NeTEx et en extraire des informations utiles.
💡 Bon à savoir : Aucun prérequis technique avancé n’est nécessaire, mais une familiarité avec les données de transport ou le format XML sera un plus.
🚀 Prêt à plonger dans l’univers de NeTEx ? Alors, commençons !
PARTIR DU RÉEL - L’OFFRE DE “ROCHEFORT OCEAN” - 00:02:00
Pour la suite de cette présentation, nous partons du réel, sur le territoire de la Communauté d’agglomération de Rochefort Océan (CARO).
Source: Fiche Mémo Mobilités de la Communauté d’agglomération Rochefort Océan
On retrouve sur le site associé R’Bus Transport la liste des lignes disponibles.
Voici les lignes régulières présentes au moment où cette formation a été conçue :
Source: Plan du réseau RBus
Source: Plan du réseau RBus
Il existe également sur le territoire :
- du TAD (Transport À la Demande),
- des circuits scolaires (S ou RPI - Regroupement Pédagogique Intercommunal),
- et des lignes régionales desservant la CARO.
Ces lignes ne seront pas abordées lors de cette présentation.
DIRECTION : LA DONNÉE NETEX - 00:05:00
Si on se rend à présent sur https://transport.data.gouv.fr, le Point d’Accès National (aux données de transport), on retrouve des données reliées à ce territoire :
-
Jeu de données Réseau urbain R’Bus, sur lequel nous allons zoomer ici, avec l’offre R’Bus, mais aussi :
-
Réseau interurbain - Charente-Maritime 17 - Nouvelle-Aquitaine pour les lignes régionales
-
Agrégat des réseaux urbains et interurbains de la région Nouvelle Aquitaine pour des définitions plus précises des arrêts ainsi qu’un agrégat de l’offre régionale.
Si on télécharge le fichier NeTEx de R’Bus (archive ZIP), et qu’on la décompresse, on voit que l’archive NeTEx comporte les fichiers suivants :
Rochefort.list_netex_content(:markdown)
DESCRIPTION GÉNÉRALE DU RÉSEAU - 00:10:00
Dans l’archive, nous allons à présent descendre dans le fichier “commun”.
Rochefort.xml_summary(~r/commun/)
Les notions de Network et de Line sont définies dans les sections suivantes.
En ce qui concerne les autres éléments du fichier, en voici des définitions succintes :
-
Operator: un Operator représente une entreprise ou une entité qui exploite un service de transport public. Cela peut être une compagnie de bus, un exploitant ferroviaire, un opérateur de métro, etc. (ex : RATP, SNCF, Ilevia…). -
Authority: Authority représente une autorité organisatrice des transports (AOT). C’est une entité qui planifie, régule ou finance les services de transport public. Cela peut être une organisation gouvernementale, une collectivité locale ou une entité privée ayant des responsabilités dans l’organisation des transports. Une Authority peut superviser plusieurs Operators (opérateurs de transport). -
SiteConnection: un SiteConnection représente une connexion physique ou logique entre deux lieux (ex. gares, arrêts, terminaux, hubs de transport). Il est utilisé pour modéliser les correspondances piétonnes, les liaisons intermodales et les temps de transfert entre des sites de transport.
🔹 Fichier “commun” > Network - 00:13:00
Dans le fichier commun/partie Network, on définit le réseau (et les lignes rattachées).
Rappel définition : Un Network est un GROUPE DE LIGNES disposant d’un nom sous lequel un réseau de transport est connu.
Cf Profil France NETEX : Network
💡 Attention, ici les lignes ne sont que référencées (et non pas définies).
💡 De manière générale, les identifiants NeTEx ne doivent pas être utilisées à des fins sémantiques. Un identifiant ne doit pas être “parsé” pour en extraire des données.
import Kino.Shorts
xml_1 = "snippets/001-network.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
image_1 = "files/planReaseauRBus_lignes_regulieres.jpg" |> Tooling.file(__DIR__) |> Kino.Image.new("image/jpeg")
image_2 = "files/planReaseauRBus_lignesScolaires.jpg" |> Tooling.file(__DIR__) |> Kino.Image.new("image/jpeg")
grid([xml_1, image_1, image_2], columns: {2, 1, 1})
🫵 À vous :
- Téléchargez le fichier NeTEx de R’bus sur https://transport.data.gouv.fr, décompressez le, et observez les noms des fichiers.
✍️ Exercice :
- Quel est le nom complet du Réseau ?
- Combien de lignes y sont rattachées ?
🔹 Fichier “commun” > Line - 00:18:00
Pour chaque ligne, on définit des informations générales telles que son nom, son code, son mode, etc.
Rappel définition : Une LIGNE (Line) est un groupe d’ITINÉRAIREs (voir plus bas - Route) qui est en général connu du public par une appellation commune (nom ou numéro, extrémités de ligne, etc.).
Cf. Profil France NETEX : Line
L’objectif de la Line dans NETEX est de décrire de manière précise et structurée l’ensemble des éléments nécessaires à l’organisation et à l’exploitation d’un service de transport public. Cela permet aux autorités et opérateurs de transport de partager des informations sur les lignes de manière standardisée, facilitant ainsi la gestion des horaires et des itinéraires à l’échelle d’un réseau de transport.
line_complete = "snippets/002-line.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
line_name = "snippets/002-line-name.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
line_mode = "snippets/002-line-mode.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
line_code = "snippets/002-line-code.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
line_logo = "snippets/002-line-logo.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
logo_ligne = "files/logo_ligne_B.jpg" |> Tooling.file(__DIR__) |> Kino.Image.new("image/jpeg")
tabs([
Line: line_complete,
"Nom de la ligne": line_name,
"Mode de la ligne": line_mode,
"Code de la ligne": line_code,
"Badge de ligne": grid([line_logo, logo_ligne], columns: {6, 1})
])
✍️ Exercice : Trouvez le code, le nom le mode et les couleurs de la ligne F
💡 Attention, la couleur est exprimée au format hexadécimal. N’hésitez pas à utiliser un outil en ligne pour identifier la couleur voulue (ex : google.com : recherche “color hex”).
Solution * Code : F * Nom : Rochefort / Echillais / Soubise / Saint-Nazaire / Port des Barques Font Renaud * Mode : bus * Couleurs : Blanc sur fond Violet ```xml Rochefort / Echillais / Soubise / Saint-Nazaire / Port des Barques Font Renaud Rochefort / Echillais / Soubise / Saint-Nazaire / Port des Barques Font Renaud bus F 8D61A9 FFFFFF ```DESCRIPTION D’UNE LIGNE - 00:25:00
Dans ce fichier, on définit :
- La topologie de la ligne
- Ses horaires
line_complete = "snippets/003-line-frames.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
line_topo = "snippets/003-line-topo.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
line_horaires = "snippets/003-line-horaires.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
tabs([
Line: line_complete,
"Topologie de la ligne": line_topo,
"Horaires de la ligne": line_horaires
])
🔹Topologie de la ligne
Dans le GeneralFrame “LIGNE”, on définit la topologie de la ligne.
<GeneralFrame version="any" id="CA_ROCHEFORT_OCEAN:NETEX_LIGNE-20250210000707Z:LOC">
<TypeOfFrameRef ref="FR:TypeOfFrame:NETEX_LIGNE:">version="1.1:FR-NETEX_LIGNE-2.2"</TypeOfFrameRef>
<members>
<RouteLink version="any" id="CA_ROCHEFORT_OCEAN:RouteLink:B_F36FA40C125B3C6E9206EB371729B19A_52_P105843_P104746_100:LOC">
...
<Route version="any" id="CA_ROCHEFORT_OCEAN:Route:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<Direction version="any" id="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<ServiceJourneyPattern version="any" id="CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<ScheduledStopPoint version="any" id="CA_ROCHEFORT_OCEAN:ScheduledStopPoint:B_9523CEB527B7855DF453D065F3F80B97aP104781ScheduledScheduled:LOC">
...
<PassengerStopAssignment order="0" version="any" id="CA_ROCHEFORT_OCEAN:PassengerStopAssignment:B_71949A53A89CEE2A22C4F74ED125BEA3aP106997ScheduledScheduled:LOC">
</members>
</GeneralFrame>
✍️ Exercice : Combien y a-t-il de Route dans le fichier de la ligne B ?
Solution 💡 _N'hésitez pas à utiliser le [plugin](https://marketplace.visualstudio.com/items?itemName=EddilbertMacharia.jsonxmlgridviewer) de VisualStudioCode qui permet de visualiser un fichier XML sous forme tabulaire en regroupant et comptant les éléments._ Il y a 4 `Route` ! ```xml Parc des Fourriers -> Hôpital inbound Hôpital -> Parc des Fourriers outbound La Croix Breuil Magne -> Parc des Fourriers outbound Parc des Fourriers -> La Croix Breuil Magne inbound ```🔹🔹Route
Fichier d’une ligne > LIGNE > Route : on définit les itinéraires
Rappel définition : Un ITINÉRAIRE (Route) est une liste ordonnée de POINTs (RoutePoints) définissant un seul chemin à travers le réseau routier (ou ferré) dans une DIRECTION (Direction) donnée. Un ITINÉRAIRE peut passer deux fois par un même POINT.
Un ITINÉRAIRE appartient toujours à une LIGNE (Line). Une LIGNE est composée d’au moins un ITINÉRAIRE avec une DIRECTION. Une LIGNE peut donc comporter plusieurs ITINÉRAIREs, chacun avec sa DIRECTION.
💡 Les RoutePoints constitutifs d’un ITINÉRAIRE sont toujours des POINTs. Ils peuvent être des ScheduledStopPoint, comme dans l’exemple de Rochefort.
💡 Les ITINÉRAIREs sont généralement très similaires d’un point de vue topologique, c’est-à-dire des variantes d’un itinéraire principal avec quelques écarts seulement sur certaines parties (par exemple : arrêts en moins ou terminus anticipé par rapport à un itinéraire plus “complet”).
💡 Deux ITINÉRAIREs utilisant la même d’infrastructure (ou des voies parallèles), mais avec des DIRECTIONS opposées, appartiendront le plus souvent à la même LIGNE.
Cf. Profil France NETEX : Route
graph LR
Line("Line (Ligne)") -- est composée de plusieurs --> Route("Route (Itinéraire)")
Route -- est sur une unique --> Line
Route -- est composé de plusieurs --> RoutePoint@{ shape: procs, label: "RoutePoint (ex : ScheduledStopPoint)"}
Route -- est dans une --> Direction(Direction)
<!--<GeneralFrame version="any" id="CA_ROCHEFORT_OCEAN:NETEX_LIGNE-20250210000707Z:LOC">
<TypeOfFrameRef ref="FR:TypeOfFrame:NETEX_LIGNE:">version="1.1:FR-NETEX_LIGNE-2.2"</TypeOfFrameRef>
<members>
<RouteLink version="any" id="CA_ROCHEFORT_OCEAN:RouteLink:B_F36FA40C125B3C6E9206EB371729B19A_52_P105843_P104746_100:LOC">
...-->
<Route version="any" id="CA_ROCHEFORT_OCEAN:Route:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
<Name>Parc des Fourriers -> Hôpital</Name>
<LineRef ref="CA_ROCHEFORT_OCEAN:Line:B:LOC"/>
<!--<DirectionType>inbound</DirectionType>-->
<DirectionRef ref="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC" version="any"/>
</Route>
<!--<Direction version="any" id="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<ServiceJourneyPattern version="any" id="CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<ScheduledStopPoint version="any" id="CA_ROCHEFORT_OCEAN:ScheduledStopPoint:B_9523CEB527B7855DF453D065F3F80B97aP104781ScheduledScheduled:LOC">
...
<PassengerStopAssignment order="0" version="any" id="CA_ROCHEFORT_OCEAN:PassengerStopAssignment:B_71949A53A89CEE2A22C4F74ED125BEA3aP106997ScheduledScheduled:LOC">
</members>
</GeneralFrame>-->
⚠️ Les séquences de points sont actuellement, dans le fichier de Rochefort, définies à l’intérieur du ServiceJourneyPattern, et non pas de la Route. En théorie dans le profil France : il est obligatoire de les avoir dans la Route, et facultatif dans le ServiceJourneyPattern.
🔹🔹Direction
Fichier d’une ligne > LIGNE > Direction : on définit les directions possibles de nos Routes
Rappel définition : une DIRECTION (Direction) représente le sens de circulation d’une ligne de transport, souvent utilisée pour décrire les parcours aller-retour ou les différentes orientations d’un ITINéRAIRE (Route).
Dans l’extrait ci-dessous, on visualise la définition de la Direction ainsi que la référence de la Route vers cette Direction (DirectionRef)
<!--<GeneralFrame version="any" id="CA_ROCHEFORT_OCEAN:NETEX_LIGNE-20250210000707Z:LOC">
<TypeOfFrameRef ref="FR:TypeOfFrame:NETEX_LIGNE:">version="1.1:FR-NETEX_LIGNE-2.2"</TypeOfFrameRef>
<members>
<RouteLink version="any" id="CA_ROCHEFORT_OCEAN:RouteLink:B_F36FA40C125B3C6E9206EB371729B19A_52_P105843_P104746_100:LOC">
...-->
<!--<Route version="any" id="CA_ROCHEFORT_OCEAN:Route:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
<Name>Parc des Fourriers -> Hôpital</Name>
<LineRef ref="CA_ROCHEFORT_OCEAN:Line:B:LOC"/>
<DirectionType>inbound</DirectionType>-->
<DirectionRef ref="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC" version="any"/>
<!--</Route>-->
...
<Direction version="any" id="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
<Name>Hôpital</Name>
</Direction>
...
<!--<ServiceJourneyPattern version="any" id="CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<ScheduledStopPoint version="any" id="CA_ROCHEFORT_OCEAN:ScheduledStopPoint:B_9523CEB527B7855DF453D065F3F80B97aP104781ScheduledScheduled:LOC">
...
<PassengerStopAssignment order="0" version="any" id="CA_ROCHEFORT_OCEAN:PassengerStopAssignment:B_71949A53A89CEE2A22C4F74ED125BEA3aP106997ScheduledScheduled:LOC">
</members>
</GeneralFrame>-->
✍️ Exercice : Dans quelle Direction (trouver son Name) va la Route d’identifiant CA_ROCHEFORT_OCEAN:Route:B_71949A53A89CEE2A22C4F74ED125BEA3:LOC de la ligne B ?
🔹🔹ScheduledStopPoint
Fichier d’une ligne > LIGNE > ScheduledStopPoint : on définit les points d’arrêt planifiés
Rappel définition : un POINT D’ARRÊT PLANIFIÉ (ScheduledStopPoint) est un POINT où les passagers peuvent monter à bord ou descendre des véhicules.
Cf. Profil France NETEX : ScheduledStopPoint
💡 Un ScheduledStopPoint est un arrêt logique et non pas physique. Néanmoins, pour des questions pratiques (avoir un jeu de données presque autoporteur), la localisation a été précisée ici car les arrêts physiques sont définis dans l’aggrégat des arrêts mutualisé au niveau régional (Agrégat des réseaux urbains et interurbains de la région Nouvelle Aquitaine). Le lien avec ces arrêts physiques est fait à l’aide des PassengerStopAssignment définis dans le chapitre suivant.
<!--<GeneralFrame version="any" id="CA_ROCHEFORT_OCEAN:NETEX_LIGNE-20250210000707Z:LOC">
<TypeOfFrameRef ref="FR:TypeOfFrame:NETEX_LIGNE:">version="1.1:FR-NETEX_LIGNE-2.2"</TypeOfFrameRef>
<members>
<RouteLink version="any" id="CA_ROCHEFORT_OCEAN:RouteLink:B_F36FA40C125B3C6E9206EB371729B19A_52_P105843_P104746_100:LOC">
...
<Route version="any" id="CA_ROCHEFORT_OCEAN:Route:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<Direction version="any" id="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<ServiceJourneyPattern version="any" id="CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...-->
<ScheduledStopPoint version="any" id="CA_ROCHEFORT_OCEAN:ScheduledStopPoint:B_9523CEB527B7855DF453D065F3F80B97aP104781ScheduledScheduled:LOC">
<Location>
<Longitude>-0.965409</Longitude>
<Latitude>45.958561</Latitude>
</Location>
</ScheduledStopPoint>
...
<!--<PassengerStopAssignment order="0" version="any" id="CA_ROCHEFORT_OCEAN:PassengerStopAssignment:B_71949A53A89CEE2A22C4F74ED125BEA3aP106997ScheduledScheduled:LOC">
</members>
</GeneralFrame>-->
🔹🔹PassengerStopAssignment
Fichier d’une ligne > LIGNE > PassengerStopAssignment : on définit les affectations des arrêts
Rappel définition : Un PassengerStopAssignment définit l’affectation d’un POINT D’ARRÊT PLANIFIÉ (ScheduledStopPoint) à un LIEU D’ARRÊT (ou un de ses composant de type ZONE D’EMBARQUEMENT (Quay) ou POSITION D’EMBARQUEMENT) pour un service passager.
Cf. Profil France NETEX : PassengerStopAssignment
graph LR
PassengerStopAssignment -- référence un --> ScheduledStopPoint
PassengerStopAssignment -- référence un --> Quay
💡 Comme indiqué dans la section précédente, un PassengerStopAssignment permet donc de faire le lien entre arrêt logique et arrêt physique.
💡 Les Quay sont définis en dehors du cadre de cette présentation, dans l’aggrégat des arrêts mutualisé au niveau régional (Agrégat des réseaux urbains et interurbains de la région Nouvelle Aquitaine). Celui-ci contient entre autres la liste des Quay et des StopPlace, et permet notamment de retrouver le nom des arrêts, leur localisation précise, ainsi que les informations d’accessibilité plus détaillées.
🔹🔹ServiceJourneyPattern
Fichier d’une ligne > LIGNE > ServiceJourneyPattern : on définit les parcours commerciaux
Rappel définition : Un PARCOURS COMMERCIAL (ServiceJourneyPattern) est un PARCOURS associé à une COURSE COMMERCIALE (transportant des passagers). Il liste les POINTs SUR PARCOURS (PointInJourneyPattern) parcourus, dans l’ordre, et sur un ITINERAIRE (Route) de référence (et donc dans la direction indiquée par l’itinéraire).
Cf. Profil France NETEX : ServiceJourneyPattern
💡 On parle aussi de MISSION COMMERCIALE.
💡 Dans notre exemple de Rochefort, les PointInJourneyPattern sont de type ScheduledStopPoint, ce qui n’est pas systématiquement le cas. En effet ils peuvent être de type TimingPoint.
graph LR
Route("Route (Itinéraire)") -- est le support du -->ServiceJourneyPattern("ServiceJourneyPattern (Parcours commercial)")
ServiceJourneyPattern -- est sur un unique --> Route
ServiceJourneyPattern -- est composé de plusieurs --> PointInJourneyPattern@{ shape: procs, label: "PointInJourneyPattern (ex : ScheduledStopPoint)"}
<!--<GeneralFrame version="any" id="CA_ROCHEFORT_OCEAN:NETEX_LIGNE-20250210000707Z:LOC">
<TypeOfFrameRef ref="FR:TypeOfFrame:NETEX_LIGNE:">version="1.1:FR-NETEX_LIGNE-2.2"</TypeOfFrameRef>
<members>
<RouteLink version="any" id="CA_ROCHEFORT_OCEAN:RouteLink:B_F36FA40C125B3C6E9206EB371729B19A_52_P105843_P104746_100:LOC">
...
<Route version="any" id="CA_ROCHEFORT_OCEAN:Route:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...
<Direction version="any" id="CA_ROCHEFORT_OCEAN:Direction:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
...-->
<ServiceJourneyPattern version="any" id="CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19A:LOC">
<Name>HOPITAL</Name>
<RouteRef ref="CA_ROCHEFORT_OCEAN:Route:B_F36FA40C125B3C6E9206EB371729B19A:LOC" version="any"/>
<DestinationDisplayRef ref="CA_ROCHEFORT_OCEAN:DestinationDisplay:B_F36FA40C125B3C6E9206EB371729B19A-B_F36FA40C125B3C6E9206EB371729B19AaP105843ScheduledScheduled:LOC" version="any"/>
<pointsInSequence>
<StopPointInJourneyPattern order="1" version="any" id="CA_ROCHEFORT_OCEAN:StopPointInJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19AaP105843ScheduledScheduled:LOC">
<StopPointInJourneyPattern order="2" version="any" id="CA_ROCHEFORT_OCEAN:StopPointInJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19AaP104746ScheduledScheduled:LOC">
<StopPointInJourneyPattern order="3" version="any" id="CA_ROCHEFORT_OCEAN:StopPointInJourneyPattern:B_F36FA40C125B3C6E9206EB371729B19AaP104745ScheduledScheduled:LOC">
...
</pointsInSequence>
<ServiceJourneyPatternType>passenger</ServiceJourneyPatternType>
</ServiceJourneyPattern>
...
<!--<ScheduledStopPoint version="any" id="CA_ROCHEFORT_OCEAN:ScheduledStopPoint:B_9523CEB527B7855DF453D065F3F80B97aP104781ScheduledScheduled:LOC">
...
<PassengerStopAssignment order="0" version="any" id="CA_ROCHEFORT_OCEAN:PassengerStopAssignment:B_71949A53A89CEE2A22C4F74ED125BEA3aP106997ScheduledScheduled:LOC">
</members>
</GeneralFrame>-->
✍️ Exercice :
-
À quelle
Route(trouver son Name) est rattaché leServiceJourneyPattern(PARCOURS) d’identifiant CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_BE7025F3F49C102A55A60E2C0071A38B:LOC ? - Combien d’arrêts sont prévus dans ce PARCOURS ?
- Quelles sont les coordonnées géographiques du 3ème arrêt du PARCOURS ?