Aller au contenu

Bruit urbain

Chaque requête exige une clé d'API; voir Authentification.

Le module Bruit urbain sert le bruit modélisé de la route, du rail, des avions et des commerces pour six villes canadiennes : Calgary, Edmonton, Vancouver, Toronto, Montréal et Québec. Il a trois parties : une requête ponctuelle qui renvoie le bruit de l'hexagone situé à une coordonnée, une superposition urban-noise qui colore n'importe quel style selon le calme de chaque lieu, et les tuiles qui la portent, pour dessiner la couche vous-même. Les trois proviennent d'une même version immuable, et chaque réponse la nomme.

Modélisé, non mesuré

Ces niveaux viennent d'un modèle de bruit, pas de microphones. Rien ne les a encore calibrés sur des mesures, et comparés aux mesures publiées pour Toronto, ils lisent de 3 à 6 dB trop bas selon le type de route. Servez-vous-en pour repérer et comparer des lieux, pas pour évaluer la conformité à un règlement, appuyer une réclamation juridique ou remplacer une étude acoustique.

Accès et tarifs

Bruit urbain est offert en aperçu tant qu'il couvre six villes : le point d'accès /noise/point, la superposition urban-noise et ses tuiles sont derrière le module Bruit urbain, SKU addon-urban-noise, à 39 $ US par mois ou 390 $ US par an, le même prix sur tous les forfaits payants. Ajoutez-le depuis la page de facturation du tableau de bord, en plus de n'importe quel forfait payant.

  • Une clé sur forfait payant sans le module reçoit 403 addon_required, qui nomme addon-urban-noise.
  • Une clé du forfait dev est gratuite depuis une origine de développement (localhost, 127.0.0.1, *.localhost), ce qui vous permet de bâtir toute l'intégration dès maintenant. Depuis une origine de production, elle reçoit 403 dev_only, et au-delà des appels premium du mois (5 000, additionnés sur tous les modules), elle reçoit usage_limit_reached.

Une tuile de bruit ou une requête ponctuelle compte pour un appel du bassin commun de votre forfait : le module achète l'accès, jamais du volume. Un refus n'est jamais facturé, pas plus qu'un 422 ou un 503. La grille brute n'est pas vendue sous forme de fichier; si vous en avez besoin, écrivez-nous. Voir Modules et mesure de l'usage pour le lien entre SKU et capacités, et Erreurs pour les corps d'erreur.

Requête ponctuelle

GET /noise/point?lat=51.054&lng=-114.0884

Renvoie l'hexagone H3 de résolution 11 (environ 25 m de large) qui contient le point. lat et lng sont en degrés WGS84 et tous deux requis; une valeur absente ou hors limites donne 400 bad_request.

curl "https://api.unmap.dev/noise/point?lat=51.054&lng=-114.0884&key=um_sk_live_..."
import { Unmap } from "@unmap/sdk";
 
const unmap = new Unmap({ key: "um_sk_live_..." });
const { data, meta } = await unmap.noise.point({ lat: 51.054, lng: -114.0884 });
{
  "data": {
    "h3": "8b12ccd2929afff",
    "resolution": 11,
    "city": "calgary",
    "lden": 49.3,
    "lnight": 40.2,
    "score": 91,
    "risk": 9,
    "label": "Quiet",
    "exceeds_who": { "day": false, "night": false },
    "dominant_source": "road",
    "sources_db": { "road": 45.7, "rail": 44.3, "aircraft": null, "commercial": 28 }
  },
  "meta": {
    "data_version": "2026-11-10.28f32d82e125",
    "attribution": "© OpenStreetMap contributors; noise model: PickYourPlace",
    "licence": "ODbL-1.0"
  }
}

C'est l'hexagone du 236 11 Street NW, dans Hillhurst, à Calgary; meta est abrégé.

Un point hors des six villes, ou dans l'emprise d'une ville mais hors de sa grille modélisée, donne 422 outside_coverage. Le corps énumère les villes couvertes dans cities, chacune avec son slug, son name en anglais et en français et sa bbox, pour que vous puissiez dire à votre utilisateur où les données s'étendent. Il ne répond jamais avec l'hexagone le plus proche.

L'enregistrement de bruit

