QR Codes podem ser muito úteis em mapas florestais, mapas operacionais, inventário, utilities e inspeções de campo.
A ideia é simples: cada página do mapa recebe um QR Code diferente. Ao escanear o código com o celular, o usuário abre uma localização específica no Google Maps.
O melhor é que isso pode ser automatizado a partir da própria geometria da feição. Em vez de gerar manualmente uma imagem para cada talhão, o GIS monta a URL e usa essa URL para carregar o QR Code no layout.
Neste tutorial, vamos fazer isso no:
- ArcGIS Pro, usando Spatial Map Series e Dynamic Picture;
- QGIS, usando Atlas e Picture Item.
Não é necessário criar um campo com a imagem do QR Code.
O que vamos gerar
Para cada talhão, stand ou outra feição, o GIS vai gerar uma URL do Google Maps neste formato:
https://www.google.com/maps/dir/?api=1&destination=-23.550520,-46.633308
Essa URL será transformada em uma imagem PNG de QR Code.
O QR Code, portanto, não armazena uma imagem nem uma coordenada especial. Ele simplesmente armazena a URL do Google Maps.
A documentação oficial do Google Maps define esse formato de URL e informa que api=1 é obrigatório. Também permite usar latitude e longitude como destino.
Antes de começar: latitude e longitude
Este é o ponto que mais costuma causar problemas.
Google Maps espera coordenadas geográficas em latitude/longitude. Portanto, não podemos assumir que os valores X e Y da sua camada já estejam nesse formato.
Uma camada UTM, por exemplo, normalmente terá coordenadas em metros:
X = 542381
Y = 7462912
Esses valores não podem ser enviados diretamente ao Google Maps.
Precisamos chegar a algo como:
longitude = -46.633308
latitude = -23.550520
O ideal é sempre confirmar o CRS da camada antes de montar o QR Code.
Parte 1 — ArcGIS Pro
1. Crie um Spatial Map Series
Abra ou crie seu layout no ArcGIS Pro.
Depois configure:
Insert → Map Series → Spatial
No Spatial Map Series, defina:
Map
O map frame que será usado no layout.
Index Layer
A camada que contém os talhões, stands ou outras feições que determinarão as páginas.
Name Field
O campo que identifica cada feição.
O Spatial Map Series cria uma página para cada feição da Index Layer e fornece o contexto necessário para elementos dinâmicos do layout. A documentação da Esri descreve especificamente o uso de Dynamic Pictures nesse contexto.
2. Insira um Dynamic Picture
Este detalhe é essencial.
No layout, use:
Insert → Picture → Dynamic Picture
Não use simplesmente um Picture estático.
A Esri documenta que Dynamic Pictures podem ser usadas em Spatial Map Series e que a imagem pode ser definida por um campo da Index Layer ou por uma expressão Arcade.
Depois de inserir o Dynamic Picture, abra suas propriedades.
A ideia é fazer com que a expressão retorne a URL da imagem do QR Code correspondente à página atual.
3. Expressão Arcade
Use a seguinte expressão:
var p = Centroid($feature, "labelpoint");
var lat = Text(p.y, "0.########");
var lon = Text(p.x, "0.########");
var gmaps =
"https://www.google.com/maps/dir/?api=1" +
"&destination=" +
UrlEncode(lat + "," + lon);
var qr =
"https://api.qrserver.com/v1/create-qr-code/?" +
"size=240x240" +
"&margin=8" +
"&ecc=M" +
"&data=" +
UrlEncode(gmaps);
return qr;
Centroid() é uma função nativa do Arcade, e UrlEncode() também faz parte da linguagem Arcade.
O QR Server documenta exatamente o padrão usado aqui:
https://api.qrserver.com/v1/create-qr-code/?data=[URL-encoded-text]&size=[pixels]x[pixels]
e retorna uma imagem PNG.
4. Por que estamos usando labelpoint
Para um polígono, o centro geométrico nem sempre é um bom ponto de destino.
Em um talhão irregular, por exemplo, o centroide pode ficar em uma área sem acesso ou até fora da parte útil da propriedade.
Por isso, neste exemplo usamos:
Centroid($feature, "labelpoint")
O objetivo é obter um ponto representativo associado à feição, em vez de assumir que o centro matemático é sempre o melhor ponto operacional.
Para mapas onde a posição de entrada realmente importa, o ideal é usar um ponto de acesso real armazenado na camada em vez de qualquer centroide.
5. Importante: o CRS da camada
A expressão acima pressupõe que p.x e p.y já estejam em longitude e latitude.
Ou seja, para esse procedimento simples, a feição precisa estar em:
WGS 84
EPSG:4326
Nesse caso:
X = longitude
Y = latitude
Se sua Index Layer estiver em UTM ou outro CRS projetado, não copie os valores X/Y diretamente para o Google Maps.
A solução mais simples para esse tutorial é criar uma cópia da camada em WGS 84 (EPSG:4326) e usar essa camada como Index Layer.
Essa abordagem é simples, previsível e evita esconder uma transformação de CRS dentro da expressão.
6. Como a URL é construída
Suponha que a feição produza:
latitude = -23.550520
longitude = -46.633308
A expressão monta:
https://www.google.com/maps/dir/?api=1&destination=-23.550520,-46.633308
Depois essa URL é codificada e enviada ao serviço do QR Code.
O resultado é uma URL de imagem semelhante a:
https://api.qrserver.com/v1/create-qr-code/?size=240x240&margin=8&ecc=M&data=...
O QR Server documenta esse endpoint e o parâmetro data.
7. Exporte o Map Series
Depois de testar uma página:
Share → Export Layout
e exporte o Map Series.
Cada página utilizará sua própria feição da Index Layer.
Como o Dynamic Picture é vinculado ao contexto da página, o QR Code muda junto com o talhão. A Esri documenta esse comportamento especificamente para Spatial Map Series.
Parte 2 — QGIS
No QGIS, o conceito é parecido, mas a implementação é diferente.
Aqui usaremos:
Atlas
+
Picture Item
+
Data Defined Override
O Atlas itera pelas feições da Coverage Layer e gera uma página para cada uma delas.
8. Configure o Atlas
Abra:
Project → New Print Layout
Crie o layout normalmente.
Depois configure o Atlas e marque:
Generate an atlas
Em:
Coverage layer
selecione sua camada de talhões, stands ou outra camada que deverá determinar as páginas.
O QGIS usa essa Coverage Layer para iterar pelas feições e gerar as páginas do Atlas.
9. Adicione um Picture
No Layout, selecione:
Add Picture
Desenhe o espaço onde o QR Code deverá aparecer.
No painel:
Item Properties → Main Properties
localize:
Image Source
O QGIS permite usar uma URL remota como fonte de uma imagem. Também é possível definir essa fonte usando o botão Data Defined Override.
10. Use Data Defined Override
Ao lado de Image Source, clique no botão:
Data Defined Override
Depois:
Edit…

