QGIS:仮想フィールドを作成するときの文字列フォーマット

Dec 10 2020

米国国勢調査の人口推計に郡の境界を付けて参加したいと思います。

人口推定レイヤー(co-est2019-alldata)には、次のような州および郡のFIPSコードを含むフィールドが含まれSTATEていCOUNTYます。

状態
36 51
1 15

郡の境界(cb_2018_us_county_5m)レイヤーには同じ値が含まれていますが、フォーマットがわずかに異なり、さらにGEOID2つを組み合わせた文字列フィールドがあります。

STATEFP COUNTYFP ジオイド
36 051 36051
01 015 01015

QGISは複数のフィールドでの結合をサポートしていませんが、一般的な回避策は、ターゲット属性を組み合わせた新しい仮想フィールドを作成することです。GEOID郡の境界層のフィールドと一致する仮想フィールドを人口層に作成したいと思います。

と同等の関数があれば、これは簡単です。次のようにsprintf書くことができるからです。

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

...しかし、私が知る限り、そのような機能は存在しません。これを処理するための最良の方法は何ですか?

回答

3 J.Monticolo Dec 10 2020 at 05:27

これを試してください:

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

戻り値

if "STATE"= 1and "COUNTY"= 1501015
if "STATE"= 22and "COUNTY"= 522005

ドキュメントから:

  • LPAD( 、stringwidthfill DOC):

    塗りつぶし文字を使用して、左側に埋め込まれた文字列を指定された幅で返します。ターゲットの幅が文字列の長さよりも小さい場合、文字列は切り捨てられます。

  • to_string(number(doc):(フィールドが文字かどうかわからなかったため)

    数値を文字列に変換します。

  • || :2つの文字列を連結します