Pular para o conteúdo
AI Agent
QGIS
Tutorial

Calculadora de campo QGIS: 24 expressões testadas e as armadilhas

Publicado em

Para calcular uma coluna no QGIS, abra a tabela de atributos da camada, clique no ícone da Field Calculator (Calculadora de campo, Ctrl+I), escolha um campo novo ou existente, digite uma expressão e clique em OK. Essa parte é rápida. O difícil é quando a expressão roda sem erro e grava NULLs, graus quadrados ou a classe errada.

Em 7 de novembro de 2026, executei 24 expressões da calculadora de campo em camadas reais do OpenStreetMap de Indiranagar e bairros vizinhos em Bengaluru, na Índia (8.709 edificações, 854 vias, 35 escolas, 37 pontos de ônibus, 10 distritos), e rodei ao lado de cada uma a versão errada mais comum. Abaixo está o livro de receitas com os valores exatos de saída, as armadilhas silenciosas medidas contra uma referência elipsoidal e o que aconteceu quando entreguei as três mais difíceis a um agente de IA dentro do QGIS.

O que é a calculadora de campo do QGIS?

A calculadora de campo do QGIS é a ferramenta nativa que cria ou atualiza colunas da tabela de atributos usando expressões do QGIS. Ela calcula valores de geometria como área, comprimento e coordenadas, reescreve texto, classifica linhas com CASE WHEN e traz contagens ou distâncias de outras camadas do seu projeto.

Na verdade, o QGIS oferece quatro lugares para rodar as mesmas expressões, e escolher o errado é a primeira forma de perder trabalho:

  • A janela Field Calculator (Ctrl+I): edita a camada no próprio lugar. Você pode criar uma coluna nova ou sobrescrever uma existente, em todas as feições ou só nas selecionadas. As alterações ficam no buffer de edição até você salvar as edições.
  • Um campo virtual (caixa de seleção dentro da janela): calcula a expressão na hora, toda vez que você abre a tabela ou desenha o mapa. Quando dobrei a área da edificação fid 27 na minha camada de teste, a coluna de área normal ficou em 197.355, enquanto o campo virtual passou para 789.418. O problema é que o campo virtual fica no arquivo de projeto .qgs, não no GeoPackage ou no Shapefile. Abra o arquivo num projeto novo e a coluna some.
  • A ferramenta de Processamento "Field calculator" (native:fieldcalculator): grava uma camada de saída nova e não mexe na camada original. Use em modelos ou quando não quiser editar no lugar. Cuidado com @row_number, que começa em 0 aqui e em 1 na janela.
  • A barra de cálculo rápido no topo da tabela de atributos: atualiza uma coluna existente sem abrir a janela completa, boa para uma fórmula curta quando você já está em modo de edição.

Como calcular um campo passo a passo

Abra a Field Calculator

Clique com o botão direito na camada e escolha Open Attribute Table, depois clique no ícone de ábaco na barra de ferramentas da tabela de atributos. Com a camada selecionada no painel Layers, Ctrl+I abre a Field Calculator direto.

Confira a seleção e as configurações do campo

Se houver feições selecionadas no mapa, Only update N selected feature(s) vem marcada por padrão. Desmarque se quiser calcular a camada inteira. Escolha Create a new field (ou Update existing field), defina o Output field name e escolha o Output field type (Decimal number (real) para áreas e comprimentos com casas decimais, Integer para contagens inteiras, Text (string) para rótulos e classes).

Escreva a expressão e confira o Preview

Digite a expressão no editor da esquerda, ou busque na lista de funções do meio e dê um clique duplo para inserir. Sempre confira a linha Preview abaixo do editor antes de clicar em OK. Se ela mostrar um erro, NULL ou um número parecido com 0.0000003, corrija a expressão antes de gravá-la em 8.000 linhas.

Clique em OK e salve as edições

Clique em OK. Se a camada não estava em modo de edição, o QGIS avisa que vai ativá-lo automaticamente. Quando o cálculo terminar, clique no ícone de disquete Save Edits na barra de ferramentas da tabela de atributos para gravar a coluna em disco.