ChampCe que c'est
h3L'index H3 de l'hexagone.
resolution11, environ 25 m de large.
citycalgary, edmonton, vancouver, toronto, montreal ou quebec-city.
ldenNiveau jour-soir-nuit en dB (Lden européen) : le niveau sur 24 heures, le bruit du soir pondéré de 5 dB et celui de la nuit de 10 dB.
lnightNiveau de nuit en dB, de 23 h à 7 h.
scoreDe 0 à 100, ancré sur les Lignes directrices relatives au bruit dans l'environnement de l'OMS (2018). 100 est calme.
risk100 moins le score.
labelLe score en mots : voir ci-dessous.
exceeds_who{ day, night } : si lden dépasse 53 dB et lnight 45 dB, les niveaux de l'OMS (2018) pour le bruit routier.
dominant_sourceLa source la plus forte : road (route), rail, aircraft (avions) ou commercial (commerces).
sources_db{ road, rail, aircraft, commercial } : le niveau de chaque source en dB, ou null là où cette source n'est pas modélisée à portée.
notePrésent seulement quand lden vaut null.

Les étiquettes du score sont les mêmes partout, dans l'API, les couleurs de la superposition et le bloc. Les valeurs de label restent en anglais, comme tous les identifiants :

scorelabel
80 et plusQuiet (calme)
60 à 79Moderate (modéré)
40 à 59Noisy (bruyant)
20 à 39Very noisy (très bruyant)
Moins de 20Severe (sévère)

Un niveau nul signifie aucune source modélisée, jamais le silence. Là où aucune route, voie ferrée, trajectoire d'avion ni source commerciale n'est à portée du modèle, l'hexagone a lden: null, et score, risk, label et les indicateurs de l'OMS valent null aussi, avec note: "no modelled source within range". C'est le cas de 12 à 25 % des hexagones de résolution 11, selon la ville. Ne l'affichez jamais comme 0 dB ni comme calme : le modèle n'a simplement rien à dire à cet endroit.

La superposition de bruit

Ajoutez overlays=urban-noise à l'URL d'un style. Elle se dessine sur n'importe quel style, comme un remplissage au-dessus des routes et sous les étiquettes, coloré selon le score :

curl "https://api.unmap.dev/styles/muted.json?overlays=urban-noise&key=um_sk_live_..."
import { Unmap } from "@unmap/sdk";
 
const unmap = new Unmap({
  key: "um_pk_live_...",
  container: "map",
  style: "muted",
  overlays: ["urban-noise"],
  center: [-73.57, 45.5],
  zoom: 13,
});
scoreCouleur
Moins de 20#ef4444 rouge
20 à 39#f97316 orangé
40 à 59#f59e0b ambre
60 à 79#84cc16 lime
80 et plus#22c55e vert

Le remplissage est à 45 % d'opacité, pour que les rues restent lisibles dessous, et un hexagone sans source modélisée reste transparent. Ce sont des couleurs de données, les mêmes que celles de la carte du bruit de PickYourPlace, et elles ne changent ni avec le style ni avec un thème. muted s'y prête le mieux, car ses gris laissent la couleur aux données. Un overlays=urban-noise explicite venant d'une clé sans le module donne un 403; un profil qui l'inclurait l'omet plutôt, pour que la carte de base s'affiche quand même.

Dessiner la couche vous-même

Les tuiles sont à /layers/urban-noise/{z}/{x}/{y}, avec une seule couche source, noise, à tous les zooms. Chaque plage de zoom porte une résolution H3, si bien que les hexagones s'affinent à mesure que vous zoomez :

ZoomRésolution H3Taille de l'hexagoneHexagones (six villes)
0 à 108environ 460 m9 623
11 à 129environ 174 m64 837
13 à 1410environ 66 m447 261
15 à 1811environ 25 m3 113 322

Chaque entité est un hexagone portant les propriétés h3_id, lden, lnight, noise_score_who, noise_risk_who, exceeds_who_day, exceeds_who_night, dominant_source, road_noise_db, rail_noise_db, aircraft_noise_db et commercial_noise_db. Une propriété sans valeur est absente de la tuile : filtrez sur ["has", "lden"] pour écarter les hexagones sans source modélisée. Aux résolutions 8 à 10, chaque valeur est la médiane des hexagones de résolution 11 qu'il contient.

map.addSource("noise", {
  type: "vector",
  tiles: ["https://api.unmap.dev/layers/urban-noise/{z}/{x}/{y}?key=um_pk_live_..."],
  minzoom: 0,
  maxzoom: 18,
  attribution: "© OpenStreetMap contributors; noise model: PickYourPlace",
});
map.addLayer({
  id: "noise-night",
  type: "fill",
  source: "noise",
  "source-layer": "noise",
  filter: ["has", "lnight"],
  paint: {
    "fill-color": ["step", ["get", "lnight"], "#22c55e", 40, "#84cc16", 45, "#f59e0b", 50, "#f97316", 55, "#ef4444"],
    "fill-opacity": 0.45,
  },
});

Cet exemple colore plutôt selon le niveau de nuit, avec 45 dB, le niveau de nuit de l'OMS, comme seuil du passage à l'ambre.

Comment les niveaux sont modélisés

Le modèle est celui de PickYourPlace, exécuté pour chaque ville les 9 et 10 novembre 2026. En termes simples :

  • Les routes suivent la méthode britannique CRTN 1988 (Calculation of Road Traffic Noise) : chaque route est coupée en tronçons d'au plus 100 m, le niveau de chaque tronçon dépend de sa circulation, de sa vitesse, de sa part de véhicules lourds, de son revêtement et de sa pente, et il décroît avec la distance sur un sol dur ou meuble. Les bâtiments et les écrans entre la route et l'hexagone l'atténuent. Les niveaux de nuit et Lden proviennent de la conversion TRL du niveau CRTN.
  • La circulation est celle des comptages de la Ville de Calgary à Calgary, avec les débits et les parts de véhicules lourds des routes provinciales de l'Alberta. Dans les cinq autres villes, chaque route prend un débit par défaut selon sa classe de route OpenStreetMap.
  • Les bâtiments de Calgary ont les hauteurs lidar de la Ville. Ailleurs, ce sont les empreintes de Ressources naturelles Canada, avec la hauteur OpenStreetMap là où elle est indiquée et 6 m sinon : une tour atténue donc comme une maison.
  • Le rail est la voie ferrée d'OpenStreetMap, avec le nombre de trains aux passages à niveau de Transports Canada.
  • Les avions sont représentés par les courbes de prévision de l'ambiance sonore (NEF). Deux villes ont des courbes publiées : celles de la Ville de Calgary à Calgary et, à Edmonton, celles du règlement sur la zone de protection des abords de l'aéroport international d'Edmonton (Alta Reg 55/2006, annexe 2). À Vancouver, à Toronto, à Montréal et à Québec, les courbes sont modélisées à partir des pistes cartographiées dans OpenStreetMap, avec un panache ajusté sur les courbes ouvertes de Calgary : c'est un modèle des pistes, pas la prévision de l'aéroport. Les mouvements d'avions de nuit sont supposés à 10 %.
  • Le bruit commercial vient des points d'intérêt d'OpenStreetMap, avec les permis d'affaires que publient Calgary, Edmonton, Vancouver et Toronto.

Les sources s'additionnent en énergie sonore en niveaux de jour, de soir et de nuit, dont découlent lden et lnight. Les lignes directrices de l'OMS (2018) fixent à 53 dB Lden et 45 dB Lnight les niveaux au-delà desquels le bruit routier est associé à des effets nocifs sur la santé; exceeds_who les compare, et score y est ancré.

Attribution et licence

Les niveaux de bruit sont calculés à partir des routes, des voies ferrées, des écrans et des points d'intérêt d'OpenStreetMap; toute la base de données de bruit, niveaux calculés compris, est donc une base dérivée d'OpenStreetMap sous Open Database License (ODbL). Affichez « © OpenStreetMap contributors » partout où vous affichez les données ou la superposition. Chaque réponse de /noise/point porte le crédit dans meta.attribution (« © OpenStreetMap contributors; noise model: PickYourPlace ») et la licence dans meta.licence (ODbL-1.0), et la superposition place le même crédit sur la carte. Mettez en cache selon meta.data_version : une version ne change jamais une fois publiée.

La vente de l'accès est permise par l'ODbL, tout comme votre usage de ce que vous obtenez. Quiconque le demande peut obtenir la base de bruit dérivée elle-même sous ODbL : écrivez à hello@unmap.dev pour obtenir une copie de la version que vous utilisez, et vous recevrez ses quatre archives PMTiles et son manifest.json, conservés sans modification pour chaque version.

