using GMT, RemoteS
# Tell GMT to display the images in VSCode
ENV["DISPLAY_IN_VSC"] = "a";
Definições:
- Um tile é sempre uma imagem com 256 x 256 pixeis
- Cada tile tem dois nomes únicos. Um baseado num esquema que se chama uma àrvore de quadrados e constituido apenas pelos algarismos 0,1,2 e 3. O número total de algarismos do nome indica o seu nível de zoom. No outro esquema, chamado XYZ, o nome é construido a partir do número da linha e da coluna de uma certa matriz (mais abixo veremos exemplos).
- A área coberta por um tile depende do seu nível de zoom. Por exemplo, ao nível 21, um tile cobre um rectângulo com o lado vertical com ~15 m.
- gratícula, ou se quisermos, malha, são as linhas horizontais e verticais (a vermelho nas imagens seguintes) que delimitam cada tile.
- Uma imagem devolvida pela função mosaic é constituida por um ou uma junção de vários tiles colados lado-a-lado.
Uma imagem com um zoom de nível 14 cobre uma área rectangular com perto de 2 km de lado N-S. Vejamos um exemplo da zona das Gambelas.
I14 = mosaic(-7.966902, 37.042682, provider=:goog, zoom=14);
viz(I14)
Esta imagem tem uma resolução muito baixa e apenas servirá para nos guiar. Um aspecto muito interessante destas imagens (imagens dos TileMapServers) é que cada tile tem dois nomes únicos que podemos nos atributos ver se usarmos a opção mesh=true
D14 = mosaic(-7.966902, 37.042682, zoom=14, mesh=true)
Comment: ["Zoom level = 15"] Attribute table ┌────────────────┬──────────────┐ │ quadtree │ XYZ │ ├────────────────┼──────────────┤ │ 03311032210321 │ 7829,6374,14 │ └────────────────┴──────────────┘ BoundingBox: [-7.97607421875, -7.9541015625, 37.03763967977139, 37.05517710666082] PROJ: +proj=longlat +datum=WGS84 +units=m +no_defs Header: -W 5×2 GMTdataset{Float64, 2} Row │ Lon Lat ─────┼─────────────────── 1 │ -7.97607 37.0376 2 │ -7.97607 37.0552 3 │ -7.9541 37.0552 4 │ -7.9541 37.0376 5 │ -7.97607 37.0376
Os nomes deste tile são "03311032210321" e "7829,6374,14" que em si têm codificado as coordenadas da imagen. No que se segue, vamos usar a codificação XYZ. O 14 no nome representa o nível de zoom (o X e o Y são as linhas e colunas de uma certa matriz).
Podemos então usar estes nomes para pedir mais imagens (ou mais gratículas) à função mosaic
. Vamos começar por pedir as gratículas do nível 15 e sobrepô-las à imagem I14.
D15 = mosaic("7829,6374,14", zoom=1, mesh=true)
Vector{GMTdataset} with 4 segments Showing first segment. To see other segments just type its element number. e.g. D[2] Comment: ["Zoom level = 16"] Attribute table ┌─────┬─────────────────┬────────────────┐ │ Row │ quadtree │ XYZ │ ├─────┼─────────────────┼────────────────┤ │ 1 │ 033110322103210 │ 15658,12748,15 │ │ 2 │ 033110322103212 │ 15658,12749,15 │ │ 3 │ 033110322103211 │ 15659,12748,15 │ │ 4 │ 033110322103213 │ 15659,12749,15 │ └─────┴─────────────────┴────────────────┘ BoundingBox: [-7.97607421875, -7.965087890625, 37.046408899699564, 37.05517710666082] Global BoundingBox: [-7.97607421875, -7.9541015625, 37.03763967977139, 37.05517710666082] PROJ: +proj=longlat +datum=WGS84 +units=m +no_defs Header: -W 5×2 GMTdataset{Float64, 2} Row │ Lon Lat ─────┼─────────────────── 1 │ -7.97607 37.0464 2 │ -7.97607 37.0552 3 │ -7.96509 37.0552 4 │ -7.96509 37.0464 5 │ -7.97607 37.0464[-7.97607421875, -7.965087890625, 37.046408899699564, 37.05517710666082] Global BoundingBox: [-7.97607421875, -7.9541015625, 37.03763967977139, 37.05517710666082] PROJ: +proj=longlat +datum=WGS84 +units=m +no_defs Header: -W 5×2 GMTdataset{Float64, 2} Row │ Lon Lat ─────┼─────────────────── 1 │ -7.97607 37.0464 2 │ -7.97607 37.0552 3 │ -7.96509 37.0552 4 │ -7.96509 37.0464 5 │ -7.97607 37.0464
Podemos ver que agora temos 4 quadrados pois aumentar um nível de zoom divide a área por dois e como pedimos os mesmos limites temos 4 vezes mais quadrados. Notem bem a novidade the agora termos usado "7829,6374,14", zoom=1. Ou seja, como delimitador da região usámos o mome to tile I14, e como zoom usámos 1, que significa adicionar 1 ao nível determinado pelo uso do nome 7829,6374,14.
Vejamos o que se obtem sobrepondo a gratícula e a image I14. E vamos usar mais uma novidade que é a de dizer que queremos os nomes dos tiles impressos na figura.
viz(I14, plot=(data=D15, lc=:red, lw=0.5, labels="attrib=XYZ"))