Como usar expressões relacionadas às camadas no compositor do QGIS sem usar ATLAS.

292 views
Skip to first unread message

Otavio Dalvi

unread,
Mar 10, 2020, 10:35:15 AM3/10/20
to qgisbrasil
Ola, bom dia a todoscolegas, estou com a seguinte questão:

Estou elaborando um Layout para uso recorrente, porém não existe a necessidade de atlas, pois será realizado apenas um mapa por projeto, quero automatizar apenas enquadramentos e o preenchimento de algumas informações (Município, Escala, Área, Pontos e Linhas), porem sem a utilização do Atlas as expressões não funcionam,por exemplo no caso do município usei o Agregate, mas só funciona com o atlas habilitado, (ou tem outra possibilidade?)

Escala: Utilizei a numérica e travei ela no local.
Município: Usei agregate e cruzei com a camada de municípios que já está no projeto (só funciona no atlas)
Área: Usei a função SUM na tabela de atributos e joguei uma célula, ainda preciso inserir junto ao a área o número de feições [(5) 23833,30]
Data: Expressão do qgis (data atual)

O problema de utilizar o atlas é que ele considera apenas uma feição de uma camada para compor o Layout e eu preciso compor no mesmo mapa, muitas vezes, mais de uma feição nesse caso o Atlas corta as feições, como na imagem de exemplo.

Existe a possibilidade de utilizar apenas expressões no compositor para todas essas informações?




CROQUI.jpg

Sérgio Luís Bianchini

unread,
Mar 10, 2020, 10:42:07 AM3/10/20
to qgisb...@googlegroups.com
Bom dia, Otávio.
Não sei se entendi sua dúvida corretamente, mas acredito que salvar a impressão como modelo deve resolver parte do seu problema.
Abraços.

--
Comunidade QGIS Brasil: http://qgisbrasil.org/
---
Você recebeu essa mensagem porque está inscrito no grupo "qgisbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisbrasil+...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/qgisbrasil/0022f7e8-5c5e-4c4e-9e61-19053cdfd39e%40googlegroups.com.


--
Eng. Agrº Sérgio Luís Bianchini
Campo Grande - MS

Narcélio de Sá Pereira Filho

unread,
Mar 10, 2020, 11:23:50 AM3/10/20
to Grupo qGIS Brasil
Otávio, tens como me enviar um modelo do projeto com o teu compositor e algumas feições. Eu posso lhe auxiliar nessa. 

Otavio Dalvi

unread,
Mar 10, 2020, 12:29:59 PM3/10/20
to qgisb...@googlegroups.com
Boa tarde Narcélio, agradeço muito,
segue o link do arquivo no GDrive: https://drive.google.com/file/d/1w9_ucHdAhE-4sgtKQe17S5KR47PuQBlG/view?usp=sharing
Coloquei o projeto completo, mas as camadas de interesse já está habilitada.
O projeto que estou utilizando é o "@PROJETO" que esta na pasta.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisb...@googlegroups.com.

Narcélio de Sá Pereira Filho

unread,
Mar 10, 2020, 8:29:34 PM3/10/20
to Grupo qGIS Brasil
Otávio, boa noite.

Qual a questão sobre o enquadramento?
No tocante as outras informações é possível trabalhar com expressões e obter os dados.
Segue as expressões que podem ser utilizadas:

Para obter a Escala de um mapa específico

Primeiro vc precisa definir um ID para o mapa.
Nas propriedades do item existe um campo chamado Item ID, nesse exemplo atribuí o ID 1 para o mapa principal do teu projeto.
Screenshot from 2020-03-10 20-59-40.png
Após isso é possível utilizar a expressão abaixo: 

map_get(item_variables('id_do_mapa'), 'map_scale') 
 
Ex: 
map_get(item_variables('1'), 'map_scale') 
 
Resultado: 4000

Onde o item_variables são as variáveis do item (veja onde consultar as demais variáveis na imagem abaixo):
Screenshot from 2020-03-10 21-18-12.png

Para formatar a escala basta concatenar o numerador na caixa de texto: 
Ex: 
1: [%round(map_get(item_variables('1'), 'map_scale'))%]
Resultado:
1:4000 

