Cartes
Styles hébergés, tuiles vectorielles, polices et images de carte statique.
Sur cette page
Envoyez votre clé avec key=VOTRE_CLE_API dans l’adresse, ou dans l’en-tête X-NWays-Api-Key. Clés d’API
Adresse de base : https://nways.ng/maps/v1
Un style de carte hébergé (un chargement de carte)
GET https://nways.ng/maps/v1/styles/{style}.json
Un style MapLibre pour le plan de rues N-Ways, avec la clé sur chaque URL N-Ways (tuiles, polices). Pointez MapLibre GL JS ou MapLibre Native dessus : style: 'https://nways.ng/maps/v1/styles/streets-light.json?key=nw_…'. Chaque lecture compte pour un chargement de carte (SKU map_loads, produit tiles). Les tuiles arrivent une par une (/tiles/base/{z}/{x}/{y}.mvt, tous les pays, avec des bounds qui les entourent tous), ou depuis l’archive PMTiles de chaque pays avec format=pmtiles (il faut le protocole pmtiles, que le SDK web enregistre) : le style a alors une source par pays (nways-ng, nways-gh, …) et chaque couche une fois par pays (roads-ng, roads-gh, …). Raisons : STYLE_NOT_FOUND, LANG_INVALID, FORMAT_INVALID.
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
style | chemin | string | Obligatoire. Au choix: streets-light, streets-dark. |
lang | requête | string | Au choix: en, fr, pt. Par défaut: en. |
format | requête | string | Au choix: mvt, pmtiles. Par défaut: mvt. |
curl "https://nways.ng/maps/v1/styles/streets-light.json" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/styles/streets-light.json', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/styles/streets-light.json",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Un style MapLibre (version 8)
{}Erreurs
defaultErreur
Les archives de tuiles de chaque pays
GET https://nways.ng/maps/v1/tiles/countries.json
Les pays que N-Ways cartographie aujourd’hui, chacun avec son code ISO, son cadre (bbox : ouest, sud, est, nord), son contour (coordonnées GeoJSON MultiPolygon) et ses archives PMTiles (files.base, files.detail, files.transit ; un type peut manquer pendant qu’un pays est en construction). Lisez une tuile dans l’archive du pays dont le contour contient le centre de la tuile, puis dans toute autre dont le cadre la touche. Seules les archives listées ici sont servies (tout autre nom donne TILESET_NOT_FOUND) : relisez la liste plutôt que de garder les noms de fichiers. Gratuit avec toute clé Maps (compté, jamais facturé). TILES_UNAVAILABLE quand le serveur n’a pas de données cartographiques.
curl "https://nways.ng/maps/v1/tiles/countries.json" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/tiles/countries.json', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/tiles/countries.json",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
La liste
[
{
"name": "togo",
"country": "TG",
"detail": "cities",
"bbox": [
0
],
"files": {
"base": "togo.pmtiles",
"detail": "togo-detail.pmtiles",
"transit": "togo-transit.pmtiles"
},
"outline": [
[
"string"
]
]
}
]Erreurs
defaultErreur
Lire l’archive PMTiles d’un pays (requêtes par plages)
GET https://nways.ng/maps/v1/tiles/{tileset}.pmtiles
Les tuiles vectorielles d’un pays en une archive PMTiles v3 : <country>.pmtiles (schéma de fond de carte Protomaps, zoom 0–15), <country>-detail.pmtiles (zoom 12–16) ou <country>-transit.pmtiles (zoom 5–15), comme listées dans /tiles/countries.json, lue par morceaux avec Range: bytes=a-b (8 Mo au plus par lecture ; l’archive entière n’est jamais servie). La clé est vérifiée à la première lecture d’une session d’archive depuis un site (toutes archives confondues) et comptée comme un appel tiles ; les lectures suivantes dans les 2 minutes profitent de cette vérification. Raisons : TILESET_NOT_FOUND, RANGE_REQUIRED, RANGE_TOO_LARGE, TILES_UNAVAILABLE.
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
tileset | chemin | string | Obligatoire. Un nom de fichier de /tiles/countries.json, sans .pmtiles |
Range | en-tête | string | Obligatoire. |
curl "https://nways.ng/maps/v1/tiles/COUNTRY.pmtiles" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/tiles/COUNTRY.pmtiles', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/tiles/COUNTRY.pmtiles",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Les octets demandés
Erreurs
defaultErreur
Une tuile vectorielle
GET https://nways.ng/maps/v1/tiles/{tileset}/{z}/{x}/{y}.mvt
Une tuile Mapbox Vector Tile (un appel tiles) tirée de l’archive du pays où elle se trouve, si bien que chaque pays est dans chaque jeu de tuiles : base (zoom 0–15), detail (12–16) ou transit (5–15). Compressée en gzip quand le client l’accepte. 204 là où il n’y a pas de tuile (pleine mer). Au-delà du zoom maximal, surzoom (la source du style indique maxzoom: 15). Raisons : TILESET_NOT_FOUND, TILE_INVALID, TILE_NOT_FOUND, TILES_UNAVAILABLE.
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
tileset | chemin | string | Obligatoire. Au choix: base, detail, transit. |
z | chemin | integer | Obligatoire. ≥ 0, ≤ 16. |
x | chemin | integer | Obligatoire. ≥ 0. |
y | chemin | integer | Obligatoire. ≥ 0. |
curl "https://nways.ng/maps/v1/tiles/base/0/0/0.mvt" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/tiles/base/0/0/0.mvt', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/tiles/base/0/0/0.mvt",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Une tuile
Erreurs
defaultErreur
Glyphes de police pour les libellés de la carte (gratuit)
GET https://nways.ng/maps/v1/fonts/{stack}/{range}.pbf
Plages de glyphes pour les polices du style (Inter-Regular, Inter-Medium, Inter-SemiBold, Inter-Bold, Inter-Italic). Comptées, jamais facturées. Raisons : FONT_RANGE_INVALID, FONT_NOT_FOUND.
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
stack | chemin | string | Obligatoire. |
range | chemin | string | Obligatoire. |
curl "https://nways.ng/maps/v1/fonts/Inter-Medium/0-255.pbf" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fonts/Inter-Medium/0-255.pbf', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/fonts/Inter-Medium/0-255.pbf",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Glyphes
Erreurs
defaultErreur
Une image de carte
GET https://nways.ng/maps/v1/staticmap
Un PNG ou un JPEG de la carte, dessiné par N-Ways à partir de ses propres tuiles, avec des marqueurs et des tracés. Donnez center et zoom, ou seulement des marqueurs et des tracés pour les cadrer. Un appel static_maps.
URL signées. Ajoutez signature= (en dernier) pour utiliser une URL n’importe où (un e-mail, une application sans Referer), quelle que soit la restriction d’application de la clé : le HMAC-SHA256 en base64url du chemin et de la requête de l’URL (à partir de /maps/v1/staticmap?, sans signature), calculé avec le secret de signature de la clé (en base64url ; N-Ways vous le remet avec la clé). Une URL modifiée ou une signature fausse : 403 SIGNATURE_INVALID.
Raisons : SIZE_INVALID, SCALE_INVALID, THEME_INVALID, FORMAT_INVALID, MARKERS_INVALID, PATH_INVALID, CENTER_REQUIRED, CENTER_INVALID, ZOOM_INVALID, URL_TOO_LONG, SIGNATURE_INVALID.
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
center | requête | string | lat,lng |
zoom | requête | number | ≥ 0, ≤ 20. |
size | requête | string | LARGEURxHAUTEUR, de 32 à 1 280 px chacune Par défaut: 640x400. |
scale | requête | integer | Au choix: 1, 2. Par défaut: 1. |
theme | requête | string | Au choix: light, dark. Par défaut: light. |
format | requête | string | Au choix: png, jpg. Par défaut: png. |
markers | requête | string[] | Répétable : les styles, puis les points, séparés par | : color:red|label:A|size:small|6.45,3.47|6.46,3.48. Couleurs : red, green, blue, orange, yellow, purple, black, white, gray, ou 0xRRGGBB[AA]. Tailles tiny, small, mid. 100 marqueurs au plus. |
path | requête | string[] | Répétable : color:0x1e6fe8cc|weight:5|fillcolor:0x…|6.45,3.47|6.46,3.48, ou une polyligne encodée (précision 5) en dernier : weight:4|enc:_p~iF~ps|U…. 10 tracés au plus, de 2 000 points chacun. |
signature | requête | string |
curl "https://nways.ng/maps/v1/staticmap" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/staticmap', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/staticmap",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
L’image
Erreurs
defaultErreur