N-Ways
Documentation développeursItinéraires

Itinéraires

Des itinéraires comme les gens se déplacent vraiment ici : en voiture, en okada, en keke, en danfo, à pied, en train ou en bateau, avec le trafic en direct, les péages, les interdictions de motos et de kekes, les frontières, et le prix normal de la course.

Sur cette page

Adresse de base : https://nways.ng/maps/v1. Ici, les itinéraires, les tarifs et le trafic ; pour de nombreux départs et arrivées à la fois, voyez la matrice d’itinéraires, et pour un lot d’arrêts l’optimisation de tournées. Référence

Obtenir un itinéraire

POST /maps/v1/routes/compute avec un corps JSON.

cURL
curl -X POST "https://nways.ng/maps/v1/routes/compute" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API" -H "Content-Type: application/json" \
  -d '{"origin": {"lat": 6.6018, "lng": 3.3515}, "destination": {"postcode": "LA08A09DB09"}, "mode": "okada", "fares": true}'
JavaScript
import { createClient } from '@nways/maps'

const nways = createClient({ key: process.env.NWAYS_API_KEY })
const { routes } = await nways.route({
  origin: { lat: 9.0579, lng: 7.4951 },
  intermediates: [{ lat: 9.0765, lng: 7.3986 }],
  destination: { lat: 9.0034, lng: 7.2633 },
  mode: 'drive',
  avoid: ['tolls'],
})
console.log(Math.round(routes[0].durationS / 60), 'min')
Python
import os
import requests

res = requests.post(
    "https://nways.ng/maps/v1/routes/compute",
    headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
    json={"origin": {"lat": 5.6037, "lng": -0.187}, "destination": {"lat": 6.1319, "lng": 1.2228}, "mode": "drive", "lang": "fr"},
    timeout=20,
)
res.raise_for_status()
best = res.json()["routes"][0]
print(round(best["durationS"] / 60), "min")

Corps de la requête

ChampDescription
origin, destinationObligatoires. Un point { "lat", "lng" }, un code postal NIPOST { "postcode" } (l’itinéraire se termine à la meilleure entrée du bâtiment), une adresse { "ghanaPost" } ou un { "plusCode" }. Le départ peut avoir un cap (heading) en degrés, pour qu’un véhicule en mouvement ne commence pas par un demi-tour.
intermediatesJusqu’à 25 arrêts intermédiaires en chemin, dans l’ordre, sous les mêmes formes.
modedrive (par défaut), van, okada (une moto-taxi : respecte les interdictions d’okada), motorbike (votre propre moto : les interdictions commerciales ne s’appliquent pas), keke et danfo (respectent leurs interdictions), walk, bicycle, boat (bateaux de passagers et embarcadères), train.
alternativestrue pour jusqu’à 2 itinéraires de plus (sans arrêts intermédiaires).
routingPreferencetraffic_unaware (par défaut) ou traffic_aware : trafic en direct et incidents signalés.
departAtL’heure de départ (RFC 3339) : les bateaux circulent de jour, et le trafic suit l’heure.
avoidAu choix parmi tolls, highways, bad_roads (routes que les conducteurs ont signalées comme abîmées ou inondées).
tollVehicleLa classe tarifaire du péage : car, suv, bus, truck.
accessTrajets en train et en bateau : comment rejoindre et quitter la gare ou l’embarcadère : walk, okada ou drive.
lastMileLà où la route s’arrête avant la porte : finir à pied (walk) ou en okada.
allowBansIdentifiants d’interdictions signalées mais non confirmées à traverser quand même.
farestrue ajoute à chaque itinéraire ce que devrait coûter le trajet.
langen (par défaut) ou fr, pour les instructions.

?fields= ne garde que certains champs de chaque itinéraire, par exemple fields=distanceM,durationS,geometry.

Réponse

