Este artigo completa a série de artigos sobre a criação de um banco de dados de geopacote para gerenciar as cartas náuticas ENC no QGis e a simbologia das várias camadas de dados. Trabalhar com um pequeno número de mapas não apresenta problemas específicos, mas, assim que o número aumenta, há uma série de operações que se tornam complicadas ou demoradas.
Desenvolvemos uma série de scripts Python que simplificam o trabalho em grandes bancos de dados de geopacotes.
1- Carregamento de camadas
O primeiro problema é o grande número de camadas a serem carregadas no projeto QGis. Embora um mapa possa ter cerca de vinte camadas, assim que o número de mapas aumenta, você pode se deparar rapidamente com mais de cem camadas para carregar.
O QGis permite que você carregue todas as camadas em um geopackage em bloco. Assim, você não precisa carregar as centenas de camadas uma a uma. Porém, depois de carregadas, há duas tarefas a serem executadas:
- remover camadas irrelevantes, como camadas de metadados
- ordenar a exibição de camadas para evitar que determinadas camadas fiquem completamente invisíveis por estarem sobrepostas a outras camadas. As camadas de superfície, como DEPARE e LNDARE (profundidades e terreno), devem estar sempre abaixo dos objetos marinhos e terrestres, caso contrário, esses objetos não serão visíveis.
Além disso, é sempre mais agradável trabalhar com escalas mínimas de exibição, de modo que apenas determinadas camadas sejam exibidas quando o zoom for aplicado em escalas muito pequenas e as informações detalhadas sejam exibidas apenas quando o zoom for aplicado em uma escala maior.
Seleção de camadas a serem carregadas
Fornecemos um script python que resolve todos esses problemas por conta própria, que pode ser baixado neste link.
O script inclui uma lista de 210 camadas S57, ordenadas para exibição correta:
Camadas de superfície representadas por polígonos sólidos, depois camadas de superfície representadas por polígonos vazios (somente os perímetros são exibidos), depois camadas do tipo linear e, por fim, camadas do tipo ponto. Dentro de cada categoria, a ordem foi projetada para evitar o mascaramento de informações.
Cada camada é acompanhada por um valor mínimo de escala de exibição, sendo o padrão 100000000.
Veja um exemplo:
#Liste des couches dans l’ordre de chargement
couches_a_charger = [
(‘pl_DEPARE’, 100000000),
(‘pl_UNSARE’, 100000000),
(‘pl_TIDEWY’, 100000000),
(‘pl_DAMCON’, 100000000),
(‘pl_CAUSWY’, 100000000),
(‘pl_HULKES’, 100000000),
(‘pl_LOKBSN’, 100000000),
(‘pl_OBSTRN’, 100000000),
(‘pl_PONTON’, 100000000),
(‘pl_PYLONS’, 100000000),
Se não quiser que o script carregue camadas que não lhe interessam, você pode simplesmente comentar a linha correspondente adicionando um ‘#’ no início da linha:
#Liste des couches dans l’ordre de chargement
couches_a_charger = [
(‘pl_DEPARE’, 100000000),
(‘pl_UNSARE’, 100000000),
#(‘pl_TIDEWY’, 100000000),
#(‘pl_DAMCON’, 100000000),
Nesse exemplo, as camadas TIDEWY e DAMCON não serão carregadas.
Além disso, se você quiser definir uma escala mínima de exibição para uma camada, basta alterar o valor correspondente:
‘pl_DEPARE’, 100000000),
(‘pl_UNSARE’, 100000000),
(‘pl_TIDEWY’, 100000),
#(‘pl_DAMCON’, 100000000),
#(‘pl_CAUSWY’, 100000000),
(‘pl_HULKES’, 100000000),
(‘pl_LOKBSN’, 100000000),
(‘pl_OBSTRN’, 50000),
Nesse exemplo, a camada TIDEWY só será exibida quando o valor de zoom da janela do mapa for menor que 100000 e a camada OBSTRN quando o valor for menor que 50000.
Para usar o script
- faça o download do arquivo .py,
- salve-o em um diretório de sua escolha
- Abra o console QGis Python (Extensões ->Console Python)
- Abra a janela do Editor (1)
- Clique no ícone Browse (2) e aponte para o arquivo .py baixado
- Altere o caminho do geopackage para o caminho e o nome do seu geopackage (3)
- Execute o script (4)
Antes de executá-lo, você pode fazer alterações para evitar que as camadas sejam carregadas ou para atribuir a elas uma escala mínima diferente. Não se esqueça de salvar essas alterações antes de fechar o projeto.
O código do script é o seguinte:
Gerenciamento da escala de exibição
O script anterior é usado para definir uma escala mínima quando as camadas são carregadas pela primeira vez no projeto. Quando você salva o projeto, o valor no campo Min_scale da camada é salvo. Quando o projeto é aberto, as configurações de exibição no momento em que o projeto é fechado são levadas em consideração. Portanto, você só usará o script anterior no início do trabalho em um projeto. Entretanto, as escalas definidas no script load_layers podem não ser adequadas para sua área de trabalho. Portanto, talvez seja necessário modificar os valores mínimos de escala para determinadas camadas.
Fornecemos um script Python que permite definir a escala mínima de exibição para todas as camadas selecionadas no painel Layers. Depois que seu projeto for salvo, essas configurações serão usadas sempre que o projeto for aberto.
Para usá-lo, primeiro carregue-o no console do QGis Python, selecione (destaque) as camadas que deseja modificar no painel Layers (Camadas) e, o mais importante, altere a linha
#Defina a escala mínima (por exemplo, 1:50000)
min_scale = 250000
com o valor desejado para a escala mínima de exibição.
O script Python para definir a escala mínima de exibição para as camadas selecionadas é o seguinte:
Um script Python para filtrar camadas por “finalidade”
As tabelas em seu geopackage incluem um atributo chamado “purpose” (finalidade), que é um valor entre 1 e 6 e corresponde à finalidade principal do mapa:
- 1: Visão geral
- 2: Geral
- 3: Litoral
- 4: Aproximação
- 5: Porto
- 6: Atracação
Se você tiver mapas com finalidades diferentes cobrindo a mesma área, por exemplo, um mapa do tipo General e um mapa do tipo Approach, haverá informações duplicadas. Se as entidades em dois mapas não forem do mesmo tipo (uma entidade de superfície em um mapa de Aproximação corresponderá a uma entidade de ponto no mapa Geral, por exemplo), a renderização poderá se tornar rapidamente muito confusa. A solução proposta é simples
Você pode fazer o download do script aqui.
Carregue o script no console do Python e modifique a linha:
#Defina o valor do atributo “purpose” a ser filtrado
purpose_value = 5
com o valor de finalidade desejado e, em seguida, execute o script. Todas as camadas presentes no painel Layers do projeto serão filtradas.
Se quiser remover todos os filtros ativos de todas as camadas do projeto, o script a seguir permite que você faça isso: