Les trente jours

Jour 13 : Interactions

Le trajet le plus rapide entre chaque paire des 50 plus grandes régions métropolitaines du Canada, dans les deux sens : 2 450 trajets tracés par le routage d'unmap, et la seule route que partagent 561 des 1 225 paires.

interactions.json
Chargement de 2 450 trajets
Paires de villes qui empruntent la route
Cliquez sur une ville pour ses trajets, ou sur une route pour son total.

Nous avons relié chaque paire des 50 plus grandes régions métropolitaines du Canada, dans les deux sens : 1 225 paires, 2 450 trajets, 5 689 569 km de route. Chaque route est tracée d'autant plus large et plus vive qu'elle sert au trajet le plus rapide d'un plus grand nombre de paires. Les villes sont les 50 régions métropolitaines et agglomérations de recensement les plus peuplées en 2021, de Toronto à Medicine Hat, et aucune n'est dans les territoires.

Entre Thunder Bay et Nipigon, une seule route porte 561 des 1 225 paires, soit 45,8 % : toutes les paires dont une ville est à Thunder Bay ou à l'ouest et l'autre à l'est, 17 villes fois 33. À l'ouest de Thunder Bay, la Transcanadienne en porte 544 jusqu'à la frontière du Manitoba. À l'est de Nipigon, le flot se partage autour du lac Supérieur : 306 paires suivent la route 17 le long de la rive par Wawa, et 255 montent vers le nord par la route 11 et Geraldton.

Le bout atlantique tient à des liens étroits. 141 paires, tous les trajets entre Halifax, Cape Breton ou St. John's et les 47 autres villes, traversent l'isthme de Chignectou, la langue de terre qui relie la Nouvelle-Écosse au Nouveau-Brunswick. Les 49 trajets de St. John's traversent tous le détroit de Cabot en traversier, et les 49 de Charlottetown, le pont de la Confédération. Le plus long trajet, de St. John's à Nanaimo, fait 7 216 km et 81,3 heures, avec un traversier à chaque bout.

Cliquez sur une ville pour ne voir que ses trajets, depuis et vers les 49 autres, ou sur une route pour savoir combien de paires l'empruntent.

Comment elle est faite

Un fond de carte et une couche. Voici toute la carte, sans la légende.

import { Unmap, createMap } from '@unmap/sdk'

const unmap = new Unmap({ key: 'um_pk_live_...' })

// Canada's 50 largest metropolitan areas (2021 Census), as [lng, lat] at each core city.
const cities = await fetch('/cities.json').then((r) => r.json())

// Drive every pair both ways, and count the drives along each stretch of road.
const uses = new Map()
for (const from of cities) {
  for (const to of cities) {
    if (from === to) continue
    const route = await unmap.router.route(from, to, { mode: 'car' })
    const coords = route.geometry.coordinates
    for (let i = 1; i < coords.length; i++) {
      const segment = coords[i - 1] + '>' + coords[i]
      uses.set(segment, (uses.get(segment) ?? 0) + 1)
    }
  }
}

// A stretch counts city pairs in its busier direction. Each carriageway of a divided highway
// then carries every pair once, and so does a two-lane road driven both ways.
const features = []
for (const [segment, n] of uses) {
  const [a, b] = segment.split('>')
  const back = uses.get(b + '>' + a) ?? 0
  if (back > n || (back === n && a > b)) continue // keep one direction of each road
  features.push({
    type: 'Feature',
    properties: { n: Math.max(n, back) },
    geometry: { type: 'LineString', coordinates: [a, b].map((p) => p.split(',').map(Number)) },
  })
}

const map = createMap({ key: 'um_pk_live_...', container: '#map', style: 'muted', mode: 'dark' })
map.on('load', () => {
  const labels = map.getStyle().layers.find((l) => l.type === 'symbol').id
  map.addSource('roads', { type: 'geojson', data: { type: 'FeatureCollection', features } })
  map.addLayer({
    id: 'roads',
    type: 'line',
    source: 'roads',
    paint: {
      // Width and colour by pair count, on a log scale: 1 to 561 of the 1,225 pairs.
      'line-width': ['interpolate', ['linear'], ['ln', ['get', 'n']], 0, 0.35, 6.4, 6],
      'line-color': ['interpolate', ['linear'], ['ln', ['get', 'n']],
        0, '#43263F', 4.1, '#C9307C', 5.5, '#FF3E9A', 6.4, '#FFC9E1'],
    },
  }, labels) // under the place names
})

Les villes sont les 50 régions métropolitaines et agglomérations de recensement les plus peuplées en 2021, population additionnée à partir des îlots du Fichier des attributs géographiques de Statistique Canada. Chacune part d'un seul point : celui que la Base de données toponymiques du Canada donne à sa plus grande municipalité, ou à la ville sous le nom de laquelle on la connaît (Victoria plutôt que Saanich; Sudbury et Sydney pour le Grand Sudbury et Cape Breton). Nous avons envoyé chaque paire à l'API de routage d'unmap dans les deux sens (mode=car), 2 450 requêtes, deux à la fois. Le total d'une route est le nombre de paires dont le trajet l'emprunte dans son sens le plus chargé, si bien que les deux chaussées d'une route divisée et une route à deux voies comptent chacune une paire une fois. Le réseau routier ne couvre que le Canada, donc aucun trajet ne passe par les États-Unis : un conducteur qui peut passer par le Michigan ou le Minnesota évite la rive nord du lac Supérieur, et le tronçon de Thunder Bay est un fait du réseau canadien, pas de chaque voyage. Les durées sont les estimations du moteur, sans circulation, et un traversier compte sa traversée, pas son horaire. Le moteur de routage refuse un trajet en voiture dont les extrémités sont à plus de 5 000 km à vol d'oiseau, donc les six trajets entre St. John's et Vancouver, Victoria ou Nanaimo sont calculés en deux étapes qui se rejoignent sur la Transcanadienne, juste du côté manitobain de la frontière, une route que tous les trajets entre elles empruntent de toute façon. Le script est scripts/build-challenge-interactions.mjs dans le dépôt d'unmap.

Données

  • Trajets : routage d'unmap sur les données d'OpenStreetMap, © les contributeurs d'OpenStreetMap (ODbL).
  • Villes et populations : Statistique Canada, Recensement de 2021, Fichier des attributs géographiques. Utilisé en vertu de la Licence ouverte de Statistique Canada.
  • Points des villes : Base de données toponymiques du Canada, Ressources naturelles Canada. Contient des informations visées par la Licence du gouvernement ouvert - Canada.
  • Fond de carte : unmap, © les contributeurs d'OpenStreetMap.

Partager cette carte

Publiez-la, ou faites la vôtre avec le mot-clic #30DayMapChallenge.