Pular para o conteúdo
Voltar ao blog
AI Agent
QGIS
Tutorial

Como georreferenciar um mapa ou imagem no QGIS

Published

Um mapa topográfico USGS de 1947 de São Francisco dividido em dois: à esquerda o escaneamento simples, à direita o mesmo mapa georreferenciado e sobreposto ao OpenStreetMap, a ponte da Baía continuando além da borda do mapa, sob o título Georeferencing in QGIS.
A folha San Francisco North de 1947, antes e depois. Mapa: USGS, domínio público. Mapa base: colaboradores do OpenStreetMap.

Para georreferenciar um mapa ou imagem no QGIS, abra Layer > Georeferencer, carregue o escaneamento com Open Raster, clique em pelo menos quatro pontos que você consegue identificar e digite as coordenadas reais deles, escolha Polynomial 1 e um CRS de destino projetado em Transformation Settings, depois pressione Start Georeferencing. O QGIS grava um GeoTIFF e o adiciona ao seu projeto.

Colocar os pontos é a parte fácil. A parte que a maioria dos tutoriais pula é avaliar o resultado, porque o número que o QGIS mostra pode ser zero em um mapa que está a centenas de metros de distância. Eu georreferenciei um mapa USGS de 1947 de São Francisco e medi cada resultado contra pontos que o ajuste nunca viu. Os números abaixo vêm desse teste.

A resposta curta

Sua entradaMétodoTempo ou custo
Um escaneamento com coordenadas impressas (graticule, marcas da grade, valores dos cantos)Método 1, digite os valores impressosGratuito. 8 pontos, depois um warp de 34 s em um escaneamento de 6.888 x 8.933 px
Um escaneamento sem coordenadas, ou uma foto de um mapaMétodo 1, From Map Canvas em um mapa baseGratuito. Planeje 10 pontos ou mais
Um GeoPDF da USGS ou de outra agênciaAbra diretamente, ele já está posicionadoGratuito, zero pontos
Pontos já lidos, e você quer que o ajuste seja verificado para vocêMétodo 2, um agente de IA1 mensagem, 99 s no meu teste
Uma sobreposição visual rápida, sem necessidade de precisãoMétodo 3, o plugin Freehand raster georeferencerPlugin gratuito

Antes de começar

Você precisa do QGIS 3.26 ou posterior, onde o Georeferencer fica no menu Layer. Eu usei o QGIS 3.44.7. Tutoriais mais antigos mandam você para Raster > Georeferencer, que é onde ele ficava antes, como o plugin GDAL Georeferencer.

Leia a margem do mapa antes de clicar em qualquer coisa. Ela diz três coisas que você vai digitar depois: o sistema de coordenadas dos valores impressos, o datum e a escala. Minha amostra é a quadrícula USGS San Francisco North, CA, de 1947, na escala 1:24.000, que qualquer pessoa pode baixar do topoView. A margem dela diz "Polyconic projection. 1927 North American datum", e os cantos trazem latitudes e longitudes a cada 7'30". Mapas históricos da USGS são de domínio público.

Para deixar o teste honesto, peguei o GeoTIFF da própria USGS dessa folha e removi o georreferenciamento, então o que carreguei no QGIS foi um JPEG simples de 9,2 MB com 6.888 x 8.933 pixels. Isso dá cerca de 300 dpi, ou 2,03 m de terreno por pixel. O georreferenciamento da USGS ficou de lado como gabarito.

Onde a web erra

"Quanto menor o RMSE, melhor o resultado." Não com uma thin plate spline. Essa transformação dobra a imagem até ela passar exatamente por todos os pontos, então os resíduos dela são sempre zero. Eu digitei uma latitude errada de propósito, 37°47' em vez de 37°47'30", e rodei as duas transformações nos mesmos oito pontos. A Polynomial 1 mostrou um RMSE de 297 m e atribuiu 762 m dele ao ponto errado. A thin plate spline mostrou 0,00 m, e o mapa estava até 594 m fora nos pontos que ela não recebeu.