200 OK (abrégé)
{
  "routes": [
    {
      "distanceM": 1395,
      "durationS": 228,
      "staticDurationS": 228,
      "trafficDelayS": 0,
      "summary": "Admiralty Way and Awudu Ekpekha Boulevard",
      "geometry": { "type": "LineString", "coordinates": [[3.472352, 6.4474], [3.472352, 6.447802], "…"] },
      "legs": [{ "distanceM": 1395, "durationS": 228 }],
      "steps": [
        { "maneuver": "depart_left", "instruction": "Drive north on Victoria Arobieke Street.", "distanceM": 44, "durationS": 6, "streetNames": ["Victoria Arobieke Street"], "startIndex": 0, "endIndex": 1 }
      ],
      "country": "NG"
    }
  ]
}
ChampDescription
routesLe meilleur itinéraire d’abord, puis les éventuelles alternatives.
distanceM, durationSLa longueur en mètres et la durée en secondes.
staticDurationS, trafficDelaySLa durée sans le trafic en direct, et ce que le trafic et les incidents ajoutent en ce moment (avec traffic_aware).
geometryUne LineString GeoJSON, prête pour une couche de carte.
stepsLe guidage pas à pas : instruction, distance, durée, streetNames, et où chaque étape commence et finit dans geometry ; sorties de rond-point, feux, et à pied passerelles ou passages piétons.
legsUn par tronçon entre deux arrêts.
segmentsLes trajets qui changent de moyen de transport : un train ou un bateau, ou un okada qui contourne une zone d’interdiction à pied.
vehicleRulesTrajets en okada, keke et danfo : les interdictions que l’itinéraire a évitées (avoided), les règles qui ne sont que des conseils, un départ ou une arrivée dans une zone d’interdiction (endBan), et les endroits où les conducteurs disent se faire arrêter.
lastMileOù s’arrêter quand la route finit avant la porte, et comment terminer.
accessUn lotissement ou une concession fermés à l’arrivée.
tolls, borderCrossingsLes péages et ce qu’ils coûtent dans leur monnaie ; les postes-frontières sur les trajets entre pays.
congestion, roadConditionLes tronçons lents ; les tronçons abîmés, inondés ou endommagés signalés par les conducteurs.
faresAvec fares: true : ce que devrait coûter le trajet (voir Tarifs).
warningsTout ce qui mérite encore d’être dit au conducteur.

Erreurs

StatutCodeSignification
400MODE_INVALID, WAYPOINT_INVALID, TOO_MANY_INTERMEDIATES…Un champ manquant ou erroné. Le message dit lequel.
404POSTCODE_NOT_FOUND, GHANAPOST_NOT_FOUNDUn code que N-Ways ne sait pas placer.
422NO_ROUTE, NO_ROAD_ROUTEPas d’itinéraire : un point est trop loin de toute route, ou de l’autre côté de l’eau (essayez boat ou walk).
422OKADA_BANNED_ORIGIN, …_DESTINATION, …_STOP, …_ROUTEUn okada ne peut pas faire ce trajet ; de même pour MOTORBIKE_BANNED_…, KEKE_BANNED_… et DANFO_BANNED_….
422ROUTE_TOO_FARLes lieux sont trop éloignés pour un seul itinéraire de ce type.
503ROUTING_UNAVAILABLELe moteur d’itinéraires est occupé ou redémarre. Réessayez dans une minute.

Les itinéraires de base (voiture, camionnette, à pied et à vélo sans trafic en direct, jusqu’à 10 arrêts) et les itinéraires avancés (trafic en direct, okada, keke, danfo, moto, bateau, train, plus de 10 arrêts, ou tarifs) n’ont pas le même prix. Tarifs

Tarifs

Ce que devrait coûter une course, dans la monnaie du pays : taxi, taxi collectif, okada, keke, danfo ou bus, bateau et VTC, d’après ce que les passagers ont payé (basis: crowd) ou des sources publiées (basis: guide), avec la nuit, les heures de pointe, la pluie et les courses privatisées.

GET /maps/v1/fares/estimate

ParamètreDescription
from, toObligatoires. lat,lng chacun.
modeSéparés par des virgules : taxi, shared_taxi, okada, keke, danfo, ridehail, boat. Tous s’il n’est pas donné.
distanceM, durationSLa longueur et la durée de l’itinéraire, si vous les avez ; les estimations sont meilleures.
atL’heure du trajet (RFC 3339) : la nuit et les heures de pointe coûtent plus cher.
charter, raintrue pour une course privatisée (« drop »), ou sous la pluie.
langen ou fr.
cURL
curl "https://nways.ng/maps/v1/fares/estimate?from=6.4474,3.4720&to=6.5244,3.3792&mode=okada,taxi" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"

La réponse donne la currency et une entrée estimates par mode avec les prix low, typical et high (dans l’unité principale de la monnaie), un text rédigé comme 8 150–15 200 ₦, s’il s’agit d’un prix par personne (perPerson), et ses sources. Les modes que la loi exclut du trajet sont dans notAllowed, avec la règle et sa source (les okadas sont interdits dans une grande partie de Lagos).

Trafic en direct

cURL
curl "https://nways.ng/maps/v1/traffic?bbox=3.30,6.40,3.50,6.60" -H "X-NWays-Api-Key: VOTRE_CLE_API"

Les routes avec des mesures en direct dans un rectangle (minLng,minLat,maxLng,maxLat, moins de 3° de large), en lignes GeoJSON avec un niveau d’embouteillage, pour les dessiner sur une carte. Les mesures viennent, de façon anonyme, des téléphones N-Ways sur la route. Ne les mettez pas en cache : elles changent d’une minute à l’autre. Pour les vitesses par route et par sens, pour vos propres heures d’arrivée, voyez le flux de trafic.

L’ancienne adresse

POST https://nways.ng/v1/routes (avec from, to et stops) et /v1/fares/estimate continuent de fonctionner pour les partenaires qui les utilisent déjà pendant au moins 12 mois, mais leurs réponses suivent l’application N-Ways. Passez à /maps/v1, dont les réponses ne font que gagner des champs.