Aqui está a janela na camada de vias, pronta para gravar uma classe de via:

A janela Field Calculator do QGIS na camada de vias de Bengaluru, com Only update 39 selected features marcada, um novo campo de texto chamado road_rank, uma expressão CASE WHEN que classifica vias primary e secondary como arterial e o Preview mostrando arterial.
A janela Field Calculator no QGIS 3.44. Repare na caixa no canto superior esquerdo: como 39 vias estavam selecionadas no mapa, só essas 39 linhas serão calculadas.

Quando você não sabe o nome de uma função, use a caixa de busca acima da coluna do meio. Ela filtra a árvore de funções e abre a documentação à direita, com a ordem dos parâmetros e exemplos.

O construtor de expressões da Field Calculator do QGIS na camada de distritos, buscando overlay_contains na lista de funções, com o painel da direita mostrando a sintaxe e os argumentos de overlay_contains e o preview retornando 18.
Buscando overlay_contains na lista de funções. O Preview embaixo mostra 18 escolas dentro do distrito selecionado antes de você rodar o cálculo.

O livro de receitas de expressões testadas

Todas as expressões abaixo foram executadas no QGIS 3.44.15 em 7 de novembro de 2026, nas nossas camadas OpenStreetMap de Bengaluru (armazenadas em EPSG:4326, elipsoide do projeto WGS 84). Se precisar de dados de teste para a sua região, nosso guia sobre como baixar dados do OpenStreetMap no QGIS mostra como obter edificações, vias e pontos de forma limpa.

Os exemplos de saída das edificações vêm das edificações fid 27, 28, 30, 60 e 62 (que têm endereço e número de pavimentos) e fid 1, 2 e 3 (que não têm nenhum dos dois).

Área, comprimento, perímetro e coordenadas

O que você querExpressão para colarResultado testado na amostraVersão errada comum (e o que acontece)
Área da edificação em m² (elipsoidal)$area197.35, 110.86, 141.11, 219.71, 318.83area($geometry) retorna 0.0 (cerca de 3e-7 graus quadrados), sem erro
Área da edificação em m² (projetada em UTM 43N)area(transform($geometry, 'EPSG:4326', 'EPSG:32643'))197.60, 110.99, 141.29, 219.98, 319.22Transformar para 'EPSG:3857' (Web Mercator) infla a área em +5,95% aqui
Comprimento da via em metros (elipsoidal)$length616.34, 7.99, 1104.32, 9.14, 72.24length($geometry) retorna 0.005681, 0.000074 (graus), sem erro
Comprimento da via em metros (projetado em UTM 43N)length(transform($geometry, 'EPSG:4326', 'EPSG:32643'))616.72, 7.99, 1105.01, 9.14, 72.29Transformar para 'EPSG:3857' infla o comprimento das vias em +3,03% na mediana
Perímetro da edificação em metros$perimeter56.72, 44.97, 48.60, 61.54, 72.69perimeter($geometry) retorna graus numa camada EPSG:4326
X do centroide do polígono (Leste em metros)x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643')))786714.46, 786437.79, 786237.28$x num polígono retorna NULL sem erro; x_at($geometry, 0) retorna o primeiro vértice (77.642744), não o centro
Y do centroide do polígono (Norte em metros)y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643')))1435359.45, 1435116.32, 1436699.32y(centroid($geometry)) retorna graus (12.97...) quando a camada está em EPSG:4326
Número da linha ou ID da feição@row_number ou $id1, 2, 3, 4 (janela) ou 27 para $id no fid 27@row_number começa em 1 na janela da interface, mas começa em 0 no native:fieldcalculator do Processamento

Se você gravar $area num campo de saída Integer em vez de Decimal number (real) (testado com o Field calculator do Processamento), o QGIS arredonda para o inteiro mais próximo (197.35 vira 197, 110.86 vira 111) em vez de truncar.

Classes condicionais (CASE WHEN e tratamento de NULL)

O que você querExpressão para colarResultado testado na amostraVersão errada comum (e o que acontece)
Classe de tamanho a partir da áreaCASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' ENDmedium, medium, medium, medium, largeNão testado
Trocar pavimentos NULL por um inteiro padrãocoalesce(to_int("building:levels"), 1)4, 4, 2, 4, 3 (e 1 onde os pavimentos são NULL)"building:levels" + 'a' retorna '4a' porque as tags do OSM são armazenadas como texto
Classe de altura com os NULLs separadosCASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' ENDmid, mid, low, mid, mid (e unknown para o fid 1)Pular o WHEN ... IS NULL manda toda linha vazia para o ELSE, rotulando 7.636 edificações sem dado como 'high'

Limpeza de texto, formatação e datas

O que você querExpressão para colarResultado testado na amostraVersão errada comum (e o que acontece)
Juntar número e rua com segurançaconcat("addr:housenumber", ' ', "addr:street")'594 12th Main Road', '83/4 13th Main Road' (' ' se ambos forem NULL)"addr:housenumber" || ' ' || "addr:street" retorna NULL se qualquer uma das colunas for NULL
Remover o sufixo (Road, Main, Cross) do nome da viaregexp_replace("name", '\\s+(Road|Main|Cross)$', '')'Chinmaya Mission Hospital', '13th Main', '12th Main'Uma barra invertida só, \s+, falha com Invalid regular expression '?+(Road|Main|Cross)$'
Completar um ID com zeros até 12 dígitoslpad(to_string("osm_id"), 12, '0')'000313829229', '000313835091'Não testado
Formatar um número para exibiçãoformat_number($area, 1)'197,4', '110,9' ('3 958,7' para 3958.7 num Mac com vírgula decimal)A saída é texto que segue a localidade do sistema (vírgula decimal e espaço fino inseparável), então não dá para fazer contas com ela depois
Dias entre duas datasday(age(to_date('2026-11-07'), to_date('2019-03-15')))2794age(...) sozinho retorna um objeto QgsInterval; to_date('07/11/2026') falha a menos que você passe 'dd/MM/yyyy' como segundo argumento

Cuidado também com o tamanho do campo de saída ao gravar texto num GeoPackage ou Shapefile. Quando executei concat("addr:housenumber", ' ', "addr:street") num campo de texto de tamanho 40 no Processamento, a execução inteira foi abortada sem saída, porque uma via (" 80 Feet Road(Sir C.V. Raman Hospital Road)") tinha 43 caracteres.

Contagens, somas e distância ao mais próximo entre camadas

Estas expressões permitem que uma camada consulte outra do seu projeto sem rodar uma junção espacial no QGIS à parte.

O que você querExpressão para colarResultado testado na amostraVersão errada comum (e o que acontece)
Contar edificações que tocam cada distritoaggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent)))4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139Esquecer o filter:=... dá a cada distrito a contagem total da camada inteira (8709), sem erro
Área total de edificações em ha por distritoround(aggregate('buildings', 'sum', $area, filter:=intersects($geometry, geometry(@parent))) / 10000, 3)0.565, 20.292, 5.605, 59.116, 1.037, 14.094, 16.646, 7.991, 21.39, 1.7Soma as áreas inteiras das edificações que tocam o limite, então as da divisa entram nos dois distritos
Contar escolas dentro de cada distritoarray_length(overlay_contains('schools', "osm_id"))0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (soma: 35)overlay_contains('schools') sem o segundo argumento retorna true ou false, não uma contagem
Distância em metros até o ponto de ônibus mais próximodistance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(array_first(overlay_nearest('bus_stops', $geometry)), 'EPSG:4326', 'EPSG:32643'))125.17, 49.39, 199.59, 158.39, 187.97, 74.67, 123.00, 226.61distance($geometry, array_first(overlay_nearest('bus_stops', $geometry))) retorna 0.001142 (graus)
Contar pontos de ônibus a até 300 m de uma edificaçãoaggregate('bus_stops', 'count', "osm_id", filter:=distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(geometry(@parent), 'EPSG:4326', 'EPSG:32643')) <= 300)1, 1, 4, 2, 2, 6, 7, 7array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)) retorna 37 (todos os pontos) porque 300 é lido como 300 graus

Cinco armadilhas da calculadora de campo que falham sem erro

Li 70 comentários de pedido de ajuda em tutoriais de QGIS no YouTube: 48 eram dúvidas reais sobre como escrever uma expressão, e 8 delas eram sobre uma expressão inválida, que retorna NULL ou não seleciona nada. O pior caso é aquele sobre o qual ninguém pergunta, porque a expressão roda e grava números plausíveis. Aqui estão as cinco armadilhas que medimos nos nossos dados de Bengaluru.

1. $area vs area($geometry), e o que o elipsoide do projeto faz

$area e area($geometry) não fazem o mesmo cálculo, e pelo menos um tutorial de 2026 diz que $area retorna graus quadrados num SRC geográfico. Não retornou, em nenhuma das duas configurações de projeto que testamos. Em 7 de novembro de 2026 medimos os dois, além de transform(), nas primeiras 200 edificações e 200 vias das nossas camadas EPSG:4326 de Bengaluru, contra uma referência elipsoidal WGS 84 (QgsDistanceArea).

  • $area e $length usam o elipsoide do projeto (definido em Project > Properties > General > Measurements). Quando o elipsoide é WGS 84, $area retorna metros quadrados precisos mesmo com a camada e o projeto em graus (EPSG:4326).
  • Quando o elipsoide do projeto está em None / Planimetric, $area na nossa camada EPSG:4326 ainda assim não retornou graus quadrados. No QGIS 3.44.15 retornou metros quadrados +3,24% acima do valor real nas 200 edificações.
  • area($geometry) e length($geometry) são sempre planimétricos no SRC da própria camada. Numa camada EPSG:4326, area($geometry) retorna graus quadrados (cerca de 0.0000003 para uma casa), que arredonda para 0.0 numa coluna decimal padrão.
  • Transformar para Web Mercator (EPSG:3857) antes de area() infla cada edificação em +5,95%, mesmo na latitude de Bengaluru (13° N), e infla o comprimento das vias em +3,03%. Transformar para a zona UTM local (EPSG:32643) fica dentro de +0,12% da área elipsoidal.
Expressão em camadas EPSG:4326 (n = 200 edificações, 200 vias)Erro mediano vs elipsoide WGS 84Erro máximo
$area (elipsoide do projeto WGS 84)0.00%0.00%
$area (elipsoide do projeto None)+3.24%+3.25%
$perimeter (elipsoide do projeto None)+1.72%+2.25%
$length nas vias (elipsoide do projeto None)+1.31%+2.61%
area($geometry)-100.00% (graus quadrados)-100.00%
length($geometry) nas vias-100.00% (graus)-100.00%
area(transform($geometry, 'EPSG:4326', 'EPSG:32643'))+0.12%+0.12%
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) nas vias+0.06%+0.06%
area(transform($geometry, 'EPSG:4326', 'EPSG:3857'))+5.95%+5.96%
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) nas vias+3.03%+3.26%

Se não estiver claro por que EPSG:4326, EPSG:3857 e as zonas UTM se comportam de forma tão diferente, leia nossa explicação sobre o que é um SRC no QGIS.

2. overlay_nearest lê max_distance nas unidades da camada, não em metros

A função overlay_nearest é rápida porque usa um índice espacial, e tem um parâmetro prático, max_distance. Mas max_distance é sempre medido nas unidades de coordenadas da camada.

Quando nossas edificações e pontos de ônibus estão em EPSG:4326 (graus) e você escreve array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), o QGIS procura pontos de ônibus a até 300 graus. Isso cobre a Terra inteira, então cada edificação recebe 37 (todos os 37 pontos da camada). Chutar max_distance:=0.003 para 300 metros também não funciona direito, porque um grau de longitude e um grau de latitude não têm o mesmo comprimento em metros: na edificação fid 62, 0.003 retornou 8 pontos em vez dos 7 reais. Ou reprojete as duas camadas para UTM antes, ou use o padrão aggregate(..., filter:=distance(transform(...))) da última linha da tabela espacial acima.

3. Linhas NULL caem direto no ramo ELSE do CASE WHEN

No nosso conjunto de dados de Bengaluru, só 1.073 das 8.709 edificações (12,3%) têm a tag building:levels. As outras 7.636 são NULL.

Se você escrever CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, as duas comparações <= resultam em desconhecido numa linha NULL, e a linha cai no ELSE. Você acaba classificando 7.636 edificações sem dado como torres altas, sem um único aviso. Sempre coloque WHEN "field" IS NULL THEN 'unknown' como primeiro ramo (ou deixe o ELSE de fora para que as linhas sem correspondência fiquem NULL) quando seus dados tiverem lacunas.

4. "Only update selected features" deixa o resto da coluna NULL

Sempre que houver ao menos uma feição selecionada no mapa, a Field Calculator marca Only update N selected feature(s) automaticamente.

Quando selecionei as 39 vias primary de Bengaluru e executei CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END num novo campo road_rank, o QGIS gravou 'arterial' nessas 39 linhas e deixou as outras 815 vias como NULL, incluindo todas as 28 vias secondary que minha expressão citava explicitamente.

A tabela de atributos do QGIS da camada de vias após rodar a Field Calculator com 39 vias primary selecionadas: as linhas primary mostram road_rank como arterial, enquanto as linhas secondary e residential mostram NULL, e row_n mostra 1, 2, 3 vindos de @row_number.
Como 39 vias primary estavam selecionadas quando a janela abriu, as 28 vias secondary e as 787 vias locais saíram NULL, mesmo com a expressão CASE tratando esses casos.

5. Aspas duplas vs aspas simples (por que "building" = "yes" retorna NULL)

Nas expressões do QGIS, aspas duplas " " indicam um nome de campo e aspas simples ' ' indicam um valor de texto.

Se você digitar "building" = "yes", o QGIS procura uma coluna chamada building e a compara com outra coluna chamada yes. Como não existe coluna chamada yes, a expressão resulta em NULL (e o parser QgsExpression por baixo informa Field 'yes' not found). Da mesma forma, se o nome de uma coluna tiver dois-pontos, como o building:levels do OpenStreetMap, esquecer as aspas duplas falha com syntax error, unexpected Unknown_CHARACTER. Dar um clique duplo nos nomes de campo na lista Fields and Values insere as aspas certas sempre.

Pulando a sintaxe: fazendo os mesmos cálculos com um agente de IA

Escrever $area à mão é rápido. Escrever um aggregate() aninhado com duas chamadas transform(), uma referência à geometria @parent e um filtro de distância é onde as pessoas vão parar no Stack Exchange.

Nós desenvolvemos o AI Agent, um painel de chat que fica encaixado dentro do QGIS, então esta seção é sobre a nossa própria ferramenta. Como ele funciona dentro do seu projeto QGIS aberto, ele inspeciona os nomes das camadas, os tipos de campo, o SRC e os valores únicos antes de rodar a Field Calculator ou as ferramentas de Processamento para você.

Em 7 de novembro de 2026, passei ao AI Agent (v1.9.4, esforço Medium, permissões Balanced) os três cálculos de várias etapas do nosso plano de teste, uma frase por chat, exatamente nas mesmas cinco camadas de Bengaluru em EPSG:4326.

TarefaPrompt exato enviadoTempo do agenteResultado contra a nossa verificação independente
A. Contagem por proximidade"Add a field called bus_stops_300m to the buildings layer with the number of bus stops within 300 metres of each building."39 sPassou. Campo inteiro criado, todas as 8.709 edificações preenchidas, 0 divergências contra a nossa contagem da edificação ao ponto em EPSG:32643 (de 0 a 8).
B. Classificação + estilo"Class the buildings into low (1 or 2 levels), mid (3 or 4) and high (5 or more) from the building:levels field, store the class in a new field called height_class, and style the buildings by that class."18 sPassou. 563 low, 442 mid, 68 high (todas as 1.073 batem com a nossa regra). As 7.636 linhas sem pavimentos ficaram NULL e receberam uma quarta categoria cinza, "Unknown levels".
C. Contagem de escolas e área construída por distrito"For each ward, add the number of schools and the total building area in hectares."37 sPassou (com uma diferença de método). school_count bateu em 10/10 distritos (total 35). building_ha bateu com as áreas recortadas das edificações em 10/10 distritos (total 148,25 ha).

