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.15.3"},
{:kino_maplibre, "~> 0.1.12"},
{:unzip, "~> 0.12.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: :street, 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 (à la donnée 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 ?
Solution
-
Nom complet du réseau : R’bus (Rochefort Océan)
-
Nombre de lignes rattachées au réseau : 14
🔹 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.).
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
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.
version="1.1:FR-NETEX_LIGNE-2.2"
...
...
...
...
...
✍️ Exercice : combien y a-t-il de Route dans le fichier de la ligne B ?
Solution
💡 N’hésitez pas à utiliser le plugin de VisualStudioCode qui permet de visualiser un fichier XML sous forme tabulaire en regroupant et comptant les éléments
Il y a 4 Route
!
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)
Parc des Fourriers -> Hôpital
⚠️ 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)
...
Hôpital
...
✍️ Exercice : Dans quelle Direction
(trouver son Name
) va la Route
d’identifiant CA_ROCHEFORT_OCEAN:Route:B_71949A53A89CEE2A22C4F74ED125BEA3:LOC de la ligne B?
Solution
On retrouve la Route qui a cet identifiant :
Hôpital -> Parc des Fourriers
outbound
On récupère l’identifiant de la Direction
référencée :
On cherche l’élément Direction
qui possède cet identifiant et on visualise son Name
:
Parc des Fourriers
🔹🔹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.
-0.965409
45.958561
...
🔹🔹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)"}
HOPITAL
...
passenger
...
✍️ 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 ?
Solution
Question 1
On retrouve le ServiceJourneyPattern
qui a cet identifiant :
LA CROIX BREUIL MAGNE
...
passenger
On retrouve la Route
via son identifiant référencée (RouteRef) :
Parc des Fourriers -> La Croix Breuil Magne
inbound
–> son nom est “Parc des Fourriers -> La Croix Breuil Magne”
On cherche l’élément Direction
qui possède cet identifiant et on visualise son Name
:
La Croix Breuil Magne
Question 2
On compte (via la plugin par exemple) le nombre d’éléments StopPointInJourneyPattern
: il y en a 23 !
Question 3
Dans le ServiceJourneyPattern
, on retrouve le StopPointInJourneyPattern
tel que son attribut XML “order” est égal à 3.
true
true
false
On récupère le ScheduledStopPoint
via son identifiant référencée (ScheduledStopPointRef) :
-0.959909
45.924866
🔹🔹RouteLink
Fichier d’une ligne > LIGNE > RouteLink : on définit les tronçons d’itinéraires
💡 Nous n’aborderons pas les RouteLink
en détails à ce stade. Pour plus d’informations, voir la section correspondante en fin de présentation.
🔹Horaires de la ligne
Dans le GeneralFrame “HORAIRES”, on définit les horaires de la ligne.
version="1.1:FR-NETEX_HORAIRE-2.2"
...
🔹🔹ServiceJourney
Fichier d’une ligne > HORAIRES > ServiceJourney : on définit les courses
Rappel définition : Une COURSE (ServiceJourney
) est le mouvement défini d’un véhicule utilisant un PARCOURS COMMERCIAL (ServiceJourneyPattern
) spécifié avec des arrêts et des horaires déterminés. C’est une instance de PARCOURS COMMERCIAL (ServiceJourneyPattern
) pour un TYPE DE JOUR (DayType
) donné.
Cf Profil France NETEX : ServiceJourney
service_journey = "snippets/004-service-journey.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
service_journey_patternRef = "snippets/004-service-journey-pattern-ref.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
service_journey_pattern = "snippets/004-service-journey-pattern.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
service_journey_passingTimes = "snippets/004-service-journey-passing-times.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
service_journey_dayTypes = "snippets/004-service-journey-day-types.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
dayTypes_description = Kino.Markdown.new("""
Les dayTypes permettent de définir sur quels jours types la course est valable
Ici, la fiche horaire indique par exemple : “Toute l’année (sauf jours fériés)” et “Du Lundi au Samedi”
Le fichier xml référence le DayType “S1ETE_LMWJVS”
Celui-ci est réellement défini dans le fichier “calendrier”
""")
serviceJourneyImg = "files/ligneB_fiche_horaire_ServiceJourney - cropped.jpg" |> Tooling.file(__DIR__) |> Kino.Image.new("image/jpeg")
passingTimesImg = "files/ligneB_fiche_horaire_ServiceJourney_passingTimes.jpg" |> Tooling.file(__DIR__) |> Kino.Image.new("image/jpeg")
dayTypesImg = "files/ligneB_fiche_horaire_ServiceJourney_dayTypes.jpg" |> Tooling.file(__DIR__) |> Kino.Image.new("image/jpeg")
Kino.Layout.tabs([
ServiceJourney: Kino.Layout.grid([service_journey, serviceJourneyImg], columns: {2,1}),
JourneyPatternRef: Kino.Layout.grid([service_journey_patternRef, service_journey_pattern], columns: 2),
passingTimes: Kino.Layout.grid([service_journey_passingTimes, service_journey_pattern, passingTimesImg], columns: 3),
dayTypes: Kino.Layout.grid([service_journey_dayTypes, dayTypesImg, dayTypes_description], columns: 3)
])
DESCRIPTION DES PERIODES ET DES JOURS TYPES - 01:10:00
Les DayTypeAssignment assignent des jours types (DayType
) à des périodes de service (OperatingPeriod
) ou des dates précises (Date
). Ceci permet de définir les conditions de validité temporelle des COURSES (ServiceJourney
) que nous avons vues dans la section précédente.
generalFrame_calendrier = "snippets/005-calendar-general-frame.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
dayType = "snippets/005-calendar-day-type.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
operatingPeriod = "snippets/005-calendar-operating-period.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
dayTypeAssignment = "snippets/005-calendar-day-type-assignment.xml" |> Tooling.file(__DIR__) |> Tooling.xml()
Kino.Layout.tabs([
GeneralFrame: generalFrame_calendrier,
DayType: dayType,
OperatingPeriod: operatingPeriod,
DayTypeAssignment: Kino.Layout.grid([dayTypeAssignment, dayType, operatingPeriod], columns: 3)
])
✍️ Exercice :
-
Quelles sont les conditions temporelles de validité du
ServiceJourney
(COURSE) d’identifiant CA_ROCHEFORT_OCEAN:ServiceJourney:S11185:LOC ? -
Quel est l’horaire de passage au
ScheduledStopPoint
d’identifiant CA_ROCHEFORT_OCEAN:ScheduledStopPoint:B_BE7025F3F49C102A55A60E2C0071A38BaP104745ScheduledScheduled:LOC ? (💡 Indice : le ServiceJourneyPattern référencé contient les pointsInSequence dans le même ordre que les passingTimes de la COURSE)
Solution
Question 1
Dans le fichier de la ligne B, on retrouve le ServiceJourney
qui a cet identifiant et on récupère le DayType
référencé:
Dans le fichier des calendrier, on retrouve le DayType
: la COURSE est valide du lundi au samedi !
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
On récupère tous les DayTypeAssignment
qui référencent ce DayType
:
2025-07-14
false
2025-08-15
false
Pour le 1er, on voit qu’il faut aller chercher l’OperatingPeriod
correspondante :
2025-07-07T00:00:00
2025-08-30T00:00:00
On peut donc conclure que la COURSE est valide du lundi au samedi, tout l’été du 7 juillet 2025 au 30 août 2025, sauf les 14 juillet et 15 août !
Question 2
Dans le fichier de la ligne B, on récupère le ServiceJourneyPattern
référencé par le ServiceJourney
Dans les pointsInSequence, on récupère celui qui a l’identifiant du ScheduledStopPoint
voulu et on note son ordre : order = 3
true
true
false
En retournant dans le ServiceJourney
, on récupère le 3ème passingTime.
09:03:00
09:03:00
...
On en conclut que l’horaire de passage à l’arrêt voulu (pour la COURSE donnée) est : 09:03:00
RÉCAPITULATIFS DES CONCEPTS TRANSMODEL UTILISÉS - 01:25:00
Les concepts Transmodel permettent de modéliser la réalité terrain du monde du transport (voir Transmodel at a glance). Voici le sous-ensemble sur lequel cette présentation s’appuie:
graph TD
RouteLink("RouteLink (Tronçon d'itinéraire)") -- référence des --> RoutePoint
Network("Network (Réseau)") -- est un groupe de --> Line
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)
Route -- 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)"}
ServiceJourneyPattern -- est le support du --> ServiceJourney("ServiceJourney (Course)")
ServiceJourney -- est defini pour un --> DayType("DayType (Type de jour)")
RouteLink - détails - BONUS
Rappel définition : Un TRONCON D’ITINERAIRE (RouteLink
) est un tronçon orienté entre deux RoutePoint
(POINTs D’ITINÉRAIRE) permettant une définition univoque d’un chemin à travers le réseau.
Cf Profil France NETEX : RouteLink
Dans notre exemple, le RouteLink
part ici d’un ScheduleStopPoint
et arrive à un autre ScheduleStopPoint
, en suivant un tracé qui est son itinéraire intermédiaire, donné sous forme de coordonnées géographiques:
913.5795215028178
45.92617416381836 -0.9510250091552734 45.926109313964844 -0.950980007648468 45.925838470458984 -0.9517800211906433 45.92591094970703 -0.9518700242042542 45.927120208740234 -0.9529399871826172 45.92715835571289 -0.9530400037765503 45.92716979980469 -0.9531800150871277 45.927101135253906 -0.9539200067520142 45.92639923095703 -0.9538800120353699 45.926231384277344 -0.9538999795913696 45.926109313964844 -0.9539700150489807 45.926021575927734 -0.9540600180625916 45.9258918762207 -0.9542499780654907 45.925228118896484 -0.9562399983406067 45.92522048950195 -0.9563300013542175 45.925228118896484 -0.9566100239753723 45.92530059814453 -0.9573000073432922 45.925331115722656 -0.9572910070419312
...
Un programme informatique (ou un humain motivé) peut, à partir de ces coordonnées, afficher le tronçon sur une carte, comme ci-dessous.
Choisissez la position (numéro d’index) du RouteLink
dans le fichier:
numero_du_routelink = Kino.Input.text("Numéro du RouteLink", default: "1")
Puis cliquez sur “Reevaluate” ci-dessous pour l’afficher:
Rochefort.Carto.show_route_link(
~r/RBUS_B_B/,
"//RouteLink[#{Kino.Input.read(numero_du_routelink)}]"
)
{"events":{},"spec":{"bearing":0,"center":[-0.9572910070419312,45.925331115722656],"glyphs":"https://api.maptiler.com/fonts/{fontstack}/{range}.pbf?key=Q4UbchekCfyvXvZcWRoU","id":"streets","layers":[{"id":"background","layout":{"visibility":"visible"},"paint":{"background-color":{"stops":[[6,"rgba(252, 247, 229, 1)"],[10,"rgba(252, 247, 229, 1)"],[14,"rgba(246, 241, 229, 1)"],[15,"rgba(246, 241, 229, 1)"]]}},"type":"background"},{"filter":["all",["==","class","crop"]],"id":"landcover_cropland","layout":{"visibility":"visible"},"paint":{"fill-color":"rgba(243, 235, 195, 1)","fill-opacity":{"base":1,"stops":[[4,1],[8,0]]}},"source":"openmaptiles","source-layer":"globallandcover","type":"fill"},{"filter":["all",["==","class","grass"]],"id":"landcover_grassland","paint":{"fill-color":"rgba(226, 236, 197, 1)","fill-opacity":{"base":1,"stops":[[4,1],[8,0]]}},"source":"openmaptiles","source-layer":"globallandcover","type":"fill"},{"filter":["all",["==","class","scrub"]],"id":"landcover_scrubland","paint":{"fill-color":"rgba(199, 230, 179, 1)","fill-opacity":{"base":1,"stops":[[4,1],[8,0]]}},"source":"openmaptiles","source-layer":"globallandcover","type":"fill"},{"filter":["all",["==","class","tree"]],"id":"landcover_treeland","paint":{"fill-color":"rgba(190, 222, 173, 1)","fill-opacity":{"base":1,"stops":[[4,1],[8,0]]}},"source":"openmaptiles","source-layer":"globallandcover","type":"fill"},{"filter":["all",["==","class","forest"]],"id":"landcover_forestland","paint":{"fill-color":"rgba(171, 217, 170, 1)","fill-opacity":{"base":1,"stops":[[4,1],[8,0]]}},"source":"openmaptiles","source-layer":"globallandcover","type":"fill"},{"filter":["all",["==","class","snow"]],"id":"landcover_snowland","layout":{"visibility":"visible"},"paint":{"fill-color":"hsl(0, 0%, 100%)","fill-opacity":{"base":1,"stops":[[4,1],[8,0]]}},"source":"openmaptiles","source-layer":"globallandcover","type":"fill"},{"filter":["all"],"id":"park_outline","layout":{"visibility":"visible"},"minzoom":9,"paint":{"line-color":"rgba(167, 203, 131, 1)","line-dasharray":[1,1.5],"line-opacity":1,"line-width":{"stops":[[9,0.5],[14,2]]}},"source":"openmaptiles","source-layer":"park","type":"line"},{"filter":["all",["in","class","residential","suburbs","neighbourhood"]],"id":"landuse_residential","layout":{"visibility":"visible"},"maxzoom":24,"metadata":{},"paint":{"fill-color":{"base":1,"stops":[[9,"rgba(233, 227, 210, 0.80)"],[12,"rgba(233, 227, 210, 0.55)"],[16,"rgba(233, 227, 210, 0.35)"]]}},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["all",["==","class","wood"]],"id":"landcover_wood","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-antialias":false,"fill-color":"hsla(98, 61%, 72%, 0.7)","fill-opacity":0.4},"source":"openmaptiles","source-layer":"landcover","type":"fill"},{"filter":["all",["==","class","grass"]],"id":"landcover_grass","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-antialias":false,"fill-color":"rgba(224, 232, 201, 1)","fill-opacity":0.3},"source":"openmaptiles","source-layer":"landcover","type":"fill"},{"filter":["==","class","cemetery"],"id":"landuse_cemetery","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"hsl(75, 37%, 81%)"},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["==","class","hospital"],"id":"landuse_hospital","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgba(249, 225, 220, 1)"},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["==","class","school"],"id":"landuse_school","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgb(236,238,204)"},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["all",["in","class","stadium","pitch","track"]],"id":"landuse_stadium","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgb(236,238,204)"},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["all",["in","class","garages"]],"id":"landuse_garage","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgba(236, 236, 236, 1)"},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["all",["in","class","dam"]],"id":"landuse_dam","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgba(209, 212, 190, 1)"},"source":"openmaptiles","source-layer":"landuse","type":"fill"},{"filter":["all",["==","brunnel","tunnel"]],"id":"waterway_tunnel","layout":{"line-cap":"round","visibility":"visible"},"minzoom":14,"paint":{"line-color":"#a0c8f0","line-dasharray":[2,4],"line-width":{"base":1.3,"stops":[[13,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["==","class","river"],["!=","brunnel","tunnel"],["!=","intermittent",1]],"id":"waterway_river","layout":{"line-cap":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#a0c8f0","line-width":{"base":1.2,"stops":[[11,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["==","class","river"],["!=","brunnel","tunnel"],["==","intermittent",1]],"id":"waterway_river_intermittent","layout":{"line-cap":"round"},"metadata":{},"paint":{"line-color":"#a0c8f0","line-dasharray":[3,2],"line-width":{"base":1.2,"stops":[[11,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["!=","class","river"],["!=","brunnel","tunnel"],["!=","intermittent",1]],"id":"waterway_other","layout":{"line-cap":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#a0c8f0","line-width":{"base":1.3,"stops":[[13,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["!=","class","river"],["!=","brunnel","tunnel"],["==","intermittent",1]],"id":"waterway_other_intermittent","layout":{"line-cap":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#a0c8f0","line-dasharray":[4,3],"line-width":{"base":1.3,"stops":[[13,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["==","intermittent",1]],"id":"water_intermittent","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgba(172, 218, 251, 1)","fill-opacity":0.85},"source":"openmaptiles","source-layer":"water","type":"fill"},{"filter":["all",["!=","intermittent",1],["!=","brunnel","tunnel"]],"id":"water","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-color":"rgba(134, 204, 250, 1)"},"source":"openmaptiles","source-layer":"water","type":"fill"},{"filter":["all",["in","class","sand"]],"id":"landcover_sand","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-antialias":false,"fill-color":"#f2e9ac","fill-opacity":1},"source":"openmaptiles","source-layer":"landcover","type":"fill"},{"filter":["all",["in","class","sand"]],"id":"landcover_sand_outline","layout":{"visibility":"visible"},"metadata":{},"paint":{"line-color":"#f2e9ac","line-width":2},"source":"openmaptiles","source-layer":"landcover","type":"line"},{"filter":["==","$type","Polygon"],"id":"aeroway_fill","layout":{"visibility":"visible"},"metadata":{},"minzoom":11,"paint":{"fill-color":"rgba(229, 228, 224, 1)","fill-opacity":0.7},"source":"openmaptiles","source-layer":"aeroway","type":"fill"},{"filter":["all",["==","$type","LineString"],["==","class","runway"]],"id":"aeroway_runway","layout":{"visibility":"visible"},"metadata":{},"minzoom":11,"paint":{"line-color":"#f0ede9","line-width":{"base":1.2,"stops":[[11,3],[20,16]]}},"source":"openmaptiles","source-layer":"aeroway","type":"line"},{"filter":["all",["==","$type","LineString"],["==","class","taxiway"]],"id":"aeroway_taxiway","layout":{"visibility":"visible"},"metadata":{},"minzoom":11,"paint":{"line-color":"#f0ede9","line-width":{"base":1.2,"stops":[[11,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"aeroway","type":"line"},{"filter":["all",["in","class","ferry"]],"id":"ferry","layout":{"line-join":"round","visibility":"visible"},"paint":{"line-color":"rgba(108, 159, 182, 1)","line-dasharray":[2,2],"line-width":1.1},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway"],["==","ramp",1],["==","brunnel","tunnel"]],"id":"tunnel_motorway_link_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"#e9ac77","line-dasharray":[0.5,0.25],"line-opacity":1,"line-width":{"base":1.2,"stops":[[12,1],[13,3],[14,4],[20,15]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","service","track"]],"id":"tunnel_service_track_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-dasharray":[0.5,0.25],"line-width":{"base":1.2,"stops":[[12,0.5],[13,1],[14,4],[20,11]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","ramp","1"],["==","brunnel","tunnel"],[">","layer",0]],"id":"tunnel_link_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#e9ac77","line-opacity":1,"line-width":{"base":1.2,"stops":[[12,1],[13,3],[14,4],[20,15]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["==","class","minor"]],"id":"tunnel_minor_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-dasharray":[0.5,0.25],"line-width":{"base":1.2,"stops":[[12,0.5],[13,1.5],[14,4],[20,16]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","street","street_limited"]],"id":"tunnel_street_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-opacity":{"stops":[[12,0],[12.5,1]]},"line-width":{"base":1.2,"stops":[[12,0.5],[13,1],[14,4],[20,15]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","secondary","tertiary"]],"id":"tunnel_secondary_tertiary_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"rgba(195, 189, 187, 1)","line-dasharray":[0.5,0.25],"line-opacity":1,"line-width":{"base":1.2,"stops":[[8,1.5],[20,17]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","primary","trunk"]],"id":"tunnel_trunk_primary_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#e9ac77","line-dasharray":[0.5,0.25],"line-width":{"base":1.2,"stops":[[5,0.4],[6,0.7],[7,1.75],[20,22]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway"],["==","brunnel","tunnel"]],"id":"tunnel_motorway_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"#e9ac77","line-dasharray":[0.5,0.25],"line-width":{"base":1.2,"stops":[[5,0.4],[6,0.7],[7,1.75],[20,22]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["==","brunnel","tunnel"],["in","class","path","pedestrian"]],"id":"tunnel_path_pedestrian","layout":{"visibility":"visible"},"metadata":{},"paint":{"line-color":"rgba(204, 196, 176, 0.45)","line-dasharray":[1,0.75],"line-width":{"base":1.2,"stops":[[14,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway_link"],["==","ramp",1],["==","brunnel","tunnel"]],"id":"tunnel_motorway_link","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"#fc8","line-width":{"base":1.2,"stops":[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","service","track"]],"id":"tunnel_service_track","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-width":{"base":1.2,"stops":[[13,1.5],[16,2],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","service_construction","track_construction"]],"id":"tunnel_service_track_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[13,1.5],[16,2],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","ramp","1"],["==","brunnel","tunnel"],[">","layer",0]],"id":"tunnel_link","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff4c6","line-width":{"base":1.2,"stops":[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","minor"]],"id":"tunnel_minor","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-opacity":1,"line-width":{"base":1.2,"stops":[[12.9,0],[13,1],[14,2.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","minor_construction"]],"id":"tunnel_minor_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-opacity":1,"line-width":{"base":1.2,"stops":[[12.9,0],[13,1],[14,2.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","secondary","tertiary"]],"id":"tunnel_secondary_tertiary","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"rgba(245, 245, 243, 1)","line-width":{"base":1.2,"stops":[[6.5,0],[8,0.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","secondary_construction","tertiary_construction"]],"id":"tunnel_secondary_tertiary_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[6.5,0],[8,0.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","primary","trunk"]],"id":"tunnel_trunk_primary","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff4c6","line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","primary_construction","trunk_construction"]],"id":"tunnel_trunk_primary_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff4c6","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway"],["==","brunnel","tunnel"]],"id":"tunnel_motorway","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"#ffdaa6","line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway_construction"],["==","brunnel","tunnel"]],"id":"tunnel_motorway_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"#ffdaa6","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["in","class","rail"]],"id":"tunnel_major_rail","layout":{"visibility":"visible"},"metadata":{},"paint":{"line-color":"#bbb","line-width":{"base":1.4,"stops":[[14,0.4],[15,0.75],[20,2]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","tunnel"],["==","class","rail"]],"id":"tunnel_major_rail_hatching","layout":{"visibility":"visible"},"metadata":{},"paint":{"line-color":"#bbb","line-dasharray":[0.2,8],"line-width":{"base":1.4,"stops":[[14.5,0],[15,3],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","Polygon"],["==","class","pier"]],"id":"road_area_pier","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-antialias":true,"fill-color":"rgba(246, 241, 229, 1)"},"source":"openmaptiles","source-layer":"transportation","type":"fill"},{"filter":["all",["==","$type","LineString"],["in","class","pier"]],"id":"road_pier","layout":{"line-cap":"round","line-join":"round"},"metadata":{},"paint":{"line-color":"rgba(246, 241, 229, 1)","line-width":{"base":1.2,"stops":[[15,1],[17,4]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","Polygon"],["==","brunnel","bridge"]],"id":"road_area_bridge","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-antialias":true,"fill-color":"rgba(246, 241, 229, 0.6)"},"source":"openmaptiles","source-layer":"transportation","type":"fill"},{"filter":["all",["==","$type","Polygon"],["!has","brunnel"],["!in","class","bridge","pier"]],"id":"road_area_pattern","layout":{"visibility":"visible"},"metadata":{},"paint":{"fill-pattern":"pedestrian_polygon"},"source":"openmaptiles","source-layer":"transportation","type":"fill"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","service","track"]],"id":"road_service_track_casing","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-width":{"base":1.2,"stops":[[12,0.5],[13,1],[14,4],[20,11]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["!in","class","motorway","trunk","primary","pedestrian","path","track","service"],["==","ramp",1]],"id":"road_link_casing","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":13,"paint":{"line-color":"#e9ac77","line-opacity":1,"line-width":{"base":1.2,"stops":[[12,1],[13,3],[14,4],[20,15]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","ramp",1],["in","class","primary","trunk"]],"id":"road_trunk_primary_link_casing","layout":{"line-cap":"butt","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#e9ac77","line-width":{"base":1.2,"stops":[[5,0],[7,0.7],[20,14]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway"],["==","ramp",1]],"id":"road_motorway_link_casing","layout":{"line-cap":"butt","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":10,"paint":{"line-color":"#e9ac77","line-opacity":1,"line-width":{"base":1.2,"stops":[[9.9,0],[10,1.4],[14,8],[20,12]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["!in","brunnel","bridge","tunnel"],["in","class","minor"],["!=","ramp","1"]],"id":"road_minor_casing","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-opacity":1,"line-width":{"base":1.2,"stops":[[12,0.7],[13,1],[14,4],[20,16]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","secondary","tertiary"],["!=","ramp",1]],"id":"road_secondary_tertiary_casing","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"rgba(195, 189, 187, 1)","line-opacity":1,"line-width":{"base":1.2,"stops":[[8,1.5],[20,17]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["!=","ramp",1],["in","class","primary","trunk"],["!=","ramp",1]],"id":"road_trunk_primary_casing","layout":{"line-cap":"butt","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#e9ac77","line-opacity":1,"line-width":{"base":1.2,"stops":[[5,0.4],[6,0.7],[7,1.75],[20,22]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway"],["!=","ramp",1]],"id":"road_motorway_casing","layout":{"line-cap":"butt","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"#e9ac77","line-width":{"base":1.2,"stops":[[5,0.4],[6,0.7],[7,1.75],[20,22]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["!in","brunnel","bridge","tunnel"],["in","class","path","pedestrian"]],"id":"road_path_pedestrian","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":12,"paint":{"line-color":"rgba(176, 169, 150, 0.45)","line-dasharray":[1,1],"line-width":{"base":1.2,"stops":[[12,1],[16,2],[20,3]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","ramp",1],["!in","class","motorway","trunk","primary","pedestrian","path","track","service"]],"id":"road_link","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":13,"paint":{"line-color":"#fea","line-width":{"base":1.2,"stops":[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","ramp",1],["in","class","primary","trunk"]],"id":"road_trunk_primary_link","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fea","line-width":{"base":1.2,"stops":[[5,0],[7,0.5],[20,10]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway"],["==","ramp",1]],"id":"road_motorway_link","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":10,"paint":{"line-color":"#fc8","line-width":{"base":1.2,"stops":[[9.9,0],[10,1],[14,6],[20,10]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","service","track"]],"id":"road_service_track","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":13,"paint":{"line-color":"rgba(255, 255, 255, 1)","line-width":{"base":1.2,"stops":[[13,1.5],[16,2],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","service_construction","track_construction"]],"id":"road_service_track_construction","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":13,"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[13,1.5],[16,2],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["all",["!in","brunnel","bridge","tunnel"],["in","class","minor"]]],"id":"road_minor","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-opacity":1,"line-width":{"base":1.2,"stops":[[12.9,0],[13,1],[14,2.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["all",["!in","brunnel","bridge","tunnel"],["in","class","minor_construction"]]],"id":"road_minor_construction","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-opacity":1,"line-width":{"base":1.2,"stops":[[14,2.5],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","secondary","tertiary"]],"id":"road_secondary_tertiary","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"rgba(245, 245, 243, 1)","line-width":{"base":1.2,"stops":[[6.5,0],[8,0.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","secondary_construction","tertiary_construction"]],"id":"road_secondary_tertiary_construction","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[6.5,0],[8,0.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["!=","ramp",1],["in","class","primary","trunk"]],"id":"road_trunk_primary","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fea","line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["!=","ramp",1],["in","class","primary_construction","trunk_construction"]],"id":"road_trunk_primary_construction","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fea","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway"],["!=","ramp",1]],"id":"road_motorway","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":{"base":1,"stops":[[5,"hsl(26, 87%, 62%)"],[6,"#fc8"]]},"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway_construction"],["!=","ramp",1]],"id":"road_motorway_construction","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":{"base":1,"stops":[[5,"hsl(26, 87%, 62%)"],[6,"#fc8"]]},"line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","class","rail"]],"id":"road_major_rail","metadata":{},"paint":{"line-color":"#bbb","line-width":{"base":1.4,"stops":[[14,0.4],[15,0.75],[20,2]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["==","class","rail"]],"id":"road_major_rail_hatching","metadata":{},"paint":{"line-color":"#bbb","line-dasharray":[0.2,8],"line-width":{"base":1.4,"stops":[[14.5,0],[15,3],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","subclass","tram","light_rail"]],"id":"road_minor_rail","metadata":{},"paint":{"line-color":"#bbb","line-width":{"base":1.4,"stops":[[14,0.4],[15,0.75],[20,2]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["!in","brunnel","bridge","tunnel"],["in","subclass","tram","light_rail"]],"id":"road_minor_rail_hatching","metadata":{},"paint":{"line-color":"#bbb","line-dasharray":[0.2,4],"line-width":{"base":1.4,"stops":[[14.5,0],[15,2],[20,6]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"id":"building","layout":{"visibility":"visible"},"maxzoom":14,"metadata":{},"minzoom":13,"paint":{"fill-color":"rgba(189, 185, 181, 0.3)","fill-outline-color":{"base":1,"stops":[[13,"hsla(35, 6%, 79%, 0.32)"],[14,"hsl(35, 6%, 79%)"]]}},"source":"openmaptiles","source-layer":"building","type":"fill"},{"filter":["all",["!has","hide_3d"]],"id":"building-3d","layout":{"visibility":"visible"},"metadata":{},"minzoom":14,"paint":{"fill-extrusion-base":{"property":"render_min_height","type":"identity"},"fill-extrusion-color":"rgba(189, 185, 181, 1)","fill-extrusion-height":{"property":"render_height","type":"identity"},"fill-extrusion-opacity":0.3},"source":"openmaptiles","source-layer":"building","type":"fill-extrusion"},{"filter":["all",["==","$type","LineString"],["==","brunnel","bridge"]],"id":"waterway-bridge-case","layout":{"line-cap":"butt","line-join":"miter"},"paint":{"line-color":"#bbbbbb","line-gap-width":{"base":1.3,"stops":[[13,0.5],[20,6]]},"line-width":{"base":1.6,"stops":[[12,0.5],[20,5]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["==","$type","LineString"],["==","brunnel","bridge"]],"id":"waterway-bridge","layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"rgba(134, 204, 250, 1)","line-width":{"base":1.3,"stops":[[13,0.5],[20,6]]}},"source":"openmaptiles","source-layer":"waterway","type":"line"},{"filter":["all",["==","class","motorway"],["==","ramp",1],["==","brunnel","bridge"]],"id":"bridge_motorway_link_casing","layout":{"line-join":"round"},"metadata":{},"minzoom":5,"paint":{"line-color":"#e9ac77","line-opacity":1,"line-width":{"base":1.2,"stops":[[9.9,0],[10,1.4],[14,8],[20,12]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","service","track"]],"id":"bridge_service_track_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-width":{"base":1.2,"stops":[[13,1.5],[20,11]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","link"],["==","brunnel","bridge"]],"id":"bridge_link_casing","layout":{"line-join":"round"},"metadata":{},"paint":{"line-color":"#e9ac77","line-opacity":1,"line-width":{"base":1.2,"stops":[[12,1],[13,3],[14,4],[20,15]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","street","street_limited"]],"id":"bridge_street_casing","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"hsl(36, 6%, 74%)","line-opacity":{"stops":[[12,0],[12.5,1]]},"line-width":{"base":1.2,"stops":[[12,0.5],[13,1],[14,4],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["==","brunnel","bridge"],["in","class","path","pedestrian"]],"id":"bridge_path_pedestrian_casing","layout":{"line-join":"miter","visibility":"visible"},"metadata":{},"paint":{"line-color":"hsl(35, 6%, 80%)","line-dasharray":[1,0],"line-width":{"base":1.2,"stops":[[14,1.5],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["in","brunnel","bridge","tunnel"],["in","class","minor"],["!=","ramp","1"]],"id":"bridge_minor_casing","layout":{"line-cap":"butt","line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#cfcdca","line-opacity":1,"line-width":{"base":1.2,"stops":[[12,0.7],[13,1],[14,4],[20,16]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","secondary","tertiary"]],"id":"bridge_secondary_tertiary_casing","layout":{"line-join":"round"},"metadata":{},"paint":{"line-color":"rgba(195, 189, 187, 1)","line-opacity":1,"line-width":{"base":1.2,"stops":[[8,1.5],[20,17]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","primary","trunk"]],"id":"bridge_trunk_primary_casing","layout":{"line-join":"round"},"metadata":{},"paint":{"line-color":"#e9ac77","line-width":{"base":1.2,"stops":[[5,0.4],[6,0.7],[7,1.75],[20,22]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway"],["==","brunnel","bridge"],["!=","ramp",1]],"id":"bridge_motorway_casing","layout":{"line-join":"round"},"metadata":{},"minzoom":5,"paint":{"line-color":"#e9ac77","line-width":{"base":1.2,"stops":[[5,0.4],[6,0.7],[7,1.75],[20,22]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","$type","LineString"],["==","brunnel","bridge"],["in","class","path","pedestrian"]],"id":"bridge_path_pedestrian","metadata":{},"paint":{"line-color":"hsl(0, 0%, 100%)","line-dasharray":[1,0.3],"line-width":{"base":1.2,"stops":[[14,0.5],[20,10]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway"],["==","ramp",1],["==","brunnel","bridge"]],"id":"bridge_motorway_link","layout":{"line-join":"round"},"metadata":{},"minzoom":5,"paint":{"line-color":"#fc8","line-width":{"base":1.2,"stops":[[9.9,0],[10,1],[14,6],[20,10]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","service","track"]],"id":"bridge_service_track","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-width":{"base":1.2,"stops":[[13,1.5],[16,2],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","service_construction","track_construction"]],"id":"bridge_service_track_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[13,1.5],[16,2],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","link"],["==","brunnel","bridge"]],"id":"bridge_link","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fea","line-width":{"base":1.2,"stops":[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","street","street_limited"]],"id":"bridge_street","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-opacity":1,"line-width":{"base":1.2,"stops":[[13.5,0],[14,2.5],[20,16]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","minor"]],"id":"bridge_minor","layout":{"line-join":"round"},"metadata":{},"paint":{"line-color":"#fff","line-opacity":1,"line-width":{"base":1.2,"stops":[[12.9,0],[13,1],[14,2.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","minor_construction"]],"id":"bridge_minor_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-opacity":1,"line-width":{"base":1.2,"stops":[[12.9,0],[13,1],[14,2.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","secondary","tertiary"]],"id":"bridge_secondary_tertiary","layout":{"line-join":"round"},"metadata":{},"paint":{"line-color":"rgba(245, 245, 243, 1)","line-width":{"base":1.2,"stops":[[6.5,0],[8,0.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","secondary_construction","tertiary_construction"]],"id":"bridge_secondary_tertiary_construction","layout":{"line-join":"round"},"metadata":{},"paint":{"line-color":"#fff","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[6.5,0],[8,0.5],[20,13]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","primary","trunk"]],"id":"bridge_trunk_primary","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fea","line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","brunnel","bridge"],["in","class","primary_construction","trunk_construction"]],"id":"bridge_trunk_primary_construction","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"paint":{"line-color":"#fea","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway"],["==","brunnel","bridge"],["!=","ramp",1]],"id":"bridge_motorway","layout":{"line-join":"round"},"metadata":{},"minzoom":5,"paint":{"line-color":"#fc8","line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","motorway_construction"],["==","brunnel","bridge"],["!=","ramp",1]],"id":"bridge_motorway_construction","layout":{"line-join":"round"},"metadata":{},"minzoom":5,"paint":{"line-color":"#fc8","line-dasharray":[2,2],"line-width":{"base":1.2,"stops":[[5,0],[7,1],[20,18]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","rail"],["==","brunnel","bridge"]],"id":"bridge_major_rail","metadata":{},"paint":{"line-color":"#bbb","line-width":{"base":1.4,"stops":[[14,0.4],[15,0.75],[20,2]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["==","class","rail"],["==","brunnel","bridge"]],"id":"bridge_major_rail_hatching","metadata":{},"paint":{"line-color":"#bbb","line-dasharray":[0.2,8],"line-width":{"base":1.4,"stops":[[14.5,0],[15,3],[20,8]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["==","class","aerialway"],"id":"cablecar","layout":{"line-cap":"round","visibility":"visible"},"minzoom":13,"paint":{"line-color":"hsl(0, 0%, 70%)","line-width":{"base":1,"stops":[[13,1],[19,2]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["==","class","aerialway"],"id":"cablecar-dash","layout":{"line-cap":"round","line-join":"bevel","visibility":"visible"},"minzoom":13,"paint":{"line-color":"rgba(164, 164, 164, 1)","line-dasharray":[2,2],"line-width":{"base":1,"stops":[[13,2],[19,4]]}},"source":"openmaptiles","source-layer":"transportation","type":"line"},{"filter":["all",["in","admin_level",3,4],["==","maritime",0]],"id":"boundary_3","layout":{"line-join":"round","visibility":"visible"},"metadata":{},"minzoom":3,"paint":{"line-color":"#9e9cab","line-dasharray":[5,3],"line-width":{"base":1,"stops":[[4,0.4],[5,0.7],[12,1.6]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","maritime",0],["==","disputed",0],["!has","claimed_by"]],"id":"boundary_2_z0-4","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"maxzoom":5,"metadata":{},"minzoom":0,"paint":{"line-color":"rgba(139, 139, 139, 1)","line-opacity":1,"line-width":{"base":1,"stops":[[3,1],[5,1.2]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["!has","claimed_by"],["==","disputed",0],["==","maritime",1]],"id":"boundary_2_z0-4_maritime","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"maxzoom":5,"metadata":{},"minzoom":0,"paint":{"line-color":"rgba(98,185,229,1)","line-opacity":1,"line-width":{"base":1,"stops":[[3,1],[5,1.2]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","maritime",0],["==","disputed",1]],"id":"boundary_2_z0-4_disputed","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"maxzoom":5,"metadata":{},"minzoom":0,"paint":{"line-color":"rgba(139, 139, 139, 1)","line-dasharray":[2,2],"line-opacity":1,"line-width":{"base":1,"stops":[[3,1],[5,1.2]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","maritime",1],["==","disputed",1]],"id":"boundary_2_z0-4_disputed_maritime","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"maxzoom":5,"metadata":{},"minzoom":0,"paint":{"line-color":"rgba(98,185,229,1)","line-dasharray":[2,2],"line-opacity":1,"line-width":{"base":1,"stops":[[3,1],[5,1.2]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","disputed",0],["==","maritime",0]],"id":"boundary_2_z5","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"rgba(139, 139, 139, 1)","line-opacity":1,"line-width":{"base":1,"stops":[[5,1.2],[12,3]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","disputed",1],["==","maritime",0]],"id":"boundary_2_z5_disputed","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"rgba(120, 120, 120, 1)","line-dasharray":[4,3],"line-opacity":1,"line-width":{"base":1,"stops":[[5,1.2],[12,3]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","disputed",1],["==","maritime",1]],"id":"boundary_2_z5_disputed_maritime","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"rgba(98,185,229,1)","line-dasharray":[4,3],"line-opacity":1,"line-width":{"base":1,"stops":[[5,1.2],[12,3]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","admin_level",2],["==","disputed",0],["==","maritime",1]],"id":"boundary_2_z5_maritime","layout":{"line-cap":"round","line-join":"round","visibility":"visible"},"metadata":{},"minzoom":5,"paint":{"line-color":"rgba(98,185,229,1)","line-opacity":1,"line-width":{"base":1,"stops":[[5,1.2],[12,3]]}},"source":"openmaptiles","source-layer":"boundary","type":"line"},{"filter":["all",["==","$type","LineString"]],"id":"water_name_line","layout":{"symbol-placement":"line","text-field":["concat",["get","name:latin"]," ",["get","name:nonlatin"]],"text-font":["Roboto Regular","Noto Sans Regular"],"text-max-width":5,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":0,"paint":{"text-color":"#5d60be","text-halo-color":"rgba(255,255,255,0.7)","text-halo-width":1},"source":"openmaptiles","source-layer":"water_name","type":"symbol"},{"filter":["all",["==","$type","Point"],["!=","class","ocean"]],"id":"water_name_point","layout":{"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Regular","Noto Sans Regular"],"text-max-width":5,"text-size":12,"visibility":"visible"},"maxzoom":24,"metadata":{},"minzoom":2,"paint":{"text-color":"rgba(76, 125, 173, 1)","text-halo-color":"rgba(255,255,255,0)","text-halo-width":1},"source":"openmaptiles","source-layer":"water_name","type":"symbol"},{"filter":["all",["==","$type","Point"],["==","class","ocean"]],"id":"water_ocean_name_point","layout":{"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Regular","Noto Sans Regular"],"text-max-width":5,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":0,"paint":{"text-color":"rgba(76, 125, 173, 1)","text-halo-color":"rgba(255,255,255,0)","text-halo-width":1},"source":"openmaptiles","source-layer":"water_name","type":"symbol"},{"filter":["all",["==","$type","Point"],[">=","rank",20],["any",["all",["in","class","pitch"],["in","subclass","soccer","tennis","baseball","basketball","swimming","golf"]]],["any",["!has","level"],["==","level",0]]],"id":"poi_z16_subclass","layout":{"icon-image":"{subclass}_11","text-anchor":"top","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":9,"text-offset":[0,0.6],"text-padding":2,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":16,"paint":{"text-color":"#666","text-halo-blur":0.5,"text-halo-color":"#ffffff","text-halo-width":1},"source":"openmaptiles","source-layer":"poi","type":"symbol"},{"filter":["all",["==","$type","Point"],["!=","class","swimming_pool"],[">=","rank",20],["none",["all",["in","class","pitch"],["in","subclass","soccer","tennis","baseball","basketball","swimming","golf"]]],["any",["!has","level"],["==","level",0]]],"id":"poi_z16","layout":{"icon-image":"{class}_11","text-anchor":"top","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":9,"text-offset":[0,0.6],"text-padding":2,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":16,"paint":{"text-color":"#666","text-halo-blur":0.5,"text-halo-color":"#ffffff","text-halo-width":1},"source":"openmaptiles","source-layer":"poi","type":"symbol"},{"filter":["all",["==","$type","Point"],["!=","class","swimming_pool"],[">=","rank",7],["<","rank",20],["any",["!has","level"],["==","level",0]]],"id":"poi_z15","layout":{"icon-image":"{class}_11","text-anchor":"top","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":9,"text-offset":[0,0.6],"text-padding":2,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":15,"paint":{"text-color":"#666","text-halo-blur":0.5,"text-halo-color":"#ffffff","text-halo-width":1},"source":"openmaptiles","source-layer":"poi","type":"symbol"},{"filter":["all",["==","$type","Point"],["!=","class","swimming_pool"],["any",["<","rank",7]],["any",["!has","level"],["==","level",0]]],"id":"poi_z14","layout":{"icon-image":"{class}_11","icon-size":0.9,"text-anchor":"top","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":9,"text-offset":[0,0.6],"text-padding":2,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":14.2,"paint":{"text-color":"#666","text-halo-blur":0.5,"text-halo-color":"#ffffff","text-halo-width":1},"source":"openmaptiles","source-layer":"poi","type":"symbol"},{"filter":["all",["in","class","bus","railway","airport"],["==","subclass","station"]],"id":"poi_transit","layout":{"icon-image":"{class}_11","icon-size":0.9,"text-anchor":"left","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":9,"text-offset":[0.9,0],"text-padding":2,"text-size":12,"visibility":"visible"},"metadata":{},"minzoom":15,"paint":{"text-color":"rgba(102, 102, 102, 1)","text-halo-blur":0.5,"text-halo-color":"#ffffff","text-halo-width":1},"source":"openmaptiles","source-layer":"poi","type":"symbol"},{"filter":["all",["==","oneway",1],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"id":"road_oneway","layout":{"icon-image":"oneway","icon-padding":2,"icon-rotate":90,"icon-rotation-alignment":"map","icon-size":{"stops":[[15,0.5],[19,1]]},"symbol-placement":"line","symbol-spacing":75,"visibility":"visible"},"minzoom":15,"paint":{"icon-opacity":0.5},"source":"openmaptiles","source-layer":"transportation","type":"symbol"},{"filter":["all",["==","oneway",-1],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],"id":"road_oneway_opposite","layout":{"icon-image":"oneway","icon-padding":2,"icon-rotate":-90,"icon-rotation-alignment":"map","icon-size":{"stops":[[15,0.5],[19,1]]},"symbol-placement":"line","symbol-spacing":75},"minzoom":15,"paint":{"icon-opacity":0.5},"source":"openmaptiles","source-layer":"transportation","type":"symbol"},{"filter":["all",["in","subclass","gondola","cable_car"]],"id":"road_gondola_label","layout":{"symbol-placement":"line","text-anchor":"center","text-field":["concat",["get","name:latin"]," ",["get","name:nonlatin"]],"text-font":["Roboto Italic","Noto Sans Italic"],"text-offset":[0.8,0.8],"text-size":{"base":1,"stops":[[13,11],[15,12]]}},"metadata":{},"minzoom":13,"paint":{"text-color":"rgba(113, 103, 95, 1)","text-halo-blur":0.5,"text-halo-color":"rgba(255, 255, 255, 1)","text-halo-width":1},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["==","subclass","ferry"]],"id":"road_ferry_label","layout":{"symbol-placement":"line","text-anchor":"center","text-field":["concat",["get","name:latin"]," ",["get","name:nonlatin"]],"text-font":["Roboto Italic","Noto Sans Italic"],"text-offset":[0.8,0.8],"text-size":{"base":1,"stops":[[13,11],[15,12]]}},"minzoom":12,"paint":{"text-color":"rgba(46, 126, 168, 1)","text-halo-blur":0.5,"text-halo-width":1},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["!in","subclass","ferry","gondola","cable_car"]],"id":"road_label","layout":{"symbol-placement":"line","text-anchor":"center","text-field":["concat",["get","name:latin"]," ",["get","name:nonlatin"]],"text-font":["Roboto Regular","Noto Sans Regular"],"text-offset":[0,0.15],"text-size":{"base":1,"stops":[[13,11],[14,13]]}},"metadata":{},"paint":{"text-color":"#765","text-halo-blur":0.5,"text-halo-width":1},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["==","$type","Point"],["==","subclass","junction"],[">","ref_length",0]],"id":"highway-junction","layout":{"icon-image":"circle_8","icon-rotation-alignment":"viewport","icon-size":1,"icon-text-fit":"none","symbol-avoid-edges":true,"symbol-placement":"point","symbol-spacing":200,"symbol-z-order":"auto","text-anchor":"bottom-left","text-field":"Exit {ref}","text-font":["Noto Sans Regular"],"text-justify":"center","text-offset":[0.55,-0.4],"text-pitch-alignment":"auto","text-rotation-alignment":"viewport","text-size":10,"visibility":"visible"},"minzoom":15.5,"paint":{"icon-opacity":1,"text-color":"rgba(79, 77, 77, 1)"},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["<=","ref_length",6],["==","$type","LineString"],["!in","network","us-interstate","us-highway","us-state"]],"id":"highway-shield","layout":{"icon-image":"road_{ref_length}","icon-rotation-alignment":"viewport","icon-size":1,"symbol-avoid-edges":true,"symbol-placement":{"base":1,"stops":[[10,"point"],[11,"line"]]},"symbol-spacing":200,"text-field":"{ref}","text-font":["Noto Sans Regular"],"text-rotation-alignment":"viewport","text-size":10},"minzoom":8,"paint":{"text-color":"rgba(37, 36, 36, 1)"},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["<=","ref_length",6],["==","$type","LineString"],["in","network","us-interstate"]],"id":"highway-shield-us-interstate","layout":{"icon-image":"{network}_{ref_length}","icon-rotation-alignment":"viewport","icon-size":1,"symbol-avoid-edges":true,"symbol-placement":{"base":1,"stops":[[7,"point"],[7,"line"],[8,"line"]]},"symbol-spacing":200,"text-field":"{ref}","text-font":["Noto Sans Regular"],"text-rotation-alignment":"viewport","text-size":9},"minzoom":7,"paint":{"text-color":"rgba(255, 255, 255, 1)"},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["<=","ref_length",6],["==","$type","LineString"],["in","network","us-highway","us-state"]],"id":"highway-shield-us-other","layout":{"icon-image":"{network}_{ref_length}","icon-rotation-alignment":"viewport","icon-size":1,"symbol-avoid-edges":true,"symbol-placement":{"base":1,"stops":[[10,"point"],[11,"line"]]},"symbol-spacing":200,"text-field":"{ref}","text-font":["Noto Sans Regular"],"text-rotation-alignment":"viewport","text-size":9},"minzoom":9,"paint":{"text-color":"rgba(37, 36, 36, 1)"},"source":"openmaptiles","source-layer":"transportation_name","type":"symbol"},{"filter":["all",["has","iata"]],"id":"airport_label","layout":{"icon-image":"airport_11","icon-size":1,"text-anchor":"top","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Noto Sans Regular"],"text-max-width":9,"text-offset":[0,0.6],"text-optional":true,"text-padding":2,"text-size":{"stops":[[8,10],[14,13]]},"visibility":"visible"},"minzoom":8.5,"paint":{"text-color":"#666","text-halo-blur":0.5,"text-halo-color":"#ffffff","text-halo-width":1},"source":"openmaptiles","source-layer":"aerodrome_label","type":"symbol"},{"filter":["all",["==","class","gate"]],"id":"airport_gate","layout":{"text-field":"{ref}","text-font":["Roboto Medium","Noto Sans Regular"],"text-size":{"stops":[[17,9],[19,15]]}},"minzoom":16.5,"paint":{"text-color":"rgba(135, 135, 135, 1)","text-halo-color":"rgba(255, 255, 255, 1)","text-halo-width":1.5},"source":"openmaptiles","source-layer":"aeroway","type":"symbol"},{"filter":["all",["==","rank",1]],"id":"place_park","layout":{"symbol-avoid-edges":false,"symbol-spacing":1250,"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-letter-spacing":0.1,"text-max-width":9,"text-size":{"base":1.2,"stops":[[12,10],[15,14]]},"text-transform":"none","visibility":"visible"},"metadata":{},"minzoom":12,"paint":{"text-color":"rgba(94, 141, 58, 1)","text-halo-blur":0.5,"text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":1.2},"source":"openmaptiles","source-layer":"park","type":"symbol"},{"filter":["all",["in","class","hamlet","island","islet","neighbourhood","suburb"]],"id":"place_other","layout":{"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-letter-spacing":0.1,"text-max-width":9,"text-size":{"base":1.2,"stops":[[12,10],[15,14]]},"text-transform":"uppercase","visibility":"visible"},"metadata":{},"minzoom":8,"paint":{"text-color":"rgba(66, 62, 62, 1)","text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":1.2},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","village"]],"id":"place_village","layout":{"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Regular","Noto Sans Regular"],"text-max-width":8,"text-size":{"base":1.2,"stops":[[10,12],[15,22]]}},"metadata":{},"minzoom":8,"paint":{"text-color":"#333","text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":1.2},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","town"]],"id":"place_town","layout":{"icon-image":{"base":1,"stops":[[0,"circle-stroked_16"],[10,""]]},"text-anchor":"bottom","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Regular","Noto Sans Regular"],"text-max-width":8,"text-offset":[0,0],"text-size":{"base":1.2,"stops":[[7,12],[11,16]]}},"metadata":{},"minzoom":6,"paint":{"text-color":"#333","text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":1.2},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","state"],["in","rank",3,4,5]],"id":"place_region","layout":{"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Medium","Noto Sans Regular"],"text-letter-spacing":0.1,"text-padding":2,"text-size":{"stops":[[3,9],[5,10],[6,11]]},"text-transform":"uppercase","visibility":"visible"},"maxzoom":7,"metadata":{},"minzoom":5,"paint":{"text-color":"rgba(118, 116, 108, 1)","text-halo-color":"rgba(255,255,255,0.7)","text-halo-width":0.8},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","state"],["in","rank",1,2]],"id":"place_state","layout":{"text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Medium","Noto Sans Regular"],"text-letter-spacing":0.1,"text-padding":2,"text-size":{"stops":[[3,9],[5,11],[6,12]]},"text-transform":"uppercase","visibility":"visible"},"maxzoom":6,"metadata":{},"minzoom":3,"paint":{"text-color":"rgba(118, 116, 108, 1)","text-halo-color":"rgba(255,255,255,0.7)","text-halo-width":0.8},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","city"]],"id":"place_city","layout":{"icon-allow-overlap":true,"icon-image":{"base":1,"stops":[[0,"circle-stroked_16"],[10,""]]},"icon-optional":false,"text-anchor":"bottom","text-field":["concat",["get","name:latin"],"\n",["get","name:nonlatin"]],"text-font":["Roboto Medium","Noto Sans Regular"],"text-max-width":8,"text-offset":[0,0],"text-size":{"base":1.2,"stops":[[7,14],[11,24]]}},"metadata":{},"minzoom":5,"paint":{"text-color":"#333","text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":1.2},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","country"],["!has","iso_a2"]],"id":"country_other","layout":{"text-field":"{name:latin}","text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":6.25,"text-size":{"stops":[[3,9],[7,15]]},"text-transform":"none"},"metadata":{},"paint":{"text-color":"#334","text-halo-blur":1,"text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":0.8},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",[">=","rank",3],["==","class","country"],["has","iso_a2"]],"id":"country_3","layout":{"text-field":"{name:latin}","text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":6.25,"text-size":{"stops":[[3,11],[7,17]]},"text-transform":"none"},"metadata":{},"paint":{"text-color":"#334","text-halo-blur":1,"text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":0.8},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","rank",2],["==","class","country"],["has","iso_a2"]],"id":"country_2","layout":{"text-field":"{name:latin}","text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":6.25,"text-size":{"stops":[[2,11],[5,17]]},"text-transform":"none"},"metadata":{},"paint":{"text-color":"#334","text-halo-blur":1,"text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":0.8},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","rank",1],["==","class","country"],["has","iso_a2"]],"id":"country_1","layout":{"text-field":"{name:latin}","text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-max-width":6.25,"text-size":{"stops":[[1,11],[4,17],[6,19]]},"text-transform":"none"},"metadata":{},"paint":{"text-color":"#334","text-halo-blur":1,"text-halo-color":"rgba(255,255,255,0.8)","text-halo-width":0.8},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"filter":["all",["==","class","continent"]],"id":"continent","layout":{"text-field":"{name:latin}","text-font":["Roboto Condensed Italic","Noto Sans Italic"],"text-justify":"center","text-size":13,"text-transform":"uppercase"},"maxzoom":1,"metadata":{},"paint":{"text-color":"#633","text-halo-color":"rgba(255,255,255,0.7)","text-halo-width":1},"source":"openmaptiles","source-layer":"place","type":"symbol"},{"id":"housenumber","layout":{"text-field":"{housenumber}","text-font":["Roboto Medium","Noto Sans Regular"],"text-size":10},"minzoom":17.5,"paint":{"text-color":"rgba(119, 102, 85, 0.69)"},"source":"openmaptiles","source-layer":"housenumber","type":"symbol"},{"id":"geom_line","paint":{"line-color":"#f63b8a","line-opacity":0.7,"line-width":5},"source":"geom","type":"line"}],"metadata":{"maptiler:copyright":"This style was generated on MapTiler Cloud. Usage outside of MapTiler Cloud requires valid MapTiler Data Package: https://www.maptiler.com/data/package/ -- please contact us."},"name":"Streets","pitch":0,"sources":{"geom":{"data":{"geometry":{"coordinates":[[-0.9510250091552734,45.92617416381836],[-0.950980007648468,45.926109313964844],[-0.9517800211906433,45.925838470458984],[-0.9518700242042542,45.92591094970703],[-0.9529399871826172,45.927120208740234],[-0.9530400037765503,45.92715835571289],[-0.9531800150871277,45.92716979980469],[-0.9539200067520142,45.927101135253906],[-0.9538800120353699,45.92639923095703],[-0.9538999795913696,45.926231384277344],[-0.9539700150489807,45.926109313964844],[-0.9540600180625916,45.926021575927734],[-0.9542499780654907,45.9258918762207],[-0.9562399983406067,45.925228118896484],[-0.9563300013542175,45.92522048950195],[-0.9566100239753723,45.925228118896484],[-0.9573000073432922,45.92530059814453],[-0.9572910070419312,45.925331115722656]],"type":"LineString"},"properties":{},"type":"Feature"},"type":"geojson"},"maptiler_attribution":{"attribution":"© MapTiler © OpenStreetMap contributors","type":"vector"},"openmaptiles":{"type":"vector","url":"https://api.maptiler.com/tiles/v3/tiles.json?key=Q4UbchekCfyvXvZcWRoU"}},"sprite":"https://api.maptiler.com/maps/streets/sprite","version":8,"zoom":15}}
FIN
🫵 À vous : utilisez les liens de navigations ci-dessous pour passer à la partie suivante (“Lieux d’arrêts - Rouen”) ou revenir à la partie précédente (“Introduction”)
Introduction Lignes et Horaires - RochefortLieux d’arrêts - Rouen