Como criar super-sobreposições com gdal2tiles

Mano Marks, equipe de APIs do Google Geo
Setembro de 2009

Objetivo

Este tutorial apresenta as noções básicas necessárias para criar uma supersobreposição, um conjunto de sobreposições de solo que usam NetworkLinks baseados na região e o utilitário de biblioteca de abstração de dados geoespaciais de código aberto.

Introdução

Navegadores geográficos como o Google Earth e o Google Maps fornecem imagens de satélite e blocos de mapas. No entanto, às vezes você pode querer usar o seu. As imagens ou dados de varredura têm várias formas e são usados muitas vezes.

  • Como colocar suas próprias imagens de satélite ou aéreas em um navegador geográfico
  • Posicionar mapas históricos em cima de imagens, como a camada Rumsey Maps no Google Earth
  • Importação de dados GIS em formato de varredura
  • Posicionar imagens LIDAR ou infravermelhas no geonavegador

No entanto, um dos problemas com os dados de varredura de alta resolução é que eles levam muita memória para serem exibidos. E se você está enviando por push na rede, também tem preocupações com largura de banda. Para resolver esse problema, você precisa criar blocos.

O agrupamento divide seu arquivo em várias imagens que são carregadas quando são visualizadas. Você cria uma imagem de baixa resolução para ser exibida enquanto o usuário diminui o zoom. Na mesma área, você cria quatro imagens de alta resolução para melhor visualização. Para cada área sobreposta por uma imagem, você cria mais quatro imagens de resolução mais alta para aumentar o zoom etc. Isso é conhecido como o método quadtree, e é assim que as imagens são ladrilhadas para o Google Earth e o Google Maps. O processo é explicado mais detalhadamente no artigo do Guia do desenvolvedor sobre KML em Regiões.

É possível fazer isso manualmente com um aplicativo de edição gráfica como o PhotoShop ou o GIMP da Adobe, mas isso pode ser complexo, tedioso e propenso a erros. Também há uma série de aplicativos bons disponíveis, principalmente para Windows, como SuperOverlay, Arc2Earth e MapCruncher combinados com CrunchUp2KML.

Se quiser automatizar o processo ou adicionar funcionalidade ao seu próprio aplicativo, a GDAL oferece um conjunto completo de ferramentas para trabalhar com dados de varredura e de vetor. Este artigo aborda as opções de linha de comando. No entanto, as bibliotecas também podem ser facilmente incorporadas aos seus próprios aplicativos. Para este tutorial, você usará os utilitários gdalinfo, gdal_translate, gdalwarp e gdal2tiles. A saída final é uma sobreposição.

Etapas da linha de comando

Há seis etapas para usar a GDAL na linha de comando.

  1. Fazer o download e instalar a GDAL
  2. Fazer o download de uma imagem
  3. Use gdalinfo para determinar informações sobre a imagem
  4. Use gdal_translate para fazer referência geográfica à imagem
  5. Use gdalwarp para mudar a projeção da imagem
  6. Use gdal2tiles para dividir a imagem em blocos e criar o código KML associado

Etapa 1: fazer o download e instalar a GDAL

Para começar, faça o download e instale a GDAL conforme detalhado aqui.

Etapa 2: fazer o download de uma imagem

É possível usar qualquer imagem. Há várias fontes de dados geográficos na Web. Você pode usar qualquer um deles, mas deve conhecer os limites da imagem: a latitude e a longitude de cada um dos cantos. Este tutorial usa uma imagem da Blue Marble, disponível para download no site da NASA. Essas imagens foram tiradas em 2004 e apresentam uma bela imagem da Terra vista do espaço. Escolha um dos arquivos no canto inferior direito da barra de navegação direita.

Se você estiver usando sua própria imagem e souber que ela já foi georetificada, pule para a etapa 5. Caso contrário, prossiga para a Etapa 3.

Etapa 3: receber informações sobre a imagem

Depois de instalar as bibliotecas da GDAL e selecionar a imagem, você precisa de algumas informações para usar como referência geográfica. Especificamente, você precisa das posições de pixel e linha de cada canto da imagem. Se você imaginar a imagem como uma tabela, com colunas e linhas, os pixels serão as colunas e as linhas serão linhas.