Na Tarefa A, o agente não caiu na armadilha dos 300 graus do overlay_nearest. O log de ferramentas mostra que ele inspecionou as duas camadas, conferiu o SRC, fez o cálculo em unidades métricas a partir dos contornos das edificações (não dos centroides, o que teria mudado a resposta em 667 edificações) e verificou os valores mínimo e máximo antes de responder.

O painel do AI Agent no QGIS após adicionar o campo bus_stops_300m a 8.709 edificações de Bengaluru, informando contagens de 0 a 8 sem valores ausentes e indicando distâncias em linha reta do contorno de cada edificação até os 37 pontos.
Tarefa A no AI Agent: 39 segundos para calcular a contagem de pontos de ônibus a 300 m em 8.709 edificações num projeto EPSG:4326, sem a armadilha dos graus.

Na Tarefa B, ele conferiu primeiro os valores únicos de building:levels, viu que 7.636 das 8.709 edificações não tinham número de pavimentos, deixou essas linhas NULL em height_class em vez de deixá-las cair em high e aplicou no mapa um estilo categorizado com 4 classes.

O painel do AI Agent e o painel Layers do QGIS mostrando o campo height_class categorizado em low, mid, high e Unknown levels, com a resposta listando 563 edificações low, 442 mid, 68 high e 7.636 desconhecidas.
Tarefa B: o agente conferiu a coluna primeiro, manteve as 7.636 edificações sem dado fora do ramo ELSE e deu estilo aos quatro grupos.

Olhando o mapa renderizado, fica óbvio por que conferir NULL importa em dados do OpenStreetMap: as edificações cinza são os 87,7% sem a tag building:levels registrada.

Mapa renderizado no QGIS do centro de Indiranagar, Bengaluru, com edificações em amarelo claro para low, laranja para mid, vermelho escuro para high e cinza para pavimentos desconhecidos, sobrepostas a vias e pontos pretos para os pontos de ônibus.
Centro de Indiranagar com estilo por height_class: 563 low (amarelo), 442 mid (laranja), 68 high (vermelho) e 7.636 sem tag de pavimentos no OSM (cinza).

Na Tarefa C, os números de building_ha do agente ficaram um pouco diferentes da linha de hectares por distrito do nosso livro de receitas: New Thippasandra deu 20.151 ha em vez de 20.292 ha (-0,69%), Jeevan Bhimanagar -0.14% e Indiranagar -0.06%. Quando fui ver o porquê, o agente tinha usado um método geométrico mais rigoroso que o meu filtro intersects(): recortou os polígonos das edificações nos limites dos distritos antes de somar as áreas, para que as edificações na divisa não fossem contadas duas vezes, e mencionou isso na resposta. Ele deixou a camada de distritos em modo de edição com alterações não confirmadas, avisando na resposta que as edições ainda não estavam salvas.

O painel do AI Agent no QGIS informando school_count e building_ha para cada um dos 10 distritos de Bengaluru, indicando que os contornos foram recortados nos limites dos distritos e que as edições ainda não estão salvas.
Tarefa C: o agente recortou nos limites dos distritos as edificações da divisa antes de somar os hectares e avisou que as edições da camada ainda não estavam confirmadas.

Aqui está a tabela de atributos resultante na camada de distritos, depois de confirmar essas edições:

A tabela de atributos do QGIS dos 10 distritos de Bengaluru mostrando a nova coluna inteira school_count e a coluna decimal building_ha ao lado de nomes de distritos como Domlur, Indiranagar, New Thippasandra e Ulsoor.
Os 10 distritos com school_count (total 35) e building_ha (total 148,25 ha) adicionados.

