QGIS フィールド計算機の使い方: 検証済みの式 24 個と落とし穴
公開日
QGIS で列を計算するには、レイヤの属性テーブルを開き、Field Calculator(フィールド計算機)のアイコン(Ctrl+I)をクリックし、新しいフィールドか既存のフィールドを選び、式を入力して OK をクリックします。ここまではすぐです。難しいのは、式がエラーなしで実行されたのに、NULL や平方度、間違ったクラスが書き込まれる場合です。
2026 年 11 月 7 日、私はインドのベンガルールにあるインディラナガル(Indiranagar)と周辺の区の実際の OpenStreetMap レイヤ(建物 8,709 棟、道路 854 本、学校 35 校、バス停 37 か所、区 10 区)で 24 個のフィールド計算機の式を実行し、それぞれについてよくある間違った書き方も並べて実行しました。以下は、正確な出力値つきの式の一覧、楕円体の基準値と比べて測ったエラーなしの落とし穴、そして最も難しい 3 つを QGIS 内の AI エージェントに任せた結果です。
QGIS のフィールド計算機とは
QGIS のフィールド計算機は、QGIS の式を使って属性テーブルの列を作成または更新する組み込みツールです。面積、長さ、座標などのジオメトリの値を計算したり、文字列を書き換えたり、CASE WHEN で行を分類したり、プロジェクト内の別のレイヤから件数や距離を取得したりできます。
実は QGIS には同じ式を実行できる場所が 4 つあり、選び間違えることが作業を失う最初の原因になります。
- Field Calculator ダイアログ(
Ctrl+I): レイヤをその場で編集します。新しい列を作ることも、既存の列を上書きすることもでき、全地物または選択した地物だけを対象にできます。変更は編集を保存するまで編集バッファに残ります。 - 仮想フィールド(ダイアログ内のチェックボックス): テーブルを開くたび、地図を描画するたびに式をその場で計算します。テスト用レイヤで建物
fid27 の形状を 2 倍にしたところ、通常の面積列は197.355のままでしたが、仮想フィールドは789.418に更新されました。注意点は、仮想フィールドが GeoPackage や Shapefile ではなく.qgsプロジェクトファイルに保存されることです。新しいプロジェクトでファイルを開くと、その列は消えています。 - Processing の "Field calculator" ツール(
native:fieldcalculator): 新しい出力レイヤを書き出し、元のレイヤには手を加えません。モデルの中で使う場合や、その場で編集したくない場合に使います。@row_numberに注意してください。ここでは0から始まり、ダイアログでは1から始まります。 - 属性テーブル上部のクイック計算バー: ダイアログを開かずに既存の列を更新します。すでに編集モードのときに、短い式をさっと実行するのに便利です。
フィールドを計算する手順
Field Calculator を開く
レイヤを右クリックして Open Attribute Table を選び、属性テーブルのツールバーにあるそろばんのアイコンをクリックします。レイヤパネルでレイヤを選択した状態なら、Ctrl+I で Field Calculator を直接開けます。
選択状態とフィールド設定を確認する
地図上で地物が 1 つでも選択されていると、 Only update N selected feature(s) がデフォルトでオンになります。レイヤ全体を計算したい場合はオフにします。 Create a new field (または Update existing field )を選び、 Output field name を設定して Output field type を選びます(小数を含む面積や長さには Decimal number (real)、整数の件数には Integer、ラベルやクラスには Text (string))。
式を書いて Preview を確認する
左側のエディタに式を入力するか、中央の関数リストを検索してダブルクリックで挿入します。OK をクリックする前に、必ずエディタの下の Preview 行を確認してください。エラーや NULL、0.0000003 のような数値が表示されたら、8,000 行に書き込む前に式を直します。
OK をクリックして編集を保存する
OK をクリックします。レイヤが編集モードでなかった場合、QGIS は自動で編集モードをオンにすると警告します。計算が終わったら、属性テーブルのツールバーにあるフロッピーディスクの Save Edits アイコンをクリックし、列をディスクに書き込みます。
道路レイヤで、道路クラスを書き込む準備ができたダイアログがこちらです。

関数名がわからないときは、中央の列の上にある検索ボックスを使います。関数ツリーが絞り込まれ、右側に引数の順序や例を含むドキュメントが表示されます。

検証済みの式の一覧
以下の式はすべて、2026 年 11 月 7 日に QGIS 3.44.15 で、ベンガルールの OpenStreetMap レイヤ(EPSG:4326 で保存、プロジェクトの楕円体は WGS 84)に対して実行しました。自分の地域のテストデータが必要なら、QGIS で OpenStreetMap データをダウンロードする方法のガイドで、建物、道路、ポイントをきれいに取得する手順を説明しています。
以下の建物の出力例は、住所と階数がある建物 fid 27、28、30、60、62 と、どちらもない fid 1、2、3 のものです。
面積、長さ、周長、座標
| やりたいこと | 貼り付ける式 | サンプルでのテスト結果 | よくある間違い(とその結果) |
|---|---|---|---|
| 建物の面積(m²、楕円体) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($geometry) はエラーなしで 0.0(約 3e-7 平方度)を返す |
| 建物の面積(m²、UTM 43N に投影) | area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 197.60, 110.99, 141.29, 219.98, 319.22 | 'EPSG:3857'(Web メルカトル)に変換すると、ここでは面積が +5.95% 大きくなる |
| 道路の長さ(m、楕円体) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($geometry) はエラーなしで 0.005681、0.000074(度)を返す |
| 道路の長さ(m、UTM 43N に投影) | length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | 616.72, 7.99, 1105.01, 9.14, 72.29 | 'EPSG:3857' に変換すると、道路の長さが中央値で +3.03% 大きくなる |
| 建物の周長(m) | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | EPSG:4326 のレイヤでは perimeter($geometry) は度を返す |
| ポリゴンの重心 X(東距、m) | x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 786714.46, 786437.79, 786237.28 | ポリゴンに $x を使うとエラーなしで NULL を返す。x_at($geometry, 0) は中心ではなく最初の頂点(77.642744)を返す |
| ポリゴンの重心 Y(北距、m) | y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643'))) | 1435359.45, 1435116.32, 1436699.32 | レイヤが EPSG:4326 のとき、y(centroid($geometry)) は度(12.97...)を返す |
| 行番号または地物 ID | @row_number または $id | 1, 2, 3, 4(ダイアログ)、fid 27 で $id は 27 | @row_number は GUI のダイアログでは 1 から、Processing の native:fieldcalculator では 0 から始まる |
$area を Decimal number (real) ではなく Integer の出力フィールドに書き込むと(Processing の Field calculator でテスト)、QGIS は切り捨てではなく四捨五入します(197.35 は 197、110.86 は 111 になります)。
条件によるクラス分け(CASE WHEN と NULL の扱い)
| やりたいこと | 貼り付ける式 | サンプルでのテスト結果 | よくある間違い(とその結果) |
|---|---|---|---|
| 面積からサイズクラスを作る | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | 未テスト |
| NULL の階数をデフォルトの整数に置き換える | coalesce(to_int("building:levels"), 1) | 4, 4, 2, 4, 3(階数が NULL なら 1) | OSM のタグは文字列として保存されているため、"building:levels" + 'a' は '4a' を返す |
| NULL を別扱いにした高さクラス | CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END | mid, mid, low, mid, mid(fid 1 は unknown) | WHEN ... IS NULL を省くと空の行がすべて ELSE に入り、階数が未入力の 7,636 棟に 'high' が付く |
文字列の整形、書式、日付
| やりたいこと | 貼り付ける式 | サンプルでのテスト結果 | よくある間違い(とその結果) |
|---|---|---|---|
| 番地と通り名を安全に連結する | concat("addr:housenumber", ' ', "addr:street") | '594 12th Main Road', '83/4 13th Main Road'(両方 NULL なら ' ') | "addr:housenumber" || ' ' || "addr:street" はどちらかの列が NULL だと NULL を返す |
道路名から接尾辞(Road、Main、Cross)を除く | regexp_replace("name", '\\s+(Road|Main|Cross)$', '') | 'Chinmaya Mission Hospital', '13th Main', '12th Main' | バックスラッシュ 1 つの \s+ は Invalid regular expression '?+(Road|Main|Cross)$' で失敗する |
| ID を 12 桁にゼロ埋めする | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | 未テスト |
| 表示用に数値を書式化する | format_number($area, 1) | '197,4', '110,9'(小数点がカンマのロケールの Mac で 3958.7 は '3 958,7') | 出力は OS のロケール(小数点のカンマと狭いノーブレークスペース)に従う文字列なので、後から計算に使えない |
| 2 つの日付の間の日数 | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) だけでは QgsInterval オブジェクトを返す。to_date('07/11/2026') は第 2 引数に 'dd/MM/yyyy' を渡さないと失敗する |
GeoPackage や Shapefile に文字列を書き込むときは、出力フィールドの長さにも注意してください。Processing で concat("addr:housenumber", ' ', "addr:street") を長さ 40 のテキストフィールドに書き込んだところ、1 本の道路(" 80 Feet Road(Sir C.V. Raman Hospital Road)")が 43 文字あったため、出力なしで処理全体が中断されました。
レイヤをまたいだ件数、合計、最近傍距離
これらの式を使うと、別途 QGIS で空間結合を実行しなくても、あるレイヤからプロジェクト内の別のレイヤを照会できます。
| やりたいこと | 貼り付ける式 | サンプルでのテスト結果 | よくある間違い(とその結果) |
|---|---|---|---|
| 各区に接する建物の数を数える | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | filter:=... を忘れると、すべての区にレイヤ全体の件数(8709)がエラーなしで入る |
| 区ごとの建物の総面積(ha) | round(aggregate('buildings', 'sum', $area, filter:=intersects($geometry, geometry(@parent))) / 10000, 3) | 0.565, 20.292, 5.605, 59.116, 1.037, 14.094, 16.646, 7.991, 21.39, 1.7 | 区の境界に接する建物の形状全体を合計するため、境界上の建物は両方の区で数えられる |
| 各区の中の学校の数を数える | array_length(overlay_contains('schools', "osm_id")) | 0, 2, 3, 18, 0, 0, 7, 3, 2, 0(合計 35) | 第 2 引数なしの overlay_contains('schools') は件数ではなく true か false を返す |
| 最寄りのバス停までの距離(m) | distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(array_first(overlay_nearest('bus_stops', $geometry)), 'EPSG:4326', 'EPSG:32643')) | 125.17, 49.39, 199.59, 158.39, 187.97, 74.67, 123.00, 226.61 | distance($geometry, array_first(overlay_nearest('bus_stops', $geometry))) は 0.001142(度)を返す |
| 建物から 300 m 以内のバス停の数 | aggregate('bus_stops', 'count', "osm_id", filter:=distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(geometry(@parent), 'EPSG:4326', 'EPSG:32643')) <= 300) | 1, 1, 4, 2, 2, 6, 7, 7 | array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)) は 300 が 300 度と解釈されるため 37(全バス停)を返す |
エラーなしで失敗するフィールド計算機の落とし穴 5 つ
YouTube の QGIS チュートリアルについた質問コメント 70 件を読みました。48 件は式の書き方に関する本物の質問で、そのうち 8 件は式が無効になる、NULL を返す、何も選択されないというものでした。もっと悪いのは誰も質問しないケースです。式が実行され、もっともらしい数値が書き込まれるからです。ベンガルールのデータで測った 5 つの落とし穴を紹介します。
1. $area と area($geometry) の違い、そしてプロジェクトの楕円体の役割
$area と area($geometry) は同じ計算ではありません。また、2026 年のあるチュートリアルは、地理座標系では $area が平方度を返すと書いています。私たちがテストしたどちらのプロジェクト設定でも、そうはなりませんでした。2026 年 11 月 7 日、EPSG:4326 のベンガルールのレイヤにある最初の建物 200 棟と道路 200 本で、両方と transform() を、楕円体 WGS 84 の基準値(QgsDistanceArea)と比べて測りました。
$areaと$lengthはプロジェクトの楕円体を使います (Project > Properties > General > Measurementsで設定)。楕円体がWGS 84なら、レイヤとプロジェクトが度(EPSG:4326)でも、$areaは正確な平方メートルを返します。- プロジェクトの楕円体を
None / Planimetricにした場合も、EPSG:4326のレイヤで$areaは平方度を返しませんでした。QGIS 3.44.15 では、200 棟の建物で +3.24% 大きすぎる 平方メートルを返しました。 area($geometry)とlength($geometry)は常にレイヤ自身の CRS での平面計算です。EPSG:4326のレイヤではarea($geometry)は平方度(住宅 1 棟で約0.0000003)を返し、通常の小数の列では0.0に丸められます。area()の前に Web メルカトル(EPSG:3857)へ変換すると、すべての建物が +5.95% 大きくなります。 ベンガルールの緯度(北緯 13°)でもそうなり、道路の長さは +3.03% 大きくなります。現地の UTM ゾーン(EPSG:32643)に変換すると、楕円体の面積との差は +0.12% 以内に収まります。
EPSG:4326 レイヤでの式(n = 建物 200 棟、道路 200 本) | WGS 84 楕円体との誤差の中央値 | 最大誤差 |
|---|---|---|
$area(プロジェクトの楕円体 WGS 84) | 0.00% | 0.00% |
$area(プロジェクトの楕円体 None) | +3.24% | +3.25% |
$perimeter(プロジェクトの楕円体 None) | +1.72% | +2.25% |
道路の $length(プロジェクトの楕円体 None) | +1.31% | +2.61% |
area($geometry) | -100.00%(平方度) | -100.00% |
道路の length($geometry) | -100.00%(度) | -100.00% |
area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | +0.12% | +0.12% |
道路の length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) | +0.06% | +0.06% |
area(transform($geometry, 'EPSG:4326', 'EPSG:3857')) | +5.95% | +5.96% |
道路の length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) | +3.03% | +3.26% |
EPSG:4326、EPSG:3857、UTM ゾーンでなぜこれほど結果が違うのかわからない場合は、QGIS の CRS とはの解説を読んでください。
2. overlay_nearest は max_distance をメートルではなくレイヤの単位で読む
overlay_nearest 関数は空間インデックスを使うので速く、便利な max_distance 引数もあります。ただし max_distance は常にレイヤの座標単位で測られます。
建物とバス停が EPSG:4326(度)のときに array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)) と書くと、QGIS は 300 度以内のバス停を探します。これは地球全体を覆うので、すべての建物が 37(レイヤ内の 37 か所すべてのバス停)になります。300 メートルのつもりで max_distance:=0.003 と見当をつけても、うまくいきません。経度 1 度と緯度 1 度はメートルでの長さが違うからです。建物 fid 62 では、0.003 は正しい 7 ではなく 8 か所を返しました。先に両方のレイヤを UTM に再投影するか、上の空間的な表の最後の行にある aggregate(..., filter:=distance(transform(...))) のパターンを使ってください。
3. NULL の行は CASE WHEN の ELSE にそのまま入る
ベンガルールのデータでは、8,709 棟のうち building:levels タグがあるのは 1,073 棟(12.3%)だけです。残りの 7,636 棟は NULL です。
CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END と書くと、NULL の行では 2 つの <= の比較がどちらも不明と評価され、その行は ELSE に入ります。階数が未入力の 7,636 棟が、警告ひとつなく高層ビルに分類されてしまいます。データに欠けがあるときは、必ず最初の分岐に WHEN "field" IS NULL THEN 'unknown' を置いてください(または ELSE を省いて、どれにも当てはまらない行を NULL のままにします)。
4. "Only update selected features" は列の残りを NULL のままにする
地図キャンバス上で地物が 1 つでも選択されていると、Field Calculator は自動的に Only update N selected feature(s) をオンにします。
ベンガルールの primary の道路 39 本を選択して、CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END を新しいフィールド road_rank に書き込んだところ、QGIS はその 39 行に 'arterial' を書き込み、残りの 815 本の道路(式で明示した secondary の道路 28 本をすべて含む)を NULL のままにしました。

