N-Ways
Documentação para programadoresMapas

Mapas

Estilos alojados, mosaicos vetoriais, tipos de letra e imagens de mapa estáticas.

Nesta página
Nota:

Envie a sua chave com key=A_SUA_CHAVE_API no endereço, ou no cabeçalho X-NWays-Api-Key. Chaves de API

Endereço base: https://nways.ng/maps/v1

Um estilo de mapa alojado (um carregamento de mapa)

GET https://nways.ng/maps/v1/styles/{style}.json

Um estilo MapLibre para o mapa de ruas N-Ways, com a chave em cada URL N-Ways (mosaicos, tipos de letra). Aponte o MapLibre GL JS ou o MapLibre Native para ele: style: 'https://nways.ng/maps/v1/styles/streets-light.json?key=nw_…'. Cada leitura conta como um carregamento de mapa (SKU map_loads, produto tiles). Os mosaicos chegam um a um (/tiles/base/{z}/{x}/{y}.mvt, todos os países, com bounds à volta de todos eles), ou a partir do arquivo PMTiles de cada país com format=pmtiles (é preciso o protocolo pmtiles, que o SDK web regista): o estilo tem então uma fonte por país (nways-ng, nways-gh, …) e cada camada uma vez por país (roads-ng, roads-gh, …). Motivos: STYLE_NOT_FOUND, LANG_INVALID, FORMAT_INVALID.

Parâmetros

NomeOndeTipoDescrição
stylecaminhostringObrigatório. Um de: streets-light, streets-dark.
langconsultastringUm de: en, fr, pt. Predefinição: en.
formatconsultastringUm de: mvt, pmtiles. Predefinição: mvt.
cURL
curl "https://nways.ng/maps/v1/styles/streets-light.json" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Um estilo MapLibre (versão 8)

200 OK
{}

Erros

  • default Erro

Os arquivos de mosaicos de todos os países

GET https://nways.ng/maps/v1/tiles/countries.json

Os países que a N-Ways cartografa hoje, cada um com o seu código ISO, a sua caixa (bbox: oeste, sul, este, norte), o seu contorno (coordenadas GeoJSON MultiPolygon) e os seus arquivos PMTiles (files.base, files.detail, files.transit; um tipo pode faltar enquanto um país está a ser construído). Leia um mosaico do arquivo do país cujo contorno contém o centro do mosaico, e depois de qualquer outro cuja caixa ele toque. Só os arquivos aqui listados são servidos (qualquer outro nome dá TILESET_NOT_FOUND), por isso leia a lista de novo em vez de guardar nomes de ficheiros. Gratuito com qualquer chave Maps (contado, nunca faturado). TILES_UNAVAILABLE quando o servidor não tem dados de mapa.

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

Resposta

A lista

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

Erros

  • default Erro

Ler o arquivo PMTiles de um país (pedidos de intervalo)

GET https://nways.ng/maps/v1/tiles/{tileset}.pmtiles

Os mosaicos vetoriais de um país num arquivo PMTiles v3: <country>.pmtiles (esquema de mapa base Protomaps, zoom 0–15), <country>-detail.pmtiles (zoom 12–16) ou <country>-transit.pmtiles (zoom 5–15), como listados em /tiles/countries.json, lido aos bocados com Range: bytes=a-b (no máximo 8 MB por leitura; o arquivo inteiro nunca é servido). A chave é verificada na primeira leitura de uma sessão de arquivo a partir de um site (todos os arquivos) e conta como uma chamada tiles; as leituras seguintes nos 2 minutos seguintes aproveitam essa verificação. Motivos: TILESET_NOT_FOUND, RANGE_REQUIRED, RANGE_TOO_LARGE, TILES_UNAVAILABLE.

Parâmetros

NomeOndeTipoDescrição
tilesetcaminhostringObrigatório. Um nome de ficheiro de /tiles/countries.json, sem .pmtiles
RangecabeçalhostringObrigatório.
cURL
curl "https://nways.ng/maps/v1/tiles/COUNTRY.pmtiles" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Os bytes pedidos

Erros

  • default Erro

Um mosaico vetorial