"Digite as coordenadas em WGS 84." Os valores impressos em mapas americanos antigos geralmente estão em NAD27, e a margem diz isso. Em São Francisco, a mesma latitude e longitude em NAD27 e em WGS 84 ficam a 93 m de distância, 92 m deles de leste a oeste. Digite-as como EPSG:4326 e a folha inteira cai a um quarteirão de distância, com resíduos que parecem perfeitos, porque todos os pontos se moveram juntos. No diálogo Enter Map Coordinates, defina o CRS dos pontos como o que a margem indica: EPSG:4267 para NAD27.

"Deixe o CRS de destino em graus." Você pode, mas um ajuste afim plano em latitude e longitude não corresponde à forma como um mapa projetado foi desenhado. Com os mesmos oito pontos, a Polynomial 1 deu 2,98 m de RMSE com EPSG:4267 como destino, e 0,72 m com NAD27 / UTM zone 10N (EPSG:26710). Escolha um CRS projetado no datum do mapa, e o ajuste também passa a ser lido em metros.

Método 1: o Georeferencer do QGIS

Esta é a ferramenta embutida e a primeira que você deve aprender. Ela funciona para escaneamentos com coordenadas impressas e para escaneamentos sem elas.

Abrir o escaneamento

Layer > Georeferencer, depois File > Open Raster e escolha a imagem. JPEG, PNG e TIFF funcionam.

Adicionar um ponto de controle

Clique em Add GCP Point, dê zoom e clique em um local que você consiga identificar exatamente: um canto do quadro do mapa, uma cruz do graticule, uma marca da grade. O diálogo Enter Map Coordinates abre. Digite a coordenada impressa. Ele aceita graus, minutos e segundos com espaços (-122 25 0), graus decimais ou metros projetados. Defina o CRS abaixo dos campos como o que a margem indica.

Ou pegue a coordenada da tela do mapa

Quando o escaneamento não tem coordenadas, carregue primeiro um mapa base na janela principal do QGIS (o guia de mapa base mostra os cliques), depois pressione From Map Canvas e clique no mesmo local nele. O QGIS preenche as coordenadas e o CRS para você.

Distribua os pontos

Coloque um perto de cada canto e alguns no meio. Pontos agrupados em uma área ajustam aquela área e deixam o resto da folha derivar. Eu usei os quatro cantos do quadro do mapa e as quatro cruzes do graticule dentro dele.

Em cima: o Georeferencer com zoom na marca de 25 minutos do quadro do mapa, um ponto verde na marca. Embaixo: o diálogo Enter Map Coordinates com -122 25 0 e 37 52 30 digitados e EPSG:4267 NAD27 selecionado.
Um clique na marca de 25' da borda superior, e então o valor impresso digitado em graus, minutos e segundos, em NAD27.

Cada ponto que você adiciona vai para um arquivo .points ao lado da imagem. Guarde-o: o Georeferencer o carrega sozinho na próxima vez que você abrir o mesmo escaneamento, e você pode corrigir um ponto em vez de recomeçar.

Escolha a transformação

Settings > Transformation Settings guarda a escolha que mais importa. O manual do QGIS 3.44 lista sete transformações, com estas quantidades mínimas de pontos:

TransformaçãoMínimo de pontosUse para
Linear2Um escaneamento limpo que só precisa de um deslocamento e uma escala. Grava um world file, sem warp
Helmert2O mesmo, mais uma rotação
Polynomial 13A maioria dos escaneamentos planos de mapas impressos. Linhas retas continuam retas
Projective4Uma foto de um mapa tirada em ângulo
Polynomial 26Uma folha amassada ou dobrada. Distorce as bordas além dos seus pontos
Polynomial 310O mesmo, mais forte. Raramente vale a pena
Thin plate spline10 segundo o manualMapas danificados ou desenhados à mão, com muitos pontos. Esconde erros, veja acima

Minha regra: comece com Polynomial 1. Passe para algo mais flexível apenas quando os resíduos mostrarem um padrão, como todos os pontos de um lado puxando na mesma direção, e nunca porque um número maior parecia pior.