Les intrants qui ne viennent pas d'OpenStreetMap conservent leur propre licence et n'exigent que l'attribution :

  • Ville de Calgary, Open Government Licence – City of Calgary : débits de circulation, bâtiments 3D avec hauteurs lidar, voies ferrées, courbes de prévision de l'ambiance sonore et permis d'affaires.
  • Ressources naturelles Canada, Licence du gouvernement ouvert – Canada : empreintes de bâtiments.
  • Transports Canada, Licence du gouvernement ouvert – Canada : passages à niveau et nombre de trains.
  • Gouvernement de l'Alberta, Open Government Licence – Alberta : débits de circulation et parts de véhicules lourds des routes provinciales.
  • Villes d'Edmonton, de Vancouver et de Toronto, chacune sous sa propre Open Government Licence : permis d'affaires.
  • © Alberta King's Printer : les courbes de prévision de l'ambiance sonore d'Edmonton, numérisées à partir de l'annexe 2 du règlement sur la zone de protection des abords de l'aéroport international d'Edmonton (Alta Reg 55/2006).
  • Copernicus DEM GLO-30, pour les pentes des routes : © DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA; all rights reserved.

La liste complète est aussi l'attribution de la fiche de la couche au catalogue. L'interprétation que PickYourPlace fait de ces niveaux, comme ses scores et ses comparaisons de quartiers, ne fait pas partie de cette couche.

Couverture et limites

  • Six villes, chacune sur sa propre grille modélisée : Calgary (631 986 hexagones en résolution 11), Montréal (623 556), Toronto (582 433), Edmonton (535 841), Québec (465 816) et Vancouver (273 690). Rien en dehors; une nouvelle ville s'ajoute au même module.
  • Calgary est la ville la mieux calibrée, avec ses propres comptages de circulation et ses hauteurs de bâtiments lidar. Les cinq autres utilisent des débits par défaut selon la classe de route et la hauteur par défaut de 6 m : l'atténuation derrière les grands immeubles y est sous- estimée, et les niveaux y lisent trop haut.
  • Rien n'a calibré le modèle sur des mesures. Comparé aux mesures de Santé publique Toronto, il lit de 3 à 6 dB trop bas selon le type de route.
  • Il n'y a pas de plancher de bruit de fond : un hexagone loin de toute source peut lire sous 30 dB.
  • Les valeurs sont par hexagone, pas par adresse, et un même profil horaire, tiré des artères de Calgary, sert à toutes les routes de toutes les villes.
  • Ce sont des données de dépistage. Elles ne conviennent pas à un usage réglementaire, juridique ou de conformité.

Code client

SDK

@unmap/sdk expose la requête sous unmap.noise.point({ lat, lng }). Elle renvoie { data, meta } et lève une NoiseError portant le code de la passerelle : addon_required, avec le SKU dans addon, sur un 403, et outside_coverage, avec les villes couvertes dans cities, sur un 422.

import { Unmap, NoiseError } from "@unmap/sdk";
 
const unmap = new Unmap({ key: "um_sk_live_..." });
 
try {
  const { data } = await unmap.noise.point({ lat: 45.5019, lng: -73.5674 });
  if (data.lden === null) console.log("Aucune source modélisée ici");
  else console.log(`${data.label} : ${data.lden} dB Lden, ${data.lnight} dB la nuit`);
} catch (error) {
  if (error instanceof NoiseError && error.code === "outside_coverage") {
    console.log("Couvert :", error.cities?.map((city) => city.name.fr).join(", "));
  }
}

Bloc de carte du bruit urbain

urban-noise-map est une page entière bâtie à partir du registre : la superposition avec sa légende, une bascule Jour (Lden) et Nuit (Lnight) pour la coloration, et une fiche pour tout lieu que vous cliquez ou cherchez, avec son score, ses niveaux comparés aux seuils de l'OMS et une barre par source. Installez-le comme n'importe quel autre bloc :

npx shadcn@latest registry add @unmap=https://registry.unmap.dev/r/{name}.json
npx shadcn@latest add @unmap/urban-noise-map
npx shadcn-vue@latest add https://registry.unmap.dev/r/vue/urban-noise-map.json

Les deux premières lignes sont pour React; la troisième est pour Vue et Nuxt, où shadcn-vue prend directement l'URL de l'élément.

Étapes suivantes

  • Couches pour la façon dont les superpositions se composent sur un style, et la fiche du catalogue.
  • API Cartes pour le style muted.
  • Forfaits et limites pour les origines de développement et la mesure de l'usage.