Para obter os demais dados:

Nome do(s) município(s):

Você pode usar o agreggate normalmente, só que no lugar de usar o @atlas_feature iremo usar a extensão da tela do mapa como polígono. 
aggregate( 'id_da_camada_municipios','concatenate',"campo_nome_municipio", 
intersects($geometry,map_get(item_variables( 'id_do_mapa'),'map_extent')))

Ex: 
aggregate( 'Limite_Municipal_ES_2019_b68fa932_2eac_46ad_855c_4c32b7413d04','concatenate',"nome", intersects($geometry,map_get(item_variables( '1'),'map_extent')))

Resultado: 
Nome(s) dos municípios que fazem interseção com o mapa

Você tmb pode usar o contains com o município que contem o centroide do mapa usando a 'map_extent_center' (retorna o ponto central do mapa) no lugar de 'map_extent' ( que retorna o polígono do mapa)

Quantidade e área dos polígonos:

--obtendo o número de feições de uma camada poligonal que está visível em um mapa
aggregate( 'id_camada_poligonal','max', num_geometries( $geometry), intersects($geometry,map_get(item_variables( 'Id_do_mapa'),'map_extent')))
--concatenação
||' - '||
--obtendo a área das feições de uma camada poligonal que está visível em um mapa (usando o round para arredondar o resultado com duas casas decimais)
round(aggregate( 'id_camada_poligonal','sum', $area , intersects($geometry,map_get(item_variables( 'Id_do_mapa'),'map_extent'))),2)

Ex:
aggregate( 'FISCAL_AREA','max', num_geometries( $geometry), intersects($geometry,map_get(item_variables( '1'),'map_extent')))
||' - '||
round(aggregate( 'FISCAL_AREA','sum', $area , intersects($geometry,map_get(item_variables( '1'),'map_extent'))),2)

Resultado:
2 - 23505.34 

E depois é seguir o mesmo para as camadas de linha e ponto: 

Exemplo para retornar o numero de feições e a extensão total das linhas da camada visível no mapa

Ex:
aggregate( 'Fiscal_linha_21c42fe1_634d_4a01_899e_9bf96d057f2b','max', num_geometries( $geometry), intersects($geometry,map_get(item_variables( '1'),'map_extent')))
||' - '||
round(
aggregate( 'Fiscal_linha_21c42fe1_634d_4a01_899e_9bf96d057f2b','sum', $length , intersects($geometry,map_get(item_variables( '1'),'map_extent'))),2)

Enfim, vi que está usando bem algumas expressões e vais conseguir adaptar as expressões acima para outros casos quando for necessário. 

Qualquer dúvida é só chamar

Logo
Narcélio de Sá
Mestre em Geografia - UFC
Coordenador da comunidade QGISBR
narcelio...@gmail.com - www.narceliodesa.com
www.about.me/narceliodesa
Facebook icon  LinkedIn icon  Twitter icon  Youtbue icon  Instagram icon
 


Em ter., 10 de mar. de 2020 às 13:30, Otavio Dalvi <otavi...@gmail.com> escreveu:
Boa tarde Narcélio, agradeço muito,
segue o link do arquivo no GDrive: https://drive.google.com/file/d/1w9_ucHdAhE-4sgtKQe17S5KR47PuQBlG/view?usp=sharing
Coloquei o projeto completo, mas as camadas de interesse já está habilitada.

Em terça-feira, 10 de março de 2020 12:23:50 UTC-3, Narcélio de Sá Pereira Filho escreveu:
Otávio, tens como me enviar um modelo do projeto com o teu compositor e algumas feições. Eu posso lhe auxiliar nessa. 

Em ter, 10 de mar de 2020 11:35, Otavio Dalvi <otavi...@gmail.com> escreveu:
Ola, bom dia a todoscolegas, estou com a seguinte questão:

Estou elaborando um Layout para uso recorrente, porém não existe a necessidade de atlas, pois será realizado apenas um mapa por projeto, quero automatizar apenas enquadramentos e o preenchimento de algumas informações (Município, Escala, Área, Pontos e Linhas), porem sem a utilização do Atlas as expressões não funcionam,por exemplo no caso do município usei o Agregate, mas só funciona com o atlas habilitado, (ou tem outra possibilidade?)

Escala: Utilizei a numérica e travei ela no local.
Município: Usei agregate e cruzei com a camada de municípios que já está no projeto (só funciona no atlas)
Área: Usei a função SUM na tabela de atributos e joguei uma célula, ainda preciso inserir junto ao a área o número de feições [(5) 23833,30]
Data: Expressão do qgis (data atual)

O problema de utilizar o atlas é que ele considera apenas uma feição de uma camada para compor o Layout e eu preciso compor no mesmo mapa, muitas vezes, mais de uma feição nesse caso o Atlas corta as feições, como na imagem de exemplo.

Existe a possibilidade de utilizar apenas expressões no compositor para todas essas informações?




--
Comunidade QGIS Brasil: http://qgisbrasil.org/
---
Você recebeu essa mensagem porque está inscrito no grupo "qgisbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisb...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/qgisbrasil/0022f7e8-5c5e-4c4e-9e61-19053cdfd39e%40googlegroups.com.

--
Comunidade QGIS Brasil: http://qgisbrasil.org/
---
Você recebeu essa mensagem porque está inscrito no grupo "qgisbrasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para qgisbrasil+...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/qgisbrasil/ebbfd1c9-2f40-41db-9cf6-f0a4382ea4c3%40googlegroups.com.

Otavio Dalvi

unread,
Mar 11, 2020, 7:51:40 AM3/11/20
to qgisbrasil
Olá Narcélio, mais uma vez, muito obrigado,
Consegui aplicar todas as sugestões que você elaborou e funcionaram perfeitamente.
A função agreggate me é um pouco estranha ainda e não compreendi como aplicar todas as expressões e filtros.
Na contagem do numero de feições substitui a expressão "max" por "count", é isso mesmo?

Na definição do município o ideal seria pegar o centroide da geometria, mas apenas em casos raros (próximo a divisas) poderá haver alguma divergência acredito que o centroide do mapa funcionará muito bem.

Sobre o enquadramento eu gostaria de utilizar uma expressão que com base na caixa delimitadora da feição (ou algo similar) que defina a escala e enquadramento (x_max, x_min, y_max e y_min), tentei fazer o calculo na tabela e lançar a escala como um campo de valor, mas novamente não funciona fora do atlas.
Não consegui pensar em algo que seja uma regra pra substituir a melhor escala ou margem em percentual do atlas.

Desde já, agradeço novamente.

Kyle Felipe

unread,
Mar 11, 2020, 11:39:04 AM3/11/20
to qgisbrasil
olha.. se tiver usando um Geopackage, e configurar o projeto com caminhos relativos, e colocar o arquivo de pŕojeto junto do gpkg (ou até mesmo dentro dele) vc pode ter um padrão, e depois ir copiando esse padrão para outras pastas e ir substituindo os dados das camadas dentro do gpkg... e usar expressões para trabalhar com extensão da camada e outras coisas necessárias...

Otavio Dalvi

unread,
Mar 11, 2020, 12:26:15 PM3/11/20
to qgisbrasil
Boa tarde Felipe, o "projeto modelo" já é utilizado dessa forma, com todos os arquivos shape (nesse caso o formato precisa ser shape) necessários ao projeto dentro da mesma pasta que o .qgs, a demanda que estou tendo agora e desenvolver alguns layouts dentro desse projeto, até ai já está tudo resolvido.
A duvida que eu estava tendo era como preencher alguns campos dentro do layout sem precisar da intervenção do usuário, (alguns não terão habilidade para fazer essas alterações) usando apenas as informações disponíveis nas camadas do projeto, através de expressões que serão calculadas automaticamente assim que o usuário vetorizar a camada alvo e pressionar o atualizar no compositor, ponto esse que o Narcélio já esclareceu muito bem.

Os objetivos que me restam agora são: Como utilizar expressões para definir a escala e o enquadramento baseado na área ocupada pelas feições da camada alvo, sem usar o atlas.
Reply all
Reply to author
Forward
0 new messages