Os blocos de mapa são simplesmente a divisão do mundo em uma grade indexada. Ele permite acessar e utilizar dados do mapa de maneira eficiente e dinâmica em várias escalas cartográficas. A API Map Tiles dá acesso a vários conjuntos de dados geográficos temáticos, incluindo os selecionados pelo Google:
Blocos de imagem do roteiro com base em dados topográficos vetoriais com o estilo cartográfico do Google.
Ortofotografia capturada por câmeras de satélite e aéreas que mostram imagens de cima para baixo (nadir) da Terra.
Mapas de contorno de sombras.
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 zero (para visualizar o mundo inteiro) a 22 (para visualizar ruas e blocos).
Temas de mapas
É possível ter blocos de mapas para os seguintes temas de mapa.
Tema do mapa | Descrição |
---|---|
Roteiro | vias, edifícios, pontos de interesse e fronteiras políticas |
Satélite | Imagens fotográficas tiradas do espaço |
Terreno | Um mapa de contorno que mostra características naturais, como vegetação |
Para solicitar blocos de mapa da API Map Tiles, primeiro peça um
token de sessão. O token de sessão rastreia o estado atual do mapa e da janela de visualização. Ao configurar seu token de sessão, você precisa definir o valor mapType
para corresponder ao tema do mapa que você quer.
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. As solicitações de informações da janela de visualização retornam detalhes sobre os blocos do mapa que compõem sua janela atual. Você solicita informações da janela de visualização para evitar a solicitação de imagens em níveis de zoom inexistentes.
Por exemplo, a maioria das cidades tem imagens no nível de zoom 22, mas não do oceano, porque elas acabariam exibindo quadrados azuis inexistentes.
A solicitação da janela de visualização é uma solicitação HTTPS GET no seguinte formato.
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 mais distantes ao norte, sul, leste e oeste 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 os limites que cruzam o antimeridiano, o oeste pode ser positivo (por exemplo, 170) e o 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 inclui os campos abaixo.
copyright
- Contém uma string de atribuição que precisa ser mostrada no mapa ao mostrar blocos de mapas e satélites. 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 blocos
As 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 a seguir que primeiro converte um
latLng
em um ponto e depois de um ponto para coordenadas de 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
};
}