ForesstGIS_topo_2027
Posted in

Como criar QR Codes dinâmicos no ArcGIS Pro e no QGIS para abrir o Google Maps

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…

image

É 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çãoArcGIS ProQGIS
Série de mapasSpatial Map SeriesAtlas
Elemento do layoutDynamic PicturePicture
Controle dinâmicoArcadeData Defined Override
Geometria da página$feature@geometry
CentroideCentroid()centroid()
Transformação de CRSMais simples com camada em EPSG:4326transform() na expressão
QR externoQR ServerQR Server
Exportação em loteMap SeriesAtlas

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.

Gostou? Compartilhe

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *