QGIS: formatação de string ao criar um campo virtual

Dec 10 2020

Eu gostaria de juntar as estimativas da população do censo dos EUA com os limites dos condados .

A camada de estimativas de população ( co-est2019-alldata) contém STATEe COUNTYcampos com códigos FIPS estaduais e municipais, como este:

ESTADO MUNICÍPIO
36 51
1 15

A cb_2018_us_county_5mcamada de limite de condado ( ) contém os mesmos valores, mas com uma formatação ligeiramente diferente e, adicionalmente, um GEOIDcampo de string que combina os dois:

STATEFP COUNTYFP GEOID
36 051 36051
01 015 01015

O QGIS não oferece suporte à junção em vários campos , mas uma solução alternativa comum é criar um novo campo virtual que combine os atributos de destino. Desejo criar um campo virtual na camada de população que corresponda ao GEOIDcampo na camada de fronteira do condado.

Isso seria simples se houvesse uma função equivalente a sprintf, porque então eu poderia simplesmente escrever:

sprintf('%02s%03s', "STATE", "COUNTY")

... mas tanto quanto eu posso dizer, tal função não existe. Qual é a melhor maneira de lidar com isso?

Respostas

3 J.Monticolo Dec 10 2020 at 05:27

Tente este :

lpad(to_string("STATE"), 2, '0') || lpad(to_string("COUNTY"), 3, '0')

retorna

if "STATE"= 1and "COUNTY"= 15: 01015
if "STATE"= 22and "COUNTY"= 5:22005

Da documentação:

  • lpad ( string, width, fill) ( doc ):

    Retorna uma string preenchida à esquerda até a largura especificada, usando um caractere de preenchimento. Se a largura alvo for menor que o comprimento da string, a string será truncada.

  • to_string ( number) ( doc ): (porque eu não tinha certeza se seus campos eram caracteres)

    Converte um número em string.

  • || : concatenar duas strings