A GDAL oferece um utilitário útil, o gdalinfo, para capturar essas informações. Na linha de comando, simplesmente digite gdalinfo filename, substituindo filename pelo caminho do arquivo. A resposta será semelhante a esta:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

As informações importantes deste tutorial são as linhas superior esquerda, inferior esquerda, superior direita, inferior direita. Elas informam os valores de pixel e linha de cada canto. O canto superior esquerdo, nesse caso, está em 0,0, e o inferior direito está em 21600,10800.

Etapa 4: fazer referência geográfica à imagem

Nesse caso, a referência geográfica significa criar metadados que descrevem a posição geográfica de cada um dos cantos da imagem. Usando as informações adquiridas na etapa 3 e gdal_translate, é possível atribuir informações de referência geográfica ao arquivo. Isso cria um arquivo VRT da imagem world_200401.jpg (bluemarble1.vrt). Os arquivos VRT são arquivos XML que contêm as informações sobre uma transformação específica. Neste caso, a etapa gdal_translate. Você vai usá-lo novamente na próxima etapa para criar seu conjunto final de blocos. gdal_translate permite fazer vários tipos de saída de arquivo, incluindo os principais formatos de arquivo de imagem. O uso das saídas VRT permite que você suspenda a criação de arquivos de saída até a última etapa. Isso aumenta a eficiência e diminui o tempo de espera por etapas individuais, caso você esteja usando a linha de comando. Veja o comando que você deve executar:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

Como há muitas informações sobre essa linha, ela é dividida:

  • -of é o formato de saída. Neste caso, VRT.
  • O -a_srs atribui um sistema de referência espacial ao arquivo. Isso informa a um aplicativo que consome o sistema de coordenadas usado. Nesse caso, ele usa EPSG:4326, que é o mesmo que WGS84, o sistema de coordenadas usado pelo Google Earth.
  • -gcp, ou ponto de controle de solo, atribui coordenadas a posições no arquivo. Nesse caso, você só precisa de três pontos, já que a imagem é um retângulo e, portanto, o quarto ponto pode ser facilmente identificado. Para -gcp, defina o gcp definindo o pixel e o número da linha, depois a longitude e a latitude. Cada um deles é separado por um espaço.
  • Os dois últimos parâmetros são o arquivo de origem e o arquivo de destino.

Etapa 5: distorcer a imagem

A imagem original não foi criada para ser um globo redondo, mas para parecer nivelada. Em termos de SIG, ele é projetado, o que significa que é uma representação bidimensional de um objeto tridimensional. A projeção requer a distorção da imagem para que pareça como você esperaria uma imagem plana da Terra.

Para que ela fique correta, é necessário deformá-la para se ajustar ao globo. A GDAL também é uma ótima ferramenta. Basta digitar gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt. Isso criará um novo arquivo, o Bluemarble2.vrt, que fornece metadados sobre o procedimento de distorção.

Etapa 6: criar os blocos

Você está quase terminando, mas esta parte levará mais tempo. Para criar os blocos, digite gdal2tiles.py -p geodetic -k bluemarble2.vrt. O -k força uma saída KML. Isso vai criar uma estrutura de diretórios com uma supersobreposição. Como cada um desses arquivos de imagem precisa ser criado separadamente, leva algum tempo para ser executado. Agora, para imagens grandes, você pode pegar um café, tirar uma soneca ou talvez comer uma refeição leve. Quando terminar, abra o doc.kml e observe os resultados.

Conclusão

Este tutorial aborda o que a GDAL pode fazer, mas oferece um mecanismo conveniente para gerar blocos. As principais bibliotecas da GDAL são escritas em C++, mas elas fornecem vinculações para Perl, Python, VB6, R, Ruby, Java e C#/.NET, o que significa que você pode incorporar facilmente a GDAL aos seus aplicativos. Além disso, muitos dos utilitários, incluindo gdal2tiles, são escritos em Python, facilitando a incorporação deles em aplicativos Python. O gdal2tiles também pode gerar páginas da API Google Maps e da OpenLayer.