Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Lignes et Horaires - Rochefort

reseau_rochefort.livemd

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:

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 :

✍️ 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.).

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

    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 :

  1. À quelle Route (trouver son Name) est rattaché le ServiceJourneyPattern (PARCOURS) d’identifiant CA_ROCHEFORT_OCEAN:ServiceJourneyPattern:B_BE7025F3F49C102A55A60E2C0071A38B:LOC ?
  2. Combien d’arrêts sont prévus dans ce PARCOURS ?
  3. 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 :

  1. Quelles sont les conditions temporelles de validité du ServiceJourney (COURSE) d’identifiant CA_ROCHEFORT_OCEAN:ServiceJourney:S11185:LOC ?

  2. 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