O diálogo Transformation Settings com Polynomial 1, CRS de destino EPSG:26710 NAD27 / UTM zone 10N, um arquivo de saída terminando em _modified.tif e reamostragem Cubic.
As configurações que usei: Polynomial 1, o datum do próprio mapa em um CRS projetado, reamostragem cúbica para um escaneamento mais suave.

Duas configurações nesse diálogo evitam problemas depois. Resampling method muda a aparência dos pixels transformados: nearest neighbour mantém as cores originais, cubic fica melhor em um escaneamento. E a saída não tem compressão por padrão: meu JPEG de 9,2 MB virou um GeoTIFF de 187 MB. Abra Raster creation options e escolha um perfil de compressão se o arquivo vai viajar.

Leia os resíduos

Quando você tiver mais pontos do que a transformação precisa, o QGIS mostra o resíduo de cada ponto na tabela de GCP e um erro médio na barra de status, ambos em pixels para um escaneamento sem coordenadas.

A janela do Georeferencer com o escaneamento San Francisco North de 1947 e oito pontos de controle vermelhos, a tabela de GCP listando coordenadas de origem e destino e resíduos entre 0,15 e 0,46 pixels, e a barra de status mostrando Transform: Polynomial 1 Mean error: 0.447243.
Oito pontos, Polynomial 1: resíduos de 0,15 a 0,46 pixels e um erro médio de 0,447 pixels, cerca de 0,9 m no terreno.

Para avaliar um valor em pixels, transforme-o em metros e compare com o que o próprio mapa pode oferecer.

  1. Metros por pixel. Multiplique o denominador da escala pelo tamanho de um pixel escaneado. A 300 dpi um pixel tem 0,0847 mm, então em um mapa 1:24.000 ele cobre 2,03 m. Meus 0,447 pixels são 0,9 m.
  2. O que o mapa pode prometer. Os US National Map Accuracy Standards exigem que 90 por cento dos pontos bem definidos em uma folha 1:24.000 estejam dentro de 1/50 de polegada, que a USGS informa como 12,2 m. Uma regra prática mais rígida é a largura de uma linha desenhada, 0,2 mm na folha, que dá 4,8 m em 1:24.000.
  3. Pontos que o ajuste nunca viu. Um resíduo só diz que os pontos concordam entre si. Eu deixei as oito marcas do graticule ao longo das bordas fora do ajuste e medi onde o resultado as colocou: 1,0 m de erro na média, 1,6 m no pior caso.

Então o georreferenciamento acrescentou cerca de um metro de erro a um mapa que só promete 12 m. Em uma folha antiga, o mapa quase sempre é o limite, não os seus cliques.

Start Georeferencing então gravou o GeoTIFF em 34 segundos e o adicionou ao projeto. No OpenStreetMap, as ruas de 1947 caem em cima das de hoje:

OpenStreetMap do bairro da Marina e do Fort Mason em São Francisco, e depois a mesma vista com o mapa USGS de 1947 georreferenciado a 55 por cento de opacidade, a Lombard Street e a linha da costa alinhadas (after)
OpenStreetMap do bairro da Marina e do Fort Mason em São Francisco, e depois a mesma vista com o mapa USGS de 1947 georreferenciado a 55 por cento de opacidade, a Lombard Street e a linha da costa alinhadas (before)
OpenStreetMapMapa de 1947
Arraste para comparar
A Marina e o Fort Mason, em São Francisco. Deslize para colocar a folha de 1947 sobre o mapa de hoje.

Use quando: você quer um resultado que pode defender, com resíduos, um arquivo .points e um GeoTIFF que qualquer GIS lê.

Pule quando: você só precisa de um plano de fundo aproximado por alguns minutos. O Método 3 é mais rápido para isso.

Método 2: pontos de controle verificados por um agente de IA

Nós construímos o AI Agent, um plugin gratuito do QGIS com um painel de chat que executa os passos no seu projeto aberto. Esta seção é sobre a nossa própria ferramenta. Ela tem uma ferramenta de georreferenciamento que recebe pontos de controle como pares de pixel e coordenada, ajusta uma das transformações do Georeferencer via GDAL e devolve o resíduo de cada ponto em metros, avaliado contra a escala do mapa.

