いつかギャフンと言わせたい

平凡な会社員が、いつか周りをギャフンと言わせるための自分記録ノンジャンル記録。

【QGIS】フィールド計算機での文字列の結合、NULLの扱い。

f:id:demacassette:20160519234058p:plain:w200:rightQGISではいろんなことができますが、フリーソフトであるがゆえに正式なマニュアルが整備されていないものです。が、世界の有志がいろんなケーススタディとして、マニュアルのような情報にはアクセスできます。そんな先生サイトを参考にしつつ、今回はいつも苦戦してしまう、フィールド計算機の使い方や文字列の扱いに関して記録しておきます。

フィールド計算機とは

QGISのメニューバーにある、そろばん的なマークのやつです。

赤で囲んだ部分
f:id:demacassette:20160519113421p:plain

クリックするとこんな画面
f:id:demacassette:20160519113117j:plain

基本的な使い方

フィールド計算の結果を、新しいフィールドとして追加するか、既存フィールドを更新するかを選択できます。新しいフィールドを作る場合はこんな感じ。
f:id:demacassette:20160519233507p:plain
既存フィールドを更新する場合は、画面をお察しください。

よく使う関数

私がよく使う関数、よく忘れる関数だけのご紹介

演算子

+, -, *, /, %:普通の演算子

ま、これは一般的な関数というより演算子なのでQGISだからといって特段違いはありません。エクセルとかfortranC言語などのプログラム言語での扱いと同じです。

||:文字列を結合する

これはちょっと特殊かも。もし、"神奈川県"という県名が入ったフィールド「県」と、"横浜市"といった市名が入ったフィールド「市」を結合して、"神奈川県横浜市"というフィールドを新たに作りたければ、こうなります。

"県" || "市"

これだけです。

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を返されます。

left

エクセルでもある関数ですね。文字列の左端から文字n個分の文字列を返します.

サンプル
left('徳川家康',2) → return '徳川'


NULLの扱い

フィールド計算機でNULLを条件分岐などに使いたいときは以下のようにします。

CASE WHEN "フィールドA" IS NULL THEN "フィールドB" ELSE "フィールドC" END

NULLとは、欠損値ですので、足したり引いたり結合したり、といった処理を受け付けません!なんか憎たらしいやつなんです。エクセルでもエラーが出たら計算してくれませんし、R言語でも欠損値が入った普通の計算はしてくれません。

QGISでもNULLに対しては、女性を扱うように丁寧な態度でいきましょう。

関連図書

こんなんが参考になるかも。

QGIS入門 第2版

QGIS入門 第2版

GISを使った主題図作成講座-地域情報をまとめる・伝える

GISを使った主題図作成講座-地域情報をまとめる・伝える