GET https://nways.ng/maps/v1/tiles/{tileset}/{z}/{x}/{y}.mvt

Um Mapbox Vector Tile (uma chamada tiles) do arquivo do país onde se encontra, de modo que todos os países estão em cada conjunto de mosaicos: base (zoom 0–15), detail (12–16) ou transit (5–15). Comprimido com gzip quando o cliente o aceita. 204 onde não há mosaico (mar aberto). Acima do zoom máximo, sobreampliação (a fonte do estilo indica maxzoom: 15). Motivos: TILESET_NOT_FOUND, TILE_INVALID, TILE_NOT_FOUND, TILES_UNAVAILABLE.

Parâmetros

NomeOndeTipoDescrição
tilesetcaminhostringObrigatório. Um de: base, detail, transit.
zcaminhointegerObrigatório. ≥ 0, ≤ 16.
xcaminhointegerObrigatório. ≥ 0.
ycaminhointegerObrigatório. ≥ 0.
cURL
curl "https://nways.ng/maps/v1/tiles/base/0/0/0.mvt" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Um mosaico

Erros

  • default Erro

Glifos de tipos de letra para as legendas do mapa (gratuito)

GET https://nways.ng/maps/v1/fonts/{stack}/{range}.pbf

Intervalos de glifos para os tipos de letra do estilo (Inter-Regular, Inter-Medium, Inter-SemiBold, Inter-Bold, Inter-Italic). Contados, nunca cobrados. Motivos: FONT_RANGE_INVALID, FONT_NOT_FOUND.

Parâmetros

NomeOndeTipoDescrição
stackcaminhostringObrigatório.
rangecaminhostringObrigatório.
cURL
curl "https://nways.ng/maps/v1/fonts/Inter-Medium/0-255.pbf" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Glifos

Erros

  • default Erro

Uma imagem de mapa

GET https://nways.ng/maps/v1/staticmap

Um PNG ou JPEG do mapa, desenhado pela N-Ways a partir dos seus próprios mosaicos, com marcadores e linhas. Indique center e zoom, ou apenas marcadores e trajetos para os enquadrar. Uma chamada static_maps.

URL assinados. Acrescente signature= (no fim) para usar um URL em qualquer lado (um e-mail, uma aplicação sem Referer), seja qual for a restrição de aplicação da chave: o HMAC-SHA256 em base64url do caminho e da query do URL (a partir de /maps/v1/staticmap?, sem signature) com o segredo de assinatura da chave (base64url; a N-Ways entrega-o com a chave). Um URL alterado ou uma assinatura errada: 403 SIGNATURE_INVALID.

Motivos: SIZE_INVALID, SCALE_INVALID, THEME_INVALID, FORMAT_INVALID, MARKERS_INVALID, PATH_INVALID, CENTER_REQUIRED, CENTER_INVALID, ZOOM_INVALID, URL_TOO_LONG, SIGNATURE_INVALID.

Parâmetros

NomeOndeTipoDescrição
centerconsultastringlat,lng
zoomconsultanumber≥ 0, ≤ 20.
sizeconsultastringLARGURAxALTURA, de 32 a 1280 px cada Predefinição: 640x400.
scaleconsultaintegerUm de: 1, 2. Predefinição: 1.
themeconsultastringUm de: light, dark. Predefinição: light.
formatconsultastringUm de: png, jpg. Predefinição: png.
markersconsultastring[]Repetível: estilos, depois pontos, separados por |: color:red|label:A|size:small|6.45,3.47|6.46,3.48. Cores: red, green, blue, orange, yellow, purple, black, white, gray, ou 0xRRGGBB[AA]. Tamanhos tiny, small, mid. No máximo 100 marcadores.
pathconsultastring[]Repetível: color:0x1e6fe8cc|weight:5|fillcolor:0x…|6.45,3.47|6.46,3.48, ou uma polilinha codificada (precisão 5) no fim: weight:4|enc:_p~iF~ps|U…. No máximo 10 trajetos, 2000 pontos cada.
signatureconsultastring
cURL
curl "https://nways.ng/maps/v1/staticmap" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

A imagem

Erros

  • default Erro