Os blocos do mapa são simplesmente a divisão do mundo em uma grade indexada. Com ele, é possível acessar e utilizar dados do mapa de maneira eficiente e dinâmica em várias escalas cartográficas. A API Map Tiles oferece acesso a vários conjuntos de dados geográficos temáticos, incluindo:
Blocos de imagens de roteiro baseados em dados topográficos vetoriais com estilo cartográfico do Google.
Ortofotografia capturada por câmeras aéreas e de satélite, que mostram imagens da Terra de cima para baixo (nadir).
Mapas de contorno da colina.
Os blocos de mapas 2D são todos georreferenciados e alinhados entre si. Eles são selecionados com base na extensão geográfica da janela de visualização e no nível de zoom. Os níveis de zoom variam de 0 (para ver o mundo por completo) a 22 (para ver ruas e blocos).
Temas de mapas
Você pode obter blocos de mapa para os seguintes temas de mapa.
Tema de mapa | Descrição |
---|---|
Roteiro | Estradas, edifícios, pontos de interesse e fronteiras políticas |
Satélite | Imagens fotográficas do espaço |
Relevo | Um mapa de contornos que mostra elementos naturais como vegetação |
Para solicitar blocos de mapa da API Map Tiles, primeiro você precisa solicitar um token de sessão. Esse token rastreia o estado atual do mapa e da janela de visualização. Ao configurar seu token de sessão, defina o valor de mapType
para corresponder ao tema de mapa desejado.
Em seguida, inclua o token de sessão em cada uma das solicitações para a
API Map Tiles.
Solicitações de informações da janela de visualização
A janela de visualização define o tamanho da caixa que enquadra a cena mundial. Essas solicitações retornam detalhes sobre os blocos de mapa que compõem a janela de visualização atual. O motivo para solicitar informações da janela de visualização é evitar a solicitação de imagens em níveis de zoom que não existem.
Por exemplo, a maioria das cidades tem imagens no nível de zoom 22, mas não do oceano, porque isso acabaria exibindo quadrados azuis incomparáveis.
A solicitação da janela de visualização é HTTPS GET no formato a seguir.
curl "https://tile.googleapis.com/tile/v1/viewport?session=YOUR_SESSION_TOKEN &key=YOUR_API_KEY &zoom=zoom &north=north &south=south &east=east &west=west"
A solicitação contém os seguintes campos:
zoom
- O nível de zoom da janela de visualização.
north
,south
,east
,west
- Os pontos norte, sul, leste e oeste mais distantes na janela de visualização, expressos em graus. Norte e sul precisam estar no intervalo (-90,90), leste e oeste precisam estar no intervalo (-180, 180). Para expressar limites que cruzam o antimeridiano, oeste pode ser positivo (por exemplo, 170) e leste pode ser negativo (por exemplo, -170). Todos os parâmetros são obrigatórios.
Respostas de informações da janela de visualização
A resposta da janela de visualização informa quais áreas têm imagens e em quais níveis de zoom. Uma resposta de informações da janela de visualização tem o seguinte formato:
{
"copyright": "Map data ©2023",
"maxZoomRects": [
{
"maxZoom": 19,
"north": 90,
"south": -90,
"east": 180,
"west": -180
},
{
"maxZoom": 9,
"north": 90,
"south": -90,
"east": 180,
"west": -180
},
{
"maxZoom": 14,
"north": 84.375,
"south": -84.375,
"east": 180,
"west": -180
}, ...
]
}
O corpo da resposta contém os campos a seguir.
copyright
- Contém uma string de atribuição que precisa ser mostrada no mapa quando os blocos de mapa de satélite e roteiros são mostrados. Para mais informações, consulte as Políticas da API Map Tiles.
maxZoomRect
- Contém uma matriz de retângulos delimitadores que se sobrepõem à janela de visualização atual. Também contém o nível de zoom máximo disponível dentro de cada retângulo.
Funções de coordenadas de bloco
Ferramentas (funções simples) estão disponíveis na maioria das linguagens de programação para converter pares de latitude/longitude em coordenadas de bloco com um nível de zoom específico.
Considere o exemplo de código JavaScript abaixo, que primeiro converte de um
latLng
para um ponto e depois de um ponto para as coordenadas do bloco.
var TILE_SIZE = 256;
function fromLatLngToPoint(latLng) {
var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
return {
x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
y: TILE_SIZE / 2 * (1 + mercator / Math.PI)
};
}
function fromLatLngToTileCoord(latLng, zoom) {
var point = fromLatLngToPoint(latLng);
var scale = Math.pow(2, zoom);
return {
x: Math.floor(point.x * scale / TILE_SIZE),
y: Math.floor(point.y * scale / TILE_SIZE),
z: zoom
};
}