eyecatch

QGISで属性テーブルを一括編集!フィールド計算機の基本から実践例まで

投稿日: 最終更新日:
この記事はQGIS 3.40を使用しています。

この記事でわかること


  • フィールド計算機の基本操作と出力設定
  • 式(Expression)の文法とよく使う関数
  • 条件分岐、文字列操作、型変換、ジオメトリ関数の使用方法

こんな人におすすめ


  • QGISで属性操作を自動化したい方
  • フィールド計算機を使いこなしたい初級〜中級者

はじめに

QGISには、Excelの数式のような「式(Expression)」という機能があります。式を利用すると、属性テーブルの値を計算したり、地図上の図形を操作したり、ラベルの表示を工夫したりできます。「フィールド計算機」は、その式を使って属性テーブル内のフィールド(列)の値を一括で計算・入力できる便利なツールです。

この記事では、フィールド計算機の基本的な操作方法や、式の書き方、データの種類を変換する方法、条件によって処理を変える方法などを、わかりやすく説明します。

フィールド計算機の基本的な使い方

こちらの記事で紹介しているように、通常、属性テーブルは新規列を作成して値を一つずつ入力します。

フィールド計算機を使えば、新規列を作成し、式に基づいて全ての値を一括入力できます。

フィールド計算機の開き方

フィールド計算機を開くには、まずベクタレイヤの属性テーブルを開き、画面上部の[フィールド計算機を開く]ボタンをクリックします。

属性テーブル上部の[フィールド計算機を開く]ボタンをクリック
属性テーブル上部の[フィールド計算機を開く]ボタンをクリック

また、レイヤパネルからベクタレイヤを選択した状態で、ツールバーのアイコンをクリックしても開くことができます。

ツールバーから[フィールド計算機を開く]ボタンをクリック
ツールバーから[フィールド計算機を開く]ボタンをクリック

フィールド計算機の画面構成

フィールド計算機は、以下のような画面構成になっています。

  1. 選択中のx個の地物のみ更新:レイヤ内で地物が選択されている場合にONになります。選択されている地物だけを更新したい場合にチェックを入れます。意図しない更新を避けたい場合は、選択を解除してから実行しましょう。
  2. 出力先フィールドの設定:計算結果を新規フィールドに出力するか、既存フィールドを更新するか選択できます。新規フィールドを作成する場合は、データ型(文字列、整数、小数など)を指定する必要があります。
  3. エディタ:計算式や条件式を入力する場所です。画面下部の演算子や関数を使って式を組み立てることができます。
  4. プレビュー:入力した式の実行結果を確認できます。式に誤りがある場合は、「式が不正です」とエラーメッセージが表示されます。
  5. 関数パネル:利用可能なフィールドや関数の一覧が表示されます。関数やフィールド名を入力する際は、ここから入力すると便利です。
  6. 関数の説明:選択した関数の説明文や構文、例が表示されます。
フィールド計算機の画面構成
フィールド計算機の画面構成

フィールド計算機実行の流れ

フィールド計算機を使って人口フィールドを千人単位に変換する例をもとに説明します。

まず、属性テーブルから[フィールド計算機を開く]ボタンをクリックします。

[フィールド計算機を開く]ボタンをクリック
[フィールド計算機を開く]ボタンをクリック

フィールド計算機の画面が開いたら、まずは出力先のフィールドを設定します。

今回は、新規フィールドを作成するため、出力する属性の名前を「人口(千人単位)」、フィールド型を「小数点付き数値」に設定します。

フィールド型は、出力される結果に合わせて設定する必要があります。出力結果が文字列なのに出力先のフィールドのデータ型が数値になっているなど、データ型が異なる場合は結果が「NULL」になります。
出力先のフィールド名やデータ型を指定する
出力先のフィールド名やデータ型を指定する

次に、エディタと関数パネルを使って式を入力します。今回使用するデータには「POP_EST」という人口フィールドがあるので、これを使って計算します。

フィールド名を入力するには、関数パネルから「フィールドと値」グループを使用すると便利です。「フィールドと値」グループを開いて、人口フィールドである[POP_EST]をダブルクリックすることで、エディタにフィールド名が入力されます。

「フィールドと値」グループからフィールド名を入力する
「フィールドと値」グループからフィールド名を入力する

次に、人口の値を千人単位に変換するための計算式を入力します。エディタ下部の[/]ボタンをクリックして割り算の演算子を入力し、続けて「1000」と半角で入力します。

割り算の演算子を入力し、続けて「1000」と入力
割り算の演算子を入力し、続けて「1000」と入力

これで式の入力は完了です。プレビューにエラーメッセージが表示されていないことを確認して、[OK]ボタンをクリックします。

