QGIS: Formatowanie ciągów znaków podczas tworzenia pola wirtualnego

Dec 10 2020

Chciałbym połączyć szacunki populacji spisu ludności w USA z granicami hrabstw .

Warstwa szacunki populacji ( co-est2019-alldata) zawiera STATEi COUNTYPola stanu i powiatu FIPS kodów, jak to:

STAN HRABSTWO
36 51
1 15

Warstwa granica hrabstwa ( cb_2018_us_county_5m) zawiera te same wartości, ale z nieco innym formatowaniem i dodatkowo GEOIDpole tekstowe, które łączy te dwa elementy:

STATEFP COUNTYFP GEOID
36 051 36051
01 015 01015

QGIS nie obsługuje łączenia na wielu polach , ale powszechnym obejściem jest utworzenie nowego pola wirtualnego, które łączy atrybuty docelowe. Chcę utworzyć wirtualne pole w warstwie populacji, które będzie pasować do GEOIDpola w warstwie granicy hrabstwa.

Byłoby to proste, gdyby istniała funkcja równoważna sprintf, ponieważ wtedy mógłbym po prostu napisać:

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

... ale o ile wiem, taka funkcja nie istnieje. Jak najlepiej sobie z tym poradzić?

Odpowiedzi

3 J.Monticolo Dec 10 2020 at 05:27

Spróbuj tego :

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

zwroty

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

Z dokumentacji:

  • LpAd ( string, width, fill) ( doc )

    Zwraca ciąg dopełniony po lewej stronie do określonej szerokości przy użyciu znaku wypełnienia. Jeśli szerokość docelowa jest mniejsza niż długość łańcucha, ciąg jest obcinany.

  • to_string ( number) ( doc ): (ponieważ nie byłem pewien, czy twoje pola są znakami)

    Konwertuje liczbę na ciąg.

  • || : łączy dwa ciągi