QGIS: Pemformatan string saat membuat bidang virtual

Dec 10 2020

Saya ingin menggabungkan perkiraan populasi sensus AS dengan batas wilayah .

Lapisan perkiraan populasi ( co-est2019-alldata) berisi STATEdan COUNTYbidang dengan kode negara bagian dan daerah FIPS, seperti ini:

NEGARA DAERAH
36 51
1 15

cb_2018_us_county_5mLayer county boundary ( ) berisi nilai yang sama tetapi dengan format yang sedikit berbeda dan tambahan GEOIDbidang string yang menggabungkan keduanya:

STATEFP COUNTYFP GEOID
36 051 36051
01 015 01015

QGIS tidak mendukung penggabungan di beberapa bidang , tetapi solusi yang umum adalah membuat bidang virtual baru yang menggabungkan atribut target. Saya ingin membuat bidang virtual di lapisan populasi yang cocok dengan GEOIDbidang di lapisan batas wilayah.

Ini akan sederhana jika ada fungsi yang setara dengan sprintf, karena saya bisa menulis:

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

... tapi sejauh yang saya tahu, tidak ada fungsi seperti itu. Apa cara terbaik untuk menangani ini?

Jawaban

3 J.Monticolo Dec 10 2020 at 05:27

Coba yang ini :

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

kembali

jika "STATE"= 1dan "COUNTY"= 15: 01015
jika "STATE"= 22dan "COUNTY"= 5:22005

Dari dokumentasi:

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

    Mengembalikan string yang diisi di kiri ke lebar yang ditentukan, menggunakan karakter isian. Jika lebar target lebih kecil dari panjang string, string tersebut akan dipotong.

  • to_string ( number) ( doc ): (karena saya tidak yakin field Anda adalah karakter)

    Mengonversi angka menjadi string.

  • || : menggabungkan dua string