Desenhando quadrantes de círculos, setores circulares, anéis, e geometrias afins no QGIS
Colegas pesquisadores e entusiastas de GIS de código livre,
Bem-vindos ao meu blog!
Eu gostaria de começar com um aviso – posso ser uma pesquisadora dessa área, mas isso não significa que tudo o que faço ou escrevo aqui funcionará para você, em suas próprias configurações de desktop e versões de pacotes. Me eximo de responsabilidade se você perder dados ou estragar a sua instalação. Também não autorizo nenhum tipo de cópia do meu conteúdo, com exceção dos fragmentos de código, que são disponibilizados sob a Licença do MIT.
Hoje, escrevo sobre os usos da ferramenta Wedge do QGIS. Esta ferramenta é muito útil para gerar geometrias complexas que envolvem círculos ou setores circulares. Estou usando o QGIS 3.20 Odense para os exemplos mostrados.
A geração deste tipo de geometria pode ser útil para muitas aplicações, principalmente zoneamento e amostragem. Por exemplo, pode ser usada para mapear uma zona de exclusão (zona quente) e uma zona de redução de contaminação (zona morna) no entorno de um vazamento de um produto químico tóxico, de uma maneira muito mais rápida e fácil do que usando as ferramentas Buffer e Difference. Também pode ser usado para classificar as áreas de uma cidade, em relação ao seu centro, a fim de desenvolver diferentes planos diretores para fomentar o desenvolvimento de cada uma delas. Entre seus muitos usos, outro notável é classificar a localização (por exemplo, N, NE, SE) de uma determinada amostra, em relação ao centroide do polígono em que as amostras estão contidas (por exemplo, uma bacia hidrográfica), a fim de verificar se as amostras colhidas em campo estão suficientemente bem distribuídas. Enfim, a ferramenta wegde não é uma das mais populares do QGIS, embora seja, na verdade, muito versátil.
Após os exemplos mostrados, forneço um código Python para ser executado no Console Python do QGIS (PyQGIS) que faz o mesmo que acabei de fazer na caixa de diálogo usando a interface gráfica. Nos exemplos mostrados, estou salvando as saídas do algoritmo em arquivos temporários, que são salvos na pasta temporária do QGIS. Para saber mais sobre isso, recomendo que você dê uma lida na postagem da semana passada sobre o salvamento de layers temporários antes de ler o resto deste post.
A ferramenta wedge (cunha) na interface do usuário do QGIS
Digite “wedge” na Caixa de ferramentas de processamento e a ferramenta “Create wedge buffers” deve ser mostrada.
Ao clicar, esta caixa de diálogo aparece:
A camada de entrada deve ser um vetor do tipo ponto, na qual deve haver um ponto. As coordenadas deste ponto devem ser o centro do círculo (ou cunha, ou semicírculo…). A largura padrão do setor circular é 45°, ou seja, um oitavo de um círculo, e o azimute padrão da cunha é 0°. O raio externo (outer radius) é o que estamos acostumados a chamar simplesmente de raio de um círculo, e a variável do raio interno (inner radius) só será preenchida quando quisermos desenhar um anel ou geometria do tipo “donut”. Sugiro que você preste atenção nas projeções ao preencher os valores do raio interno e externo.
Se eu deixar as configurações originais e escolher um ponto para ser o centro, este deve ser o resultado:
No PyQGIS
Para fazer a mesma operação no PyQGIS, primeiro abra o Python Console do QGIS.
Defina os parâmetros para executar o algoritmo:
paramwedge={ 'AZIMUTH' : 0, 'INNER_RADIUS' : 0, 'INPUT' : 'point.shp', 'OUTER_RADIUS' : 1, 'OUTPUT' : 'memory:' , 'WIDTH' : 45}
Em seguida, execute-o:
layer_wedge=processing.run("native:wedgebuffers", paramwedge)
QgsProject.instance().addMapLayer(layer_wedge['OUTPUT'])
Desenhando uma geometria do tipo anel ou donut
Para desenhar uma forma semelhante a um donut no QGIS, você deve preencher a largura (width) como 360° (uma rotação completa). A parte mais importante das configurações, neste caso, é que o valor do raio interno (inner radius) deve ser diferente de zero. Com um raio interno de 1.0 e raio externo de 1.3, o anel resultante é:
Desenhando quadrantes de um círculo
Por definição, os quadrantes dividem o círculo em 4 partes. A largura de cada parte deve ser 0.25 da largura de um círculo inteiro (360°). Portanto, 90°.
O próximo passo é definir o azimute de cada quadrante para desenhá-lo no QGIS usando a ferramenta wedge.
O quadrante superior direito começa em um ângulo de 0 graus e termina em um ângulo de 90 graus. Isso significa que seu azimute deve ser de 45 graus, que é o meio caminho entre 0 e 90.
Depois de clicar em “Run”, obtenho:
Este é o primeiro quadrante desenhado. Agora, como faço para desenhar os outros?
Devemos pensar no sentido horário. Se o primeiro quadrante terminou em 90°, então é lá que o próximo deve começar. Este deve, portanto, terminar em 180° e estar centrado em (90+180)/2= 135. Portanto, o azimute é 135°, e a largura segue com o valor de 90°.
Agora, os dois quadrantes restantes estão centrados em (180+270)/2=225 e (270+360)/2=315.
Pronto!
Dividindo o círculo em X setores de largura igual
Para gerar setores circulares (cunhas) de larguras iguais, primeiro determine a largura (em graus) de cada um dos setores. A largura angular, neste caso, é igual a 360/(número de setores).
O azimute deve variar entre $largura/2$ e $360-(largura/2)$. Os valores dos azimutes podem ser representados pela expressão $largura/2 + largura*k$, sendo $k=0,1,…,n$
Se você não quiser usar a interface de usuário para fazer este tipo de divisão, eu codifiquei um trecho que gera estes setores automaticamente. Deve ser executado no PyQGIS (Python Console do QGIS):
Neste código, a única variável que você precisa fornecer é o número de setores (numsectors).
Desenhando uma geometria do tipo alvo no QGIS
Para desenhar a parte interna do alvo, use o código disponibilizado no gist anterior. Sugiro usar o valor de numsectors=8 setores iguais.
Para desenhar a parte externa do alvo, defina o raio interno do anel como o raio externo da parte interna, recém-desenhada.
Para desenhar o centro do alvo (a “mosca”), use a ferramenta wedge com um raio interno de zero e um raio externo relativamente pequeno.
A geometria resultante é:
Agora, ajuste a simbologia. Exemplo:
Abaixo, mais alguns exemplos de uso da ferramenta wedge do QGIS:
Extras
- Como desenhar este último exemplo mostrado?
Para desenhar esta composição de setores circulares, o raio da cunha gerada é alterado a cada iteração.
Forneça o raio externo inicial e altere-o dentro do loop.
Este é o código que foi usado para gerar as cunhas de raio variável: