Como replicar intervalos geométricos ArcGIS no QGIS

Aug 25 2020

É possível replicar os intervalos geométricos do ArcGIS na simbologia de 3 camadas do QGIS?

Estou usando o QGIS 3.10.9 LTS e gostaria de atribuir um estilo de intervalo geométrico a um shapefile simples de condados do Reino Unido que contém um campo numérico. Em QGIS-camadas-simbologia pode-se selecionar 'graduado' como o estilo e selecionar o campo numérico como 'valor', mas nenhum dos seis modos que o QGIS fornece é apropriado para minha análise: O que eu preciso é uma classificação de intervalo geométrico como a disponível no ArcGIS. Não consigo ver um plug-in que tente resolver isso e o único artigo online que posso encontrar é de 2014 e usa um script Python experimental em um site agora indisponível. Existe uma maneira de resolver essa tarefa? Meu conhecimento de Python é muito limitado.

Respostas

Vince Aug 25 2020 at 23:33

Esta é apenas uma resposta parcial, na melhor das hipóteses, mas é muito código para um comentário.

Para fazer a engenharia reversa de um algoritmo de distribuição geométrica em uma distribuição personalizada que eu pudesse usar para controlar a simbologia exata que eu queria em um intervalo de dados, gerei esta função (que é mais dados de três locais limitados do que eu gostaria):

import math

def computeRamp(max,bins):
    vals = [ 0 ]
    labs = []
    cmax = math.floor((max + 0.001)*1000)/1000
    a1   = pow(cmax,1.0/(bins-1))

    digits = int(math.ceil(math.log(cmax,10))) + 4
    labLayout = "{:@n.3f} - {:@n.3f}".replace('@n',str(digits))

    lo = 0.0
    hi = a1 / 4.0
    vals.append(hi)
    labs.append(labFormat.format(lo,hi-0.001))

    lo = 0.0
    hi = a1
    vals.append(hi)
    labs.append(labFormat.format(lo,hi-0.001))

    for i in range(2,bins):
        lo = hi
        hi = lo * a1
        vals.append(hi)
        labs.append(labFormat.format(lo,hi-0.001))

    return vals,labs

vals,labs = computeRamp(1234.567,6)
for i in range(len(labs)):
    print("{:.3f}\n    {:s}".format(vals[i],labs[i]))
print("{:.3f}".format(vals[-1]))

O que resulta na distribuição:

0.000
       0.000 -    1.037
1.038
       1.038 -    4.151
4.152
       4.152 -   17.242
17.243
      17.243 -   71.598
71.599
      71.599 -  297.311
297.312
     297.312 - 1234.567
1234.568

Eu trapaceio tirando um quarto do valor da primeira célula de uma progressão geométrica verdadeira (o que seria útil pow(cmax,1.0/bins), mas descobri que isso tornava mapas melhores).

Como você aplica isso ao QGIS é deixado como um exercício.