Ela também pode posicionar um escaneamento sem nenhum ponto, lendo os nomes de lugares e comparando com mapas de referência: um mapa antigo de Edimburgo no guia do AI Agent caiu com um erro mediano de 5,9 m. Isso exige nomes legíveis, e folhas muito antigas costumam falhar. Para um mapa com graticule impresso, os pontos são o caminho mais seguro, e lê-los é rápido: uma imagem sem coordenadas fica no QGIS com a coluna do pixel como x e menos a linha como y, então a barra de status mostra o pixel sob o cursor. Carreguei o escaneamento, mantive o erro de digitação do teste acima no ponto 8 e enviei uma mensagem:

Georreferencie a camada sf-north-1947-scan. É a quadrícula USGS San Francisco North de 1947, escala 1:24.000, coordenadas em NAD27. Li estes pontos de controle no escaneamento (coluna do pixel, linha → latitude, longitude): 1. 1022, 792 → 37°52'30"N, 122°30'W (canto noroeste) [...] 8. 4632, 5344 → 37°47'N, 122°25'W. O resultado é preciso o suficiente para um mapa 1:24.000?

O processo levou 99 segundos, mostrados no painel como 14 ações. O agente leu a camada, ajustou os oito pontos em Python para verificá-los, descobriu que o ponto 8 estava a 925 m de onde sua linha o colocava, o deixou de fora e gravou o GeoTIFF a partir dos outros sete em NAD27 / UTM zone 10N.

Ele perguntou uma vez, antes de rodar a própria verificação em Python. A resposta dele deu um RMSE de 0,73 m com um máximo de 0,95 m contra uma tolerância de 4,8 m, e acrescentou que isso mede a concordância entre pontos, não a precisão absoluta do mapa.

O QGIS com o mapa de 1947 de São Francisco georreferenciado a 72 por cento de opacidade sobre o OpenStreetMap, e o painel do AI Agent à direita explicando que o ponto 8 foi excluído porque estava cerca de 925 m fora, o erro RMS de 0,73 m e a tolerância de 4,8 m.
Uma mensagem, 99 segundos: o erro de digitação no ponto 8 detectado e descartado, 0,73 m de RMSE nos outros sete, o resultado sobre o mapa base.

Verifiquei o GeoTIFF dele do mesmo jeito que o meu, nas oito marcas das bordas que ele nunca viu: 1,0 m de erro na média, 1,6 m no pior caso, o mesmo que o Georeferencer. A diferença é o erro de digitação. No Georeferencer eu teria que notá-lo na coluna de resíduos sozinho, e com uma thin plate spline eu não o teria notado de jeito nenhum.

Ele também deixou os pontos para trás como um arquivo .points ao lado da saída, então o mesmo ajuste abre no Georeferencer se você quiser mover um ponto manualmente. Cada mensagem deixa um checkpoint no painel, e um clique desfaz todo o processo. O plano gratuito tem 10 mensagens por mês, sem chave de API e sem cartão.

Use quando: você tem os pontos e quer o ajuste, a verificação de discrepantes e o veredito em uma única etapa, ou georreferencia uma série de folhas.

Pule quando: o mapa não tem nomes legíveis nem pontos que você consiga ler, como um esboço desenhado à mão. Colocar pontos manualmente no Método 1 é então o único caminho.

Experimente o AI Agent gratuitamente no QGIS

Método 3: uma sobreposição livre com um plugin

O plugin Freehand raster georeferencer, versão 0.8.3 quando li sua documentação, permite que você solte uma imagem no mapa e mova, gire e dimensione manualmente até ela se alinhar, como você faria no Google Earth. O resultado aparece imediatamente sobre as suas outras camadas, e o plugin exporta a imagem com um world file quando você termina.

O README dele é claro sobre os limites: apenas transformações afins, sem rubber sheeting, sem resíduos, e apenas arquivos BMP, JPEG, PNG e TIFF. Você não recebe nenhum número que diga o quanto está fora.

Use quando: você precisa de um projeto escaneado aproximadamente no lugar para traçar alguns elementos ou para mostrar a um cliente onde as coisas ficavam.

