Aplicações
O endpoint de Rotas calcula o caminho ótimo entre dois ou mais pontos geográficos, retornando a geometria da rota em WKT (LINESTRING) além de métricas de distância, tempo, subida e descida acumuladas. É a base para operações que dependem de deslocamento real na malha viária — não apenas distância euclidiana.
Last-mile & Logística
Estime tempo e distância reais de entrega entre CD e destino final, incluindo pontos intermediários da rota de distribuição.
Catchment Area
Calcule a rota real (não linha reta) entre clientes e pontos de atendimento para dimensionar a área de captação de uma loja ou agência.
Território de Vendas
Defina territórios de representantes comerciais baseados em tempo de deslocamento entre contas, otimizando roteiros de visita.
Análise de Cobertura
Verifique a distância real percorrível entre pontos de rede (agências, filiais, postos) para identificar sobreposição e gaps.
Conceito
A API de Rotas calcula o caminho ótimo entre pontos sobre a malha viária brasileira. Diferente da distância em linha reta (haversine), o algoritmo respeita ruas, sentidos, restrições de acesso e características viárias — retornando o trajeto que efetivamente pode ser percorrido.
A entrada aceita dois ou mais pontos no formato lat,lng. Quando são fornecidos múltiplos waypoints, o cálculo segue a ordem informada (o primeiro ponto é a origem, o último é o destino, os intermediários são paradas obrigatórias). O perfil (car, foot, bike) determina a rede considerada e a velocidade média — alterando o caminho ótimo e o tempo estimado.
Convenção de Sinais
Quando a rota é calculada com sucesso, o retorno traz a geometria em WKT e as métricas preenchidas. Quando não existe caminho possível entre os pontos (por exemplo, pontos em ilhas isoladas sem ligação viária ou perfis incompatíveis com a malha), o comportamento por endpoint difere:
sucesso: false, dados: null e uma mensagem em erro, sem interromper o processamento dos demais itens do lote.
Parâmetros de Entrada
points
array<string>
Lista de pontos no formato lat,lng, informados como parâmetros repetidos na query string. Mínimo de 2 pontos (origem e destino); waypoints intermediários são respeitados na ordem informada.
profile
enum
Perfil de roteamento. Valores: car, foot, bike. Default: car.
sentido
enum
Direção do cálculo: ida (origem→destino, default), volta (destino→origem) ou ambos (retorna os dois sentidos como lista, dobra a cardinalidade da resposta).
piso_geodesico_m
integer · metros
Piso de validade do indice_de_desvio. Não afeta o cálculo da rota; só decide se o índice sai como confiável e qual o status. Faixa 0–5000, default 500.
Batch: POST /routing/batch/route — corpo JSON com items (máx. 16; cada item traz points: [[lat, lng], ...]) + profile, sentido e piso_geodesico_m aplicados a todo o lote.
Matriz 1→N (Fase 2): POST /routing/route/matrix — uma origem e até 1.024 destinos (cada um com id opcional ecoado na resposta). Cada item traz todos os campos derivados da rota. Cache interno por par (origem, destino, profile, sentido, versão da malha) com TTL de 12 h. Sentido ambos não é suportado no matrix (dobraria a cardinalidade).
Exemplos
Dois cenários ilustram os padrões de resposta da API — uma rota simples entre dois pontos e uma rota com waypoints intermediários.
GET /routing/route?points=-19.9191,-43.9378&points=-19.9498,-43.9477&profile=car
{
"geometria": "LINESTRING (-43.9378 -19.9191, -43.94 -19.93, -43.9477 -19.9498)",
"distancia_m": 1500.5,
"tempo_s": 180.0,
"subida_m": 50.0,
"descida_m": 30.0,
"distancia_geodesica_m": 1123.4,
"indice_de_desvio": 1.336,
"indice_de_desvio_confiavel": true,
"piso_geodesico_m": 500,
"velocidade_media_rota_kmh": 30.01,
"velocidade_media_geodesica_kmh": 22.47,
"snap_origem_m": 12.4,
"snap_destino_m": 8.7,
"sentido": "origem_destino",
"status": "OK",
"versao_malha_viaria": "20260322-9110d1b2",
"data_calculo": "2026-09-01T14:32:11+00:00",
"origem_cache": false
}
A rota tem 1.500 m de extensão viária real contra 1.123 m em linha reta — indice_de_desvio ≈ 1,34 (o carro roda 34% a mais do que a haversine, típico de malha urbana). Tempo estimado 3 min a 30 km/h médios (proxy de hierarquia viária, não de tráfego). indice_de_desvio_confiavel=true porque a geodésica (1.123 m) supera o piso_geodesico_m=500. A geometria em WKT pode ser plotada diretamente em PostGIS, QGIS ou Leaflet via wellknown.
POST /routing/batch/route
{
"items": [
{ "points": [[-23.55, -46.63], [-23.56, -46.64], [-23.57, -46.65]] },
{ "points": [[-22.90, -43.17], [-22.91, -43.18]] }
],
"profile": "car"
}
// Resposta
{
"TOTAL": 2,
"SUCESSOS": 2,
"FALHAS": 0,
"RESULTADOS": [
{
"sucesso": true,
"dados": {
"geometria": "LINESTRING (-46.63 -23.55, -46.64 -23.56, -46.65 -23.57)",
"distancia_m": 3120.4,
"tempo_s": 420.0,
"subida_m": 12.0,
"descida_m": 18.0
},
"erro": null
},
{
"sucesso": true,
"dados": { "geometria": "LINESTRING (...)", "distancia_m": 1590.2, "tempo_s": 210.0, "subida_m": 5.0, "descida_m": 7.0 },
"erro": null
}
]
}
No batch, a primeira rota tem três waypoints — origem, parada intermediária e destino — todos respeitados na ordem informada. O envelope traz contadores agregados (TOTAL, SUCESSOS, FALHAS) e cada item carrega o próprio flag sucesso.
Atributos Retornados
A resposta é composta pela geometria da rota em WKT e pelas métricas acumuladas ao longo do trajeto. Nos exemplos abaixo os campos são apresentados sem o prefixo prismadata__routing_route__ presente no schema oficial.
lng lat (padrão WKT). Pode ser convertida para GeoJSON com bibliotecas como shapely, wellknown ou funções PostGIS ST_GeomFromText.null se status=SEM_ROTA.distancia_m / distancia_geodesica_m. Mede o quanto a malha viária desvia da linha reta. Sem clamp; valores <1 indicam ruído dominante do snap às vias (par muito próximo). null se status=SEM_ROTA.true quando distancia_geodesica_m ≥ piso_geodesico_m. Use para filtrar pares muito próximos onde o índice é dominado por snap.distancia_m / tempo_s em km/h. Proxy de hierarquia viária (arterial × local), não de tráfego real.distancia_geodesica_m / tempo_s. Útil para comparar redes ou eficiência espacial entre rotas.origem_destino ou destino_origem. Em sentido=ambos, o response traz uma lista com um item por sentido.OK (rota válida), SEM_ROTA (sem caminho viário entre pontos), ABAIXO_DO_PISO (rota calculada mas geodésica menor que o piso — indice_de_desvio_confiavel=false).AAAAMMDD-<sha8>. Útil para reprodução: rotas com a mesma versão da malha e mesmos parâmetros retornam resultado idêntico.true quando o item veio do cache interno (ex.: matrix TTL 12 h), false quando foi recalculado./batch/route)
sucesso=true. null em falha.sucesso=false./route/matrix)
id eco (se fornecido no destino) e todos os campos de rota (mesmo shape do endpoint single).Detalhes Técnicos
Fontes
- Malha viária brasileira derivada de fontes públicas abertas
- Motor de roteamento próprio da PrismaData
- Modelo digital de elevação (para cálculo de subida/descida)
Metodologia
Busca do menor tempo entre pontos sobre o grafo viário, respeitando sentidos, restrições e o perfil solicitado (car, foot ou bike).
Frequência de Atualização
Malha viária atualizada periodicamente a partir de snapshots públicos.
Cobertura
Todo o território nacional coberto pela malha viária pública. Trechos sem representação no grafo não são roteáveis.
Limitações
Considere ao utilizar
- O cálculo não considera tráfego em tempo real: o tempo estimado (
tempo_s) é baseado em velocidades médias por tipo de via, sem ajuste para congestionamento, horário de pico ou eventos. Para catchment com trânsito use as isócronas comcondicao_transito. - O endpoint em lote
/routing/batch/routetem limite máximo de 16 rotas por requisição. Para volumes maiores, use/routing/route/matrix(até 1.024 destinos por chamada) ou particione o processamento no lado cliente. - A matriz
/route/matrixnão suportasentido=ambos(dobraria a cardinalidade — chame o endpoint duas vezes se precisar). - Pontos localizados fora da malha viária pública (áreas isoladas, ilhas sem ligação rodoviária) podem não ter rota viável — o endpoint retorna
status=SEM_ROTAcomgeometriaedistancia_mnulos; no batch, o item trazsucesso=false. - Em pares muito próximos,
indice_de_desviopode ficar dominado por ruído de snap às vias (valores<1). Use o flagindice_de_desvio_confiavelou ajustepiso_geodesico_mconforme a granularidade do caso. - A qualidade de
subida_medescida_mdepende da disponibilidade e resolução do modelo digital de elevação na região consultada. - Waypoints intermediários são respeitados na ordem informada. A API não faz otimização de sequência (TSP) — se precisar do menor tempo total visitando N pontos em qualquer ordem, resolva o TSP antes de chamar o endpoint.
Pronto para testar?
Experimente a API de Rotas no playground interativo com seus próprios pontos e perfis.
Abrir playground