É aqui que vamos colocar a expressão.
O QGIS documenta esse mecanismo como forma de alterar dinamicamente propriedades de layout com base em dados e expressões.
11. Expressão QGIS
Use:
with_variable(
'p',
centroid(
transform(
@geometry,
@layer_crs,
'EPSG:4326'
)
),
with_variable(
'lat',
to_string(y(@p)),
with_variable(
'lon',
to_string(x(@p)),
with_variable(
'gmaps',
'https://www.google.com/maps/dir/?api=1&destination='
|| @lat
|| ','
|| @lon,
'https://api.qrserver.com/v1/create-qr-code/?'
|| 'size=240x240'
|| '&margin=8'
|| '&ecc=M'
|| '&'
|| url_encode(
map(
'data',
@gmaps
)
)
)
)
)
)
Esta expressão faz duas coisas importantes.
Primeiro, transforma a geometria para:
EPSG:4326
antes de extrair X e Y.
A função transform() do QGIS aceita uma geometria, CRS de origem e CRS de destino.
Segundo, usa corretamente url_encode().
No QGIS atual, url_encode() recebe um map, e o resultado é uma query string codificada. Por isso usamos:
url_encode(
map(
'data',
@gmaps
)
)
Isso produz algo equivalente a:
data=https%3A%2F%2Fwww.google.com%2F...
que é exatamente o que precisamos para o parâmetro data do QR Server.
12. Por que o QGIS pode trabalhar com o CRS original
Aqui existe uma vantagem sobre o exemplo simples do ArcGIS.
No QGIS podemos fazer:
transform(
@geometry,
@layer_crs,
'EPSG:4326'
)
Portanto, uma camada originalmente em UTM, por exemplo, pode continuar no seu CRS original.
A expressão transforma a geometria somente durante o cálculo do QR Code.
Isso é uma função oficialmente documentada do mecanismo de expressões do QGIS.
13. Centroide ou ponto dentro do talhão?
O exemplo usa:
centroid()
Isso gera o centro geométrico.
Mas o centro geométrico nem sempre é o melhor ponto operacional.
O QGIS possui também:
point_on_surface()
que retorna um ponto garantidamente localizado na superfície da geometria.
Portanto, para um QR que simplesmente identifica a localização do talhão, você pode trocar:
centroid(
transform(
@geometry,
@layer_crs,
'EPSG:4326'
)
)
por:
point_on_surface(
transform(
@geometry,
@layer_crs,
'EPSG:4326'
)
)
Isso é particularmente útil para polígonos muito irregulares.
Ainda assim, nenhum dos dois representa necessariamente o melhor acesso rodoviário.
Para navegação de campo, um ponto de entrada real é superior.
14. Gere o Atlas
Depois de configurar o Picture:
Atlas → Preview Atlas
Passe pelas páginas e confirme que o QR muda conforme a feição.
Depois:
Atlas → Export Atlas as PDF
O QGIS irá gerar uma página para cada feição da Coverage Layer.
ArcGIS Pro x QGIS
| Função | ArcGIS Pro | QGIS |
|---|---|---|
| Série de mapas | Spatial Map Series | Atlas |
| Elemento do layout | Dynamic Picture | Picture |
| Controle dinâmico | Arcade | Data Defined Override |
| Geometria da página | $feature | @geometry |
| Centroide | Centroid() | centroid() |
| Transformação de CRS | Mais simples com camada em EPSG:4326 | transform() na expressão |
| QR externo | QR Server | QR Server |
| Exportação em lote | Map Series | Atlas |
Um detalhe importante sobre o Google Maps
O QR Code não garante que o aplicativo Google Maps será aberto imediatamente em todos os aparelhos.
O que estamos gerando é uma Google Maps URL HTTPS válida.
O Google documenta que essas URLs são projetadas para funcionar em diferentes plataformas. Quando usadas sem origin, o destino pode ser combinado com a localização atual do dispositivo, quando disponível.
Para navegação, podemos usar:
https://www.google.com/maps/dir/?api=1&destination=LAT,LON
O parâmetro destination aceita coordenadas latitude/longitude.
Também existe:
dir_action=navigate
que pode solicitar navegação, embora o próprio Google ressalve que isso depende do produto/plataforma e da disponibilidade do recurso.
Por isso, para um mapa distribuído a clientes, a formulação correta é:
“escaneie para abrir a localização no Google Maps”
e não:
“escaneie para abrir automaticamente o aplicativo Google Maps em qualquer celular”.
O método completo
O processo fica assim:
Talhão / Stand
↓
Map Series ou Atlas
↓
Geometria da feição
↓
Transformação para WGS 84
↓
Latitude + Longitude
↓
Google Maps URL
↓
QR Server
↓
Imagem PNG do QR
↓
Layout
↓
PDF final
O resultado é um mapa onde cada página possui um QR Code diferente, associado à localização da feição daquela página.
Não é necessário criar manualmente centenas de imagens.
O ponto que realmente importa em mapas florestais
Embora um centroide seja suficiente para demonstrar o conceito, ele não é necessariamente o melhor destino para uma equipe de campo.
Imagine um talhão de 80 hectares atravessado por uma estrada apenas no limite sul.
O centro do polígono pode estar a centenas de metros da estrada.
Nesse caso, um QR que aponta para o centro do talhão funciona tecnicamente, mas não resolve o problema operacional.
Uma solução melhor é armazenar ou calcular um ponto de acesso e usar esse ponto no QR Code.
O QR continua sendo exatamente o mesmo conceito.
Apenas mudamos a coordenada de destino.
Conclusão
ArcGIS Pro e QGIS conseguem gerar QR Codes dinamicamente em mapas seriados, mas cada plataforma faz isso de uma maneira diferente.
No ArcGIS Pro, o caminho correto é:
Spatial Map Series → Dynamic Picture → Arcade
No QGIS:
Atlas → Picture → Data Defined Override → Expressão
Em ambos os casos, o QR Code pode apontar para uma Google Maps URL construída a partir da geometria da feição.
O cuidado principal é garantir que a coordenada enviada ao Google esteja em latitude/longitude WGS 84.
Para mapas florestais e operacionais, o próximo nível é substituir o centroide pelo ponto real de acesso ao talhão. É aí que o QR deixa de ser apenas um recurso visual e passa a ser realmente útil para equipes de campo.