プレビューを確認して、[OK]ボタンをクリック
プレビューを確認して、[OK]ボタンをクリック

属性テーブルを確認すると、「人口(千人単位)」というフィールドが新しく作成され、計算結果が出力されていることがわかります。

最後に結果を保存します。処理実行後は、[保存]ボタンをクリックして編集内容を確定してください。

「人口(千人単位)」というフィールドが新しく作成されている
「人口(千人単位)」というフィールドが新しく作成されている

式の基本ルールとよく使う関数

式の基本ルール

式を記述する際には、いくつかの基本的なルールがあります。

記法

説明

数値をそのまま入力

123

数値として扱われます。

単一引用符(')で囲む

'文字列'

'123456789'

文字列として扱われます。

二重引用符(")で囲む

"NAME"

フィールド名として扱われます。

ダブルパイプ(||)

'東京' || '都'

文字列を連結します。

例:人口フィールド(POP_EST)と面積フィールド(AREA)から人口密度を計算

"POP_EST" / "AREA"

例:平方キロメートル単位の面積フィールド(AREA)を平方メートル単位に変換

"AREA" * 1000000

データ型変換関数

「型の変換」グループの関数
「型の変換」グループの関数

QGISでは、異なるデータ型間で値を変換する関数が用意されています。以下は代表的なデータ型変換関数の一覧です。

構文

内容

to_int(string)

文字列を整数型に変換

to_real(string)

文字列を実数型に変換

to_string(number)

数値を文字列に変換

例:少数の面積フィールド(AREA)を整数に変換

-- 出力例:'123.84' → 123
to_int("AREA")

例:文字列の人口フィールド(POP_EST)を数値型に変換

-- 出力例:'100' → 100
to_int("POP_EST")

文字列操作関数

「文字列」グループの関数
「文字列」グループの関数

文字列を操作する関数は、属性テーブルのテキストデータを加工する際に役立ちます。以下は主な関数の一覧です。

構文

説明

upper(string) / lower(string)

文字列をすべて大文字または小文字に変換します。

left(string, n) / right(string, n)

文字列の左端または右端からn文字分を取り出します。

replace(string, before , after)

文字列内の特定の文字列を別の文字列に置き換えます。

length(string)

文字列の文字数を取得します。

concat(string1 , string2,…)

複数の文字列を連結して1つの文字列にします。

lpad(string, width, fill)

文字の左側を指定文字(fill)で詰め、指定した幅(width)にした文字列を返します。

例:数値型のIDフィールド(id)を3桁のゼロ埋め文字列にする

-- 出力例:1 → '001'
lpad(to_string("id"),3,'0')

例:人口フィールド(POP_EST)を文字列に変換して「人」という単位をつける

-- 出力例:100 → '100人'
concat(to_string( "POP_EST" ) ,'人')
to_string( "POP_EST" ) || '人'

条件分岐

「条件」グループの関数
「条件」グループの関数

条件分岐を使うと、属性値に応じて異なる結果を出力できます。QGISでは、if関数やcase文を使って条件分岐を実装します。

構文

説明

if(条件式, 真のときの値, 偽のときの値)

単純な条件分岐に使用します。条件が真の場合と偽の場合で異なる値を返します。

case
when 条件1 then 結果1
when 条件2 then 結果2
else 結果3
end

複数の条件を扱う場合に使用します。条件を上から順に評価し、最初に真となった条件の結果を返します。

例:IF文で価格フィールド(Price)を分類

-- 出力例:5000 → 'low'
if( "Price" > 100000 ,'high','low')
IF文でPriceフィールドを分類した例
IF文でPriceフィールドを分類した例

例:CASE文で人口フィールド(POP_EST)を分類

--出力例:1000000 → 'high'
case
  when "POP_EST" <10000 then 'low'
  when "POP_EST" <100000 then 'mid'
  else 'high'
end
CASE文で人口フィールドを分類した例
CASE文で人口フィールドを分類した例
複数の条件を扱う場合、if文をネストする(段階的に条件を絞り込む)こともできますが、case文を使う方が簡潔に記述することができます。

ジオメトリ関数

「ジオメトリ」グループの関数
「ジオメトリ」グループの関数

上記の関数はExcelなどの表計算ソフトにも存在しますが、QGISには地物のジオメトリ情報を取得・計算するための関数が豊富に用意されています。以下は主なジオメトリ関数の一覧です。

構文

説明

@geometry

地物のジオメトリそのものを表します。単体では使用せず、他の関数と組み合わせて使用します。

$area

ポリゴンの面積を計算します。

$length

ラインの長さを計算します。

$perimeter

ポリゴンの外周の長さを計算します。

x(geometry)
y(geometry)

ポイントのX座標(経度)または、Y座標(緯度)を取得します。

centroid(geometry)

地物の重心点のジオメトリを返します。

start_point(geometry)
end_point(geometry)

ラインやポリゴンの始点または終点のジオメトリを返します。

buffer(geometry, distance)

ジオメトリから指定した距離のバッファを作成し、そのジオメトリを返します。

例:ジオメトリの重心座標を取得

x(centroid(@geometry))
y(centroid(@geometry))

例:ラインやポリゴンの始点・終点座標を取得

x(start_point(@geometry))
y(end_point(@geometry))

フィールド計算機を使いこなすためのTips

フィールド計算機をさらに効率的に使いこなすために、いくつかのTipsを紹介します。

式の保存と再利用

フィールド計算機の関数パネルにある「最近使った」グループから、過去に実行した式を呼び出せます。ただし、表示される式の数には限りがあります。

「最近使った」グループから、最近実行した式を呼び出すことができる
「最近使った」グループから、最近実行した式を呼び出すことができる

頻繁に使用する式は保存しておくと便利です。式を保存するには、エディタに式を入力してから、エディタ上部の[保存]ボタンをクリックします。

エディタに式を入力してから、エディタ上部の[保存]ボタンをクリック
エディタに式を入力してから、エディタ上部の[保存]ボタンをクリック

「式を保存」画面が表示されるため、適宜ラベルなどを修正して[保存]ボタンをクリックします。

適宜ラベルなどを修正して[保存]ボタンをクリック
適宜ラベルなどを修正して[保存]ボタンをクリック

保存した式を読み込むには、関数パネルより「ユーザー式」グループから利用することができます。

「ユーザー式」グループから利用することができる
「ユーザー式」グループから利用することができる

$から始まる関数について

フィールド計算機には、$area$xなど「$」(ドル記号)から始まる関数が複数用意されています。

$から始まる関数の一覧
$から始まる関数の一覧

「$」から始まる関数は、地物自体やそのジオメトリに関連する値を参照します。これらの関数は単体で機能するため、引数(具体的な値)を指定せずに関数名を入力するだけ(例:$area)で実行できます。

$areaと入力するだけで面積計算ができる
$areaと入力するだけで面積計算ができる

$areaとarea関数、$lengthとlengthの違い

QGISの式には、$areaarea$lengthlength という似た名前の関数が用意されています。 これらの関数の違いは、どの座標系や設定をもとに計算するかという点にあります。

関数

計算基準

特徴

$area

プロジェクト設定(楕円体・計測単位)

プロジェクトに設定されている楕円体と単位を使用して計算。楕円体が設定されていれば地球の曲面を考慮した楕円体上の面積を、設定されていなければ平面上の面積を計算する。

area

ジオメトリの座標系

常に平面上の面積を計算。プロジェクト設定は無視され、座標系の単位で値を返す。

そのため、$area$lengthプロジェクトごとに設定が可能な「楕円体」や「計測単位」に応じて計算方法が変わります。

$areaを使用した場合の具体例としては、以下のとおりです。

  • 楕円体に「WGS84」が設定されている場合:楕円体上(WGS84楕円体)の面積(距離)を計算します。
  • 楕円体に「None / Planimetric(楕円体なし / 平面計算)」が設定されている場合:ジオメトリの座標系に基づき、平面上の面積(距離)を計算します。

なお、プロジェクトの楕円体や計測単位は、プロジェクトのプロパティから変更可能です。 変更するには、メニューバーから[プロジェクト]→[プロパティ]を選択してプロジェクトのプロパティを開き、「全般」の「計測」から設定を変更します。

プロジェクトのプロパティから楕円体や計測単位の変更が可能
プロジェクトのプロパティから楕円体や計測単位の変更が可能

上記の違いはやや複雑ですが、都道府県や市区町村単位などの局所的な範囲のレイヤの面積を計算する場合は、レイヤを平面直角座標系に投影変換してからarea(@geometry)で面積を計算するとよいでしょう。

おわりに

この記事では、QGISのフィールド計算機を使った属性データの一括編集方法について解説しました。フィールド計算機を活用することで、手作業では時間がかかる属性の更新や計算を効率的に行うことができます。ぜひ日々の業務や分析作業に役立ててください。

この記事を書いた人
QGIS LAB編集部
QGIS LAB編集部

QGIS LABは、オープンソースのGISソフトウェア「QGIS」に関する総合情報メディアです。「位置から、価値へ。」をコンセプトに、位置情報で世界を拓くための知識と技術をお届けします。

関連する記事