5. ダブルクォートとシングルクォート("building" = "yes" が NULL を返す理由)
QGIS の式では、 ダブルクォート " " はフィールド名 を、 シングルクォート ' ' は文字列の値 を表します。
"building" = "yes" と入力すると、QGIS は building という列を探し、yes という別の列と比較します。yes という列はないので、式は NULL と評価されます(内部の QgsExpression パーサーは Field 'yes' not found を報告します)。同じように、OpenStreetMap の building:levels のように列名にコロンが含まれる場合、ダブルクォートを付け忘れると syntax error, unexpected Unknown_CHARACTER で失敗します。 Fields and Values リストでフィールド名をダブルクリックすれば、毎回正しいクォートが入ります。
構文を書かずに済ませる: 同じ計算を AI エージェントで行う
$area を手で書くのはすぐです。2 つの transform() 呼び出し、@parent のジオメトリ参照、距離のフィルタを含む入れ子の aggregate() を書くとなると、Stack Exchange に行き着くことになります。
私たちは QGIS の中にドッキングするチャットパネル AI Agent を開発しているので、この節は自社ツールの話です。開いている QGIS プロジェクトの中で動くため、Field Calculator や Processing ツールを代わりに実行する前に、レイヤ名、フィールドの型、CRS、一意の値を調べます。
2026 年 11 月 7 日、私は AI Agent(v1.9.4、Medium effort、Balanced permissions)に、テスト計画にあった複数ステップの計算 3 つを、1 チャットにつき 1 文で、EPSG:4326 のまったく同じベンガルールの 5 レイヤに対して頼みました。
| タスク | 送ったプロンプトそのもの | エージェントの所要時間 | 私たちの独立した検証との比較 |
|---|---|---|---|
| A. 近接件数 | "Add a field called bus_stops_300m to the buildings layer with the number of bus stops within 300 metres of each building." | 39 秒 | 合格。 整数フィールドを作成し、8,709 棟すべてに値が入り、EPSG:32643 での形状からバス停までの私たちの件数と不一致は 0(範囲 0 から 8)。 |
| B. 分類とスタイル設定 | "Class the buildings into low (1 or 2 levels), mid (3 or 4) and high (5 or more) from the building:levels field, store the class in a new field called height_class, and style the buildings by that class." | 18 秒 | 合格。 low 563、mid 442、high 68(1,073 棟すべてが私たちのルールと一致)。階数のない 7,636 行は NULL のまま残され、4 つ目の灰色のカテゴリ "Unknown levels" としてスタイル設定された。 |
| C. 区ごとの学校数と建物面積 | "For each ward, add the number of schools and the total building area in hectares." | 37 秒 | 合格(手法の違いあり)。 school_count は 10 区中 10 区で一致(合計 35)。building_ha は 10 区中 10 区で区境界で切り取った形状の面積と一致(合計 148.25 ha)。 |
タスク A では、エージェントは 300 度の overlay_nearest の落とし穴にはまりませんでした。ツールログを見ると、両方のレイヤを調べ、CRS を確認し、建物の形状から(重心ではなく。重心だと 667 棟で答えが変わっていました)メートル単位で計算し、回答の前に最小値と最大値を検証していました。

タスク B では、まず building:levels の一意の値を確認し、8,709 棟のうち 7,636 棟に階数がないことを見つけ、それらの行を high に入れずに height_class で NULL のままにし、地図に 4 クラスの分類スタイルを適用しました。

描画した地図を見ると、OpenStreetMap のデータで NULL の確認がなぜ大切かがよくわかります。灰色の建物は、building:levels タグが記録されていない 87.7% です。

タスク C では、エージェントの building_ha の数値は、式の一覧にある区ごとのヘクタールの行と少し違いました。New Thippasandra は 20.292 ha ではなく 20.151 ha(-0.69%)、Jeevan Bhimanagar は -0.14%、Indiranagar は -0.06% でした。理由を調べると、エージェントは私の intersects() フィルタより厳密なジオメトリの手法を使っていました。面積を合計する前に区の境界で建物ポリゴンを切り取ったので、境界をまたぐ建物が 2 つの区で重複して数えられず、回答でもそのことに触れていました。一方で、区レイヤは未確定の編集が残った編集モードのままで、回答の中で編集がまだ保存されていないと伝えていました。

編集を確定した後の区レイヤの属性テーブルがこちらです。

3 タスクは小さなサンプル(n = 3)で、フィールド名とクラスの境界を明示した明確なプロンプトを渡したので、ベンチマークではなくデモとして見てください。$area や concat() のような単純な式なら、チャットにメッセージを打つより Field Calculator ダイアログのほうが速いです。エージェントが役に立つのは、レイヤをまたいだ集計、CRS の変換、複数ステップの Processing の連鎖が必要なとき、あるいは本来なら PyQGIS スクリプトを書くようなときです。ほかのアシスタントとの比較は、QGIS AI ハブでもできます。
測定方法。 すべてのテストは 2026 年 11 月 7 日に、macOS 上の QGIS 3.44.15-Solothurn で、ベンガルールのインディラナガルの OpenStreetMap データ(範囲 12.968, 77.634, 12.986, 77.656、ODbL)を使い、プロジェクトの CRS EPSG:4326 で行いました。式の一覧の各式は、同じ地物 ID に対する独立した Python または QgsDistanceArea の計算で検証しました。面積と長さの誤差は、fid 順で最初の建物 200 棟と道路 200 本について、楕円体 WGS 84(EPSG:7030)の QgsDistanceArea と比べて測りました。AI Agent 1.9.4 は Medium effort、Balanced permissions で、タスクごとに新しいチャットで動かしました。YouTube の質問数は、25,276 件のコメントのコーパスから絞り込んだ 59 本の動画の質問コメント 70 件に基づきます。
よくある質問
QGIS で $area の計算が間違っている、または 0 になるのはなぜですか?
まず、$area ではなく area($geometry) と入力していないか確認してください。度で保存されたレイヤ(EPSG:4326)では、area($geometry) は平方度(住宅 1 棟で約 0.0000003)を返し、小数のフィールドでは 0.0 に丸められます。Project > Properties > General > Measurements でプロジェクトの楕円体を WGS 84 にして $area を使うか、area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) のように式の中で現地の UTM ゾーンにジオメトリを再投影します。EPSG:3857(Web メルカトル)は避けてください。私たちのテストでは北緯 13° でも建物の面積が +5.95% 大きくなりました。
QGIS のフィールド計算機で IF 文や CASE 文はどう書きますか?
結果が 2 つなら if(condition, value_if_true, value_if_false) を使います。例えば if($area < 100, 'small', 'large') です。3 クラス以上なら CASE WHEN ... THEN ... ELSE ... END を使います。
CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END
IS NULL の確認を最初に置いてください。そうしないと、空の値を持つ行がすべて ELSE に入ります。
フィールド計算機がすべて、またはほとんどの行で NULL を返したのはなぜですか?
よくある原因は 4 つです。
- 地図上で地物が選択されていた ため、 Only update N selected feature(s) がオンになり、選択されていない行がすべて
NULLのままになった。 ||で文字列を連結した ("addr:housenumber" || ' ' || "addr:street"など)。入力が 1 つでもNULLだと結果全体がNULLになります。代わりにconcat()を使います。- 文字列の値をダブルクォートで囲んだ (
"building" = "yes")。これは QGIS にyesという列を探させます。値にはシングルクォートを使います("building" = 'yes')。 - ポリゴンやラインのレイヤで
$xや$yを使った。$xはポイントでしか使えません。ポリゴンにはx(centroid($geometry))を使います。
QGIS のフィールド計算機でヘクタール単位の面積を計算するには?
Output field type を Decimal number (real) にし、 Precision を 2 か 3 にして、$area / 10000 と入力します(プロジェクトの面積単位が平方メートルで、プロジェクトの楕円体が Project > Properties > General で設定されている前提です)。保存する値そのものを小数第 3 位で丸めるには、round($area / 10000, 3) を使います。
フィールド計算機で選択した地物だけを更新するには?
先に地図キャンバスか属性テーブルで地物を選択してから、Field Calculator(Ctrl+I)を開きます。左上の Only update N selected feature(s) チェックボックスが自動的にオンになります。 Update existing field を選び、ドロップダウンから列を選んで式を入力し、 OK をクリックします。
で列を計算するには、レイヤの属性テーブルを開き、Field Calculator(フィールド計算機)のアイコン(

