Renderizador de cluster de pontos QGIS 3.0, é possível controlar a ordem de renderização (z-order)?

19

Estou brincando com o novo renderizador de cluster de pontos no QGIS 3.0.2 e é ótimo - muito mais fácil (e mais rápido) do que ter que fazer você mesmo o cluster.

Para mostrar o que quero dizer, aqui está um exemplo de acidentes de trânsito em Edimburgo usando dados STATS19 e um raio de 30m.

insira a descrição da imagem aqui

Não consigo descobrir como configurar a ordem z para que os clusters maiores sejam desenhados na frente de clusters menores.

Estou ciente da variável @cluster_size - é o que estou usando para dimensionar e colorir os símbolos. Para isso, estou usando os assistentes de tamanho e cor. Eu removi os marcadores de fonte para remover o texto de cada cluster.

O tamanho dos marcadores é definido da seguinte forma: -

coalesce(scale_exp(@cluster_size, 0, 50, 1, 200, 0.57), 0)

A cor dos marcadores é definida da seguinte forma: -

coalesce(ramp_color('custom ramp',scale_linear( @cluster_size, 0, 50, 0, 1), '#000000')

O que eu tentei até agora: -

  • Níveis de símbolo - sem sorte; incapaz de selecionar um nome de variável.
  • Renderização de camada> Ordem de renderização do recurso de controle e escolha @cluster_size como classificação. Não parece ter efeito.
  • Estilo graduado usando @cluster_size, pois a expressão não funciona.

Alguém sabe se isso é possível ou isso é uma limitação para esse renderizador específico?

Eu sei que existem muitas outras maneiras de fazer isso (junção buffer / espacial, plugins), mas o novo renderizador deve ser muito mais rápido. Ou eu negligenciei algo óbvio? :)

Steven Kay
fonte
Provavelmente funciona levando em consideração o pedido na tabela de atributos. Talvez você os organize em ordem crescente, para que os maiores sejam renderizados como os mais novos? Se não há nenhuma função 'Ordenar apresenta pelo atributo', você pode tentar o plugin MMQGIS (se seu disponível para qgis 3)
Revo
obrigado @Revo. Parece ser possível dimensioná-lo e classificá-lo em um atributo (inclusive com o renderizador do Cluster Point), mas isso funciona apenas em uma escala. Tentei usar o cluster_size porque os tamanhos dos cluster mudam dinamicamente à medida que aumenta ou diminuo o zoom usando o renderizador de ponto do cluster. Vou dar uma olhada MMQGIS (ele está disponível para QGIS 3)
Steven Kay

Respostas:

2

Parece que a implementação do cluster de pontos não permite isso nativamente.

Considere o renderizador de cluster de pontos - ele essencialmente analisa e agrupa dados de pontos no momento da renderização, criando uma nova pseudo camada. Esta camada não está acessível ao usuário. Não se pode consultar um ponto em cluster. Não é possível calcular em campo um atributo @cluster_size .

O renderizador do cluster de pontos herda a ordem de renderização da origem usando a ordem de renderização do recurso Control ( QgsFeatureRequest :: OrderByClause), deixando em aberto a possibilidade de alguma solução inteligente usando atributos e expressões; no entanto, certos esquemas de pedidos não são consistentes.

Como exemplo, considere uma camada de pontos com renderização ordenada ascendente por um atributo "Latitude". Os pontos mais ao norte são renderizados no topo de pontos mais ao sul. O renderizador do cluster de pontos não possui um atributo "Latitude" para seus novos recursos, apesar de herdar alguma aparência dessa ordem da origem. Pode haver casos em que um cluster mais ao sul é processado no topo de um cluster mais ao norte, devido à ordem dos pontos originais.

CrystallineEntity
fonte
Obrigado. Essa é uma explicação muito clara, que também responde à minha pergunta se é possível calcular um atributo a partir dos pontos agrupados, por exemplo, uma soma da população associada a cada ponto original. Claramente não .... ainda? Seria uma característica muito útil. Alguma idéia de como isso pode ser alcançado com alguma solução inteligente (que não requer codificação, porém, como eu não sou (ainda, de novo?) Bom nisso), mesmo de maneira estática? Estou lutando para encontrar uma ferramenta para agrupar pontos da mesma forma que é feita pelo renderizador de cluster
dorakiara
De um modo geral, você pode abordar isso replicando o que o renderizador de cluster faz em conjunto com a função 'Ordem de renderização do recurso de controle' usando atributos. Uma primeira etapa aproximada pode ser o buffer de uma camada de pontos, contar pontos nos polígonos em buffer como um atributo na camada de pontos. Controle a ordem de renderização por esse atributo crescente. Um pouco complicado e não funcionará necessariamente em escalas diferentes.
CrystallineEntity
Também encorajo você a fazer uma solicitação de recurso, que exporia o método @cluster_size à função 'Ordem de renderização do recurso de controle'.
CrystallineEntity