Eu tenho uma camada de polígono com um valor de atributo anexado representando a contagem de indivíduos dentro de um polígono. Estou usando o QGIS 3.0.
Preciso visualizar as contagens como uma grade de pontos dentro de um polígono (ou seja, 1 ponto = 100 sapos, coloridos por espécie). Os pontos não precisam necessariamente ocupar polígono inteiro e, de preferência, são desenhados em torno de um centróide com espaçamento predefinido (ou seja, 300 m), para que possam representar uma grade organizada em uma resolução específica.
A solução atual que encontrei é usar "Pontos regulares", com o parâmetro count, para criar grades dentro da extensão desenhada em um mapa e excluir os pontos extras criados pelo algoritmo (o algoritmo arredonda para uma grade e você pode obter 20 pontos em vez de 17 em entrada). Isso produz o resultado desejado, mas requer o desenho da extensão da área para pontos regulares para cada polígono, além da entrada manual de atributos e limpeza dos pontos criados. Além disso, como estou executando "Pontos regulares" com contagem especificada, em vez de espaçamento, cada polígono obtém pontos com espaçamento diferente.
Em resumo: pontos regulares (número de pontos definido, extensão desenhada) para cada polígono (lote)> Excluir pontos extras> atribuir valores de atributo aos # pontos
Alternativa (evita o espaçamento irregular, mas requer ainda mais manipulações):
Pontos regulares (espaçamento definido, ou seja, 300 m) na extensão de toda a camada> Clipe na extensão dos polígonos> Exclua pontos extras em cada polígono até obter o número de pontos desejado> atribua valores de atributo a pontos.
O principal problema com minhas soluções alternativas é o processamento de polígono por polígono, o que dificulta a atualização dos dados e o trabalho com um número maior de polígonos.
Uma pergunta análoga foi feita como Criando # regularmente pontos espaçados e definidos dentro do polígono no QGIS , mas as especificidades são diferentes.
fonte
Respostas:
O QGIS 3 vem com um novo método de deslocamento no renderizador de cluster chamado grid. Parece que isso é praticamente o que você precisa. Basta criar o número de pontos desejados no centróide do seu polígono.
Não conheço um método para gerar os pontos apenas com uma ferramenta de GUI, mas um script python relativamente simples deve fazer isso.
Se você quiser enlouquecer, envolva isso em um algoritmo de processamento personalizado.
fonte
Pode ser uma outra maneira inspiradora pela resposta de Sarath SRK:
No entanto, você terá algo parecido com isto
Use um modelador gráfico para criar um novo campo com o comando "@row_number"
Execute o modelo com uma iteração na camada de buffer
Mesclar toda a nova camada
Exclua todo o ponto com um campo ID_pt maior que a soma do seu campo ("Sapos" + "Gatos" + "Diplodocs")
fonte
Você pode usar geradores de geometria para isso.
fonte
Uma solução poderia ser criar uma camada de pontos com pontos no centróide de cada polígono. Então, por exemplo, você chegou ao centróide de Edmonton 25 sobreposto: 5 com um atributo de sapo, 20 com gato e 0 com diplodocs.
Em seguida, usando o renderizador de deslocamento de ponto com o método Placement definido como grade, você poderá obter o efeito.
A dificuldade é criar a camada de pontos ....
fonte
Uma alternativa muito simples pode ser usar o gráfico de pizza disponível nas propriedades da camada? Atributos e tamanhos podem ser ditados por uma expressão.
fonte
Você pode gerar os pontos em um caminho em espiral a partir do centróide do polígono. A seguinte postagem do Stack Overflow possui código python para criar pontos equidistantes, mas não posso testá-lo no momento, devido à minha falta de tempo livre.
fonte
No seu caso,
fonte