Pule quando: alguém vai medir sobre o resultado. Use o Método 1.

O que lembrar

  • No QGIS 3.26 ou posterior a ferramenta é Layer > Georeferencer. Comece com quatro pontos bem distribuídos, Polynomial 1 e um CRS de destino projetado no datum do próprio mapa.
  • Um RMSE de zero não prova nada: uma thin plate spline sempre o alcança, e no meu teste ela o alcançou em um mapa 594 m fora.
  • Converta os resíduos para metros (pixels x tamanho no terreno de um pixel) e compare-os com o que o mapa promete, 12,2 m para uma folha USGS 1:24.000.
  • Verifique o resultado em pontos que você deixou fora do ajuste. Os meus ficaram 1,0 m fora na média na folha de São Francisco de 1947.
  • Digite os pontos no datum que a margem indica. O NAD27 fica a 93 m do WGS 84 em São Francisco, então uma folha USGS de 1947 usa EPSG:4267.

Perguntas frequentes

Onde fica o Georeferencer no QGIS?

No QGIS 3.26 ou posterior ele fica em Layer > Georeferencer. Em versões mais antigas era Raster > Georeferencer, fornecido pelo plugin GDAL Georeferencer, que precisava ser habilitado no gerenciador de plugins. Se nenhum dos menus mostrar, um plugin ou um perfil de personalização pode ter alterado os seus menus.

De quantos pontos de controle eu preciso?

O mínimo é 2 para Linear e Helmert, 3 para Polynomial 1, 4 para Projective, 6 para Polynomial 2 e 10 para Polynomial 3, e o manual do QGIS pede 10 ou mais para uma thin plate spline. Na prática, use cerca do dobro do mínimo, distribuídos pelos cantos, e guarde alguns extras como checkpoints. Eu usei 8 para Polynomial 1 e mais 8 para verificar.

Polynomial, Helmert ou thin plate spline: qual usar?

Helmert para um escaneamento limpo e plano que só precisa de rotação e escala. Polynomial 1 para quase todo mapa impresso, já que ela também absorve um pequeno cisalhamento do scanner. Thin plate spline apenas para um mapa danificado ou desenhado à mão com muitos bons pontos, e então confira-a em pontos que você não usou, porque os resíduos dela são sempre zero.

O que é um bom RMSE?

Um que seja pequeno diante do que o mapa pode entregar. Converta-o para metros e compare com 0,2 mm vezes o denominador da escala (4,8 m em 1:24.000) ou com o padrão oficial do mapa (12,2 m para folhas USGS 1:24.000). Abaixo de um pixel em um escaneamento limpo é normal. Um único ponto com um resíduo muito acima dos outros geralmente é um erro de digitação ou um clique errado, não um mapa ruim.

Como eu georreferencio um PDF?

Primeiro verifique se ele já não está. Mapas topográficos da USGS e muitos projetos de agências são GeoPDFs, e o QGIS os abre no lugar: o PDF de 1947 de São Francisco carregou com as coordenadas e sem pontos de controle, renderizado pelo GDAL a 150 dpi a menos que você defina GDAL_PDF_DPI mais alto. Um PDF comum não tem coordenadas: exporte a página para PNG ou TIFF a 300 dpi, e então use o Método 1.

Como eu georreferencio um mapa sem coordenadas?

Use elementos que não se moveram desde que o mapa foi desenhado, como cruzamentos de estradas, pontes, igrejas e cantos da linha da costa, e escolha as coordenadas deles com From Map Canvas em um mapa base ou na sua ortofoto nacional. Distribua 10 ou mais deles pela folha. Espere resíduos maiores do que com uma grade impressa, porque o mapa antigo e o mundo de hoje não concordam mais em todos os lugares.

O hub de IA do QGIS reúne o que a IA pode e não pode fazer dentro do QGIS, e o guia do AI Agent cobre o resto do plugin. Depois que o mapa antigo estiver no lugar, você pode baixar dados do OpenStreetMap para compará-lo com as ruas de hoje, puxar uma imagem Sentinel-2 da mesma área ou transformar o escaneamento em vetores.

Experimente o AI Agent gratuitamente no QGIS