Três tarefas é uma amostra pequena (n = 3), e dei prompts claros, que citavam os campos e os limites das classes, então trate isto como uma demonstração, não como um benchmark. Para fórmulas simples como $area ou concat(), a janela Field Calculator é mais rápida do que digitar uma mensagem no chat. Um agente vale a pena quando você precisa de agregados entre camadas, transformações de SRC ou cadeias de Processamento com várias etapas, ou quando você teria que escrever um script PyQGIS. Você também pode comparar outros assistentes no nosso hub de IA para QGIS.

Como medimos. Todos os testes foram feitos em 7 de novembro de 2026 no QGIS 3.44.15-Solothurn no macOS, com dados do OpenStreetMap de Indiranagar, Bengaluru (retângulo envolvente 12.968, 77.634, 12.986, 77.656, ODbL), no SRC de projeto EPSG:4326. Cada expressão do livro de receitas foi verificada contra um cálculo independente em Python ou com QgsDistanceArea nos mesmos IDs de feição. Os erros de área e comprimento foram medidos nas primeiras 200 edificações e 200 vias por fid, contra QgsDistanceArea com o elipsoide WGS 84 (EPSG:7030). O AI Agent 1.9.4 rodou com esforço Medium e permissões Balanced, num chat novo para cada tarefa. As contagens de dúvidas do YouTube vêm de 70 comentários de pedido de ajuda em 59 vídeos, filtrados de um corpus de 25.276 comentários.

Perguntas frequentes

Por que meu cálculo de $area está errado ou retorna 0 no QGIS?

Primeiro, confira se você digitou area($geometry) em vez de $area. Numa camada armazenada em graus (EPSG:4326), area($geometry) retorna graus quadrados (cerca de 0.0000003 para uma casa), que arredonda para 0.0 num campo decimal. Use $area com o elipsoide do projeto definido como WGS 84 em Project > Properties > General > Measurements, ou reprojete a geometria na própria expressão com area(transform($geometry, 'EPSG:4326', 'EPSG:32643')), usando a sua zona UTM local. Evite EPSG:3857 (Web Mercator), que inflou a área das edificações em +5,95% mesmo a 13° N no nosso teste.

Como escrevo um IF ou um CASE na calculadora de campo do QGIS?

Para dois resultados, use if(condition, value_if_true, value_if_false), por exemplo if($area < 100, 'small', 'large'). Para três classes ou mais, use CASE WHEN ... THEN ... ELSE ... END:

CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END

Coloque a verificação IS NULL primeiro. Senão, toda linha com valor vazio cai no ELSE.

Por que a calculadora de campo retornou NULL em todas ou quase todas as linhas?

Quatro causas comuns:

  1. Havia uma feição selecionada no mapa, então Only update N selected feature(s) estava marcada e deixou todas as linhas não selecionadas como NULL.
  2. Você concatenou texto com || (como "addr:housenumber" || ' ' || "addr:street"), em que um único valor NULL torna o resultado inteiro NULL. Use concat().
  3. Você colocou aspas duplas em volta de um valor de texto ("building" = "yes"), o que manda o QGIS procurar uma coluna chamada yes. Use aspas simples para valores ("building" = 'yes').
  4. Você usou $x ou $y numa camada de polígonos ou linhas. $x só funciona com pontos; use x(centroid($geometry)) para polígonos.

Como calculo a área em hectares na calculadora de campo do QGIS?

Defina o Output field type como Decimal number (real), a Precision como 2 ou 3 e digite $area / 10000 (supondo que as unidades de área do projeto sejam metros quadrados e que o elipsoide esteja definido em Project > Properties > General). Para arredondar o próprio valor gravado a 3 casas decimais, use round($area / 10000, 3).

Como atualizo só as feições selecionadas na calculadora de campo?

Selecione primeiro as feições no mapa ou na tabela de atributos e depois abra a Field Calculator (Ctrl+I). A caixa Only update N selected feature(s) no canto superior esquerdo vem marcada automaticamente. Escolha Update existing field, selecione a coluna na lista, digite a expressão e clique em OK.

Experimente o AI Agent grátis

Faça no QGIS só pedindo

O AI Agent executa a tarefa que você descreve, no seu próprio projeto QGIS. Grátis, sem cartão.

Experimente o AI Agent grátis
Escrito porYvann Barbot
·23 min read