QGIS: String-Formatierung beim Erstellen eines virtuellen Feldes

Dec 10 2020

Ich möchte mich den Schätzungen der US-Volkszählung mit Kreisgrenzen anschließen .

Die Bevölkerungsschätzungsschicht ( co-est2019-alldata) enthält STATEund COUNTYFelder mit staatlichen und regionalen FIPS-Codes wie folgt:

ZUSTAND BEZIRK
36 51
1 fünfzehn

Die County Boundary ( cb_2018_us_county_5m) - Ebene enthält dieselben Werte, jedoch mit leicht unterschiedlicher Formatierung und zusätzlich ein GEOIDZeichenfolgenfeld, das die beiden kombiniert:

STATEFP COUNTYFP GEOID
36 051 36051
01 015 01015

QGIS unterstützt das Verbinden mehrerer Felder nicht . Eine häufige Problemumgehung besteht darin, ein neues virtuelles Feld zu erstellen, in dem die Zielattribute kombiniert werden. Ich möchte ein virtuelles Feld in der Bevölkerungsschicht erstellen, das mit dem GEOIDFeld in der Kreisgrenzschicht übereinstimmt .

Das wäre einfach, wenn es eine äquivalente Funktion gäbe sprintf, denn dann könnte ich einfach schreiben:

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

... aber soweit ich das beurteilen kann, gibt es keine solche Funktion. Was ist der beste Weg, um damit umzugehen?

Antworten

3 J.Monticolo Dec 10 2020 at 05:27

Probier diese :

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

kehrt zurück

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

Aus der Dokumentation:

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

    Gibt eine links aufgefüllte Zeichenfolge mit einem Füllzeichen auf die angegebene Breite zurück. Wenn die Zielbreite kleiner als die Länge der Zeichenfolge ist, wird die Zeichenfolge abgeschnitten.

  • to_string ( number) ( doc ): (weil ich nicht sicher war, ob Ihre Felder Zeichen waren)

    Konvertiert eine Zahl in eine Zeichenfolge.

  • || : Verketten Sie zwei Zeichenfolgen