N-Ways
Documentation développeursCartes

Cartes

Styles hébergés, tuiles vectorielles, polices et images de carte statique.

Sur cette page
Remarque :

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

NomOùTypeDescription
stylecheminstringObligatoire. Au choix: streets-light, streets-dark.
langrequêtestringAu choix: en, fr, pt. Par défaut: en.
formatrequêtestringAu choix: mvt, pmtiles. Par défaut: mvt.
cURL
curl "https://nways.ng/maps/v1/styles/streets-light.json" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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)

200 OK
{}

Erreurs

  • default Erreur

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
curl "https://nways.ng/maps/v1/tiles/countries.json" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

200 OK
[
  {
    "name": "togo",
    "country": "TG",
    "detail": "cities",
    "bbox": [
      0
    ],
    "files": {
      "base": "togo.pmtiles",
      "detail": "togo-detail.pmtiles",
      "transit": "togo-transit.pmtiles"
    },
    "outline": [
      [
        "string"
      ]
    ]
  }
]

Erreurs

  • default Erreur

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

NomOùTypeDescription
tilesetcheminstringObligatoire. Un nom de fichier de /tiles/countries.json, sans .pmtiles
Rangeen-têtestringObligatoire.
cURL
curl "https://nways.ng/maps/v1/tiles/COUNTRY.pmtiles" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

  • default Erreur

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

NomOùTypeDescription
tilesetcheminstringObligatoire. Au choix: base, detail, transit.
zcheminintegerObligatoire. ≥ 0, ≤ 16.
xcheminintegerObligatoire. ≥ 0.
ycheminintegerObligatoire. ≥ 0.
cURL
curl "https://nways.ng/maps/v1/tiles/base/0/0/0.mvt" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

  • default Erreur

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

NomOùTypeDescription
stackcheminstringObligatoire.
rangecheminstringObligatoire.
cURL
curl "https://nways.ng/maps/v1/fonts/Inter-Medium/0-255.pbf" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

  • default Erreur

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

NomOùTypeDescription
centerrequêtestringlat,lng
zoomrequêtenumber≥ 0, ≤ 20.
sizerequêtestringLARGEURxHAUTEUR, de 32 à 1 280 px chacune Par défaut: 640x400.
scalerequêteintegerAu choix: 1, 2. Par défaut: 1.
themerequêtestringAu choix: light, dark. Par défaut: light.
formatrequêtestringAu choix: png, jpg. Par défaut: png.
markersrequêtestring[]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.
pathrequêtestring[]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.
signaturerequêtestring
cURL
curl "https://nways.ng/maps/v1/staticmap" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

  • default Erreur