N-Ways
Documentação para programadoresPercursos

Percursos

Percursos como as pessoas se deslocam de facto aqui: de carro, de okada, de keke, de danfo, a pé, de comboio ou de barco, com trânsito em tempo real, portagens, proibições de okadas e kekes, fronteiras, e quanto a viagem deveria custar.

Nesta página

Endereço base: https://nways.ng/maps/v1. Aqui, os percursos, as tarifas e o trânsito; para muitas origens e destinos de uma vez, veja a matriz de percursos, e para um lote de paragens a otimização de rotas. Referência

Obter um percurso

POST /maps/v1/routes/compute com um corpo JSON.

cURL
curl -X POST "https://nways.ng/maps/v1/routes/compute" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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")

Corpo do pedido

CampoDescrição
origin, destinationObrigatórios. Um ponto { "lat", "lng" }, um código postal NIPOST { "postcode" } (o percurso termina na melhor entrada do edifício), um endereço { "ghanaPost" } ou um { "plusCode" }. A origem pode ter um rumo (heading) em graus, para que um veículo em movimento não comece com uma inversão de marcha.
intermediatesAté 25 paragens pelo caminho, por ordem, nas mesmas formas.
modedrive (por omissão), van, okada (um mototáxi: respeita as proibições de okada), motorbike (a sua própria mota: as proibições comerciais não se aplicam), keke e danfo (respeitam as suas proibições), walk, bicycle, boat (barcos de passageiros e cais), train.
alternativestrue para até mais 2 percursos (sem paragens intermédias).
routingPreferencetraffic_unaware (por omissão) ou traffic_aware: trânsito em tempo real e incidentes assinalados.
departAtA hora de partida (RFC 3339): os barcos circulam de dia, e o trânsito segue a hora.
avoidQualquer um de tolls, highways, bad_roads (estradas que os condutores assinalaram como degradadas ou inundadas).
tollVehicleA classe tarifária da portagem: car, suv, bus, truck.
accessViagens de comboio e de barco: como chegar à estação ou ao cais e como sair: walk, okada ou drive.
lastMileOnde a estrada acaba antes da porta: terminar a pé (walk) ou de okada.
allowBansIdentificadores de proibições assinaladas mas não confirmadas que se quer atravessar mesmo assim.
farestrue acrescenta a cada percurso quanto a viagem deveria custar.
langen (por omissão) ou fr, para as instruções.

?fields= mantém só alguns campos de cada percurso, por exemplo fields=distanceM,durationS,geometry.

Resposta

200 OK (abreviado)
{
  "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"
    }
  ]
}
CampoDescrição
routesO melhor percurso primeiro, depois as eventuais alternativas.
distanceM, durationSO comprimento em metros e a duração em segundos.
staticDurationS, trafficDelaySA duração sem trânsito em tempo real, e o que o trânsito e os incidentes acrescentam neste momento (com traffic_aware).
geometryUma LineString GeoJSON, pronta para uma camada de mapa.
stepsA navegação curva a curva: instruction, distância, duração, streetNames, e onde cada passo começa e acaba em geometry; saídas de rotunda, semáforos e, a pé, passagens superiores ou passadeiras.
legsUm por troço entre duas paragens.
segmentsAs viagens que mudam de meio de transporte: um comboio ou um barco, ou um okada que contorna a pé uma zona de proibição.
vehicleRulesViagens de okada, keke e danfo: as proibições que o percurso evitou (avoided), as regras que são apenas conselhos, uma partida ou chegada dentro de uma zona de proibição (endBan), e os sítios onde os condutores dizem ser mandados parar.
lastMileOnde parar quando a estrada acaba antes da porta, e como terminar.
accessUm condomínio ou um lote fechado no destino.
tolls, borderCrossingsAs portagens e quanto custam nas suas moedas; os postos fronteiriços nas viagens entre países.
congestion, roadConditionOs troços lentos; os troços degradados, inundados ou danificados assinalados pelos condutores.
faresCom fares: true: quanto a viagem deveria custar (ver Tarifas).
warningsTudo o que ainda vale a pena dizer ao condutor.

Erros

EstadoCódigoSignificado
400MODE_INVALID, WAYPOINT_INVALID, TOO_MANY_INTERMEDIATES…Um campo em falta ou errado. A mensagem diz qual.
404POSTCODE_NOT_FOUND, GHANAPOST_NOT_FOUNDUm código que o N-Ways não consegue localizar.
422NO_ROUTE, NO_ROAD_ROUTESem percurso: um ponto está demasiado longe de qualquer estrada, ou do outro lado da água (experimente boat ou walk).
422OKADA_BANNED_ORIGIN, …_DESTINATION, …_STOP, …_ROUTEUm okada não pode fazer esta viagem; o mesmo para MOTORBIKE_BANNED_…, KEKE_BANNED_… e DANFO_BANNED_….
422ROUTE_TOO_FAROs lugares estão demasiado afastados para um só percurso deste tipo.
503ROUTING_UNAVAILABLEO motor de percursos está ocupado ou a reiniciar. Tente de novo daqui a um minuto.

Os percursos básicos (carro, carrinha, a pé e de bicicleta sem trânsito em tempo real, até 10 paragens) e os avançados (trânsito em tempo real, okada, keke, danfo, mota, barco, comboio, mais de 10 paragens, ou tarifas) têm preços diferentes. Preços

Tarifas

Quanto deveria custar uma viagem, na moeda do país: táxi, táxi coletivo, okada, keke, danfo ou autocarro, barco e transporte por aplicação, segundo o que os passageiros pagaram (basis: crowd) ou fontes publicadas (basis: guide), com a noite, as horas de ponta, a chuva e as viagens fretadas.

GET /maps/v1/fares/estimate

ParâmetroDescrição
from, toObrigatórios. lat,lng cada um.
modeSeparados por vírgulas: taxi, shared_taxi, okada, keke, danfo, ridehail, boat. Todos, se não for indicado.
distanceM, durationSO comprimento e a duração do percurso, se os tiver; as estimativas ficam melhores.
atA hora da viagem (RFC 3339): a noite e as horas de ponta custam mais.
charter, raintrue para uma viagem fretada («drop»), ou com chuva.
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: A_SUA_CHAVE_API"

A resposta dá a currency e uma entrada estimates por modo com os preços low, typical e high (na unidade principal da moeda), um text redigido como 8 150–15 200 ₦, se é um preço por pessoa (perPerson), e as suas sources. Os modos que a lei exclui da viagem estão em notAllowed, com a regra e a sua fonte (os okadas são proibidos em grande parte de Lagos).

Trânsito em tempo real

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

As estradas com medições em tempo real dentro de um retângulo (minLng,minLat,maxLng,maxLat, com menos de 3° de largura), em linhas GeoJSON com um nível de congestionamento, para desenhar num mapa. As medições vêm, de forma anónima, dos telemóveis com N-Ways na estrada. Não as guarde em cache: mudam de minuto para minuto. Para as velocidades por estrada e por sentido, para as suas próprias horas de chegada, veja o feed de trânsito.

O endereço antigo

POST https://nways.ng/v1/routes (com from, to e stops) e /v1/fares/estimate continuam a funcionar para os parceiros que já os usam durante pelo menos 12 meses, mas as suas respostas acompanham a aplicação N-Ways. Passe para /maps/v1, cujas respostas só ganham campos.