【QGIS】フィールド計算機での文字列の結合、NULLの扱い。
QGISではいろんなことができますが、フリーソフトであるがゆえに正式なマニュアルが整備されていないものです。が、世界の有志がいろんなケーススタディとして、マニュアルのような情報にはアクセスできます。そんな先生サイトを参考にしつつ、今回はいつも苦戦してしまう、フィールド計算機の使い方や文字列の扱いに関して記録しておきます。
基本的な使い方
フィールド計算の結果を、新しいフィールドとして追加するか、既存フィールドを更新するかを選択できます。新しいフィールドを作る場合はこんな感じ。
既存フィールドを更新する場合は、画面をお察しください。
よく使う関数
私がよく使う関数、よく忘れる関数だけのご紹介
演算子
+, -, *, /, %:普通の演算子
ま、これは一般的な関数というより演算子なのでQGISだからといって特段違いはありません。エクセルとかfortranやC言語などのプログラム言語での扱いと同じです。
||:文字列を結合する
これはちょっと特殊かも。もし、"神奈川県"という県名が入ったフィールド「県」と、"横浜市"といった市名が入ったフィールド「市」を結合して、"神奈川県横浜市"というフィールドを新たに作りたければ、こうなります。
"県" || "市"
これだけです。
LIKE, IS:一致するなら1を返す
これは、文字列に特化した関数だと思います。条件分岐の際にも用いられるでしょう。
- LIKE・・・最初の引数が指定されたパターンと一致する場合に1を返します. 数値にも対応しています.
サンプル
'A' LIKE 'A' → 1を返す
'A' LIKE 'a' → 0を返す
'A' LIKE 'B' → 0を返す
- IS・・・a が b と同一の場合 1 を返します.
サンプル
'A' IS 'A' → returns 1
'A' IS 'a' → returns 0
AND, OR
これは条件分岐のための演算子だと思っています。
- AND・・・「条件aと条件bが真(true)である場合に1を返します.」
- OR・・・「条件aがtrueか、または条件bがtrueのときに1を返します. 」
単純に使えます。
条件
CASE ELSE
エクセルでいうif関数です。
もしフィールドAが数値BならC、そうでなければDとしたい場合は、
CASE WHEN "A"=B THEN 'C' ELSE 'D' END
と記述します。
変換
toint, toreal, tostring
これは、フィールドの型を変換する関数です。単純に、
- toint・・・整数に変換
- toreal・・・実数に変換
- tostring・・・文字列に変換
文字列
文字列の扱いは、結構苦手意識もあるのですが、慣れたら可愛いものです。
concat
と何が違うのか??と思う関数です。文字列にNULLが含まれると結果もNULLになってしまいます。 |
使い方は、
concat(文字列A,文字列B,文字列C,・・・)
といった感じで、3つ以上の文字列フィールドを結合させることができます。ただし、一つでもNULL(欠損値)が入っているとNULLを返されます。
NULLの扱い
フィールド計算機でNULLを条件分岐などに使いたいときは以下のようにします。
CASE WHEN "フィールドA" IS NULL THEN "フィールドB" ELSE "フィールドC" END
NULLとは、欠損値ですので、足したり引いたり結合したり、といった処理を受け付けません!なんか憎たらしいやつなんです。エクセルでもエラーが出たら計算してくれませんし、R言語でも欠損値が入った普通の計算はしてくれません。
QGISでもNULLに対しては、女性を扱うように丁寧な態度でいきましょう。
関連図書
こんなんが参考になるかも。
- 作者: 今木洋大,岡安利治
- 出版社/メーカー: 古今書院
- 発売日: 2015/09/04
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
- 作者: 球児巣 史郎
- 発売日: 2015/08/31
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: 島?彦人,古屋貴司,桐村喬,星田侑久,浦川豪
- 出版社/メーカー: 古今書院
- 発売日: 2015/10/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る