おとは様
こんにちは。
フィールドの数が多いようであれば、SQL(仮想レイヤ)を利用するのが有効と思います。
メニューバーの「データベース」→「DBマネージャ」を利用します。
メニューが無いようならば、先に「プラグイン」→「プラグインの管理とインストール」で管理画面を開き、
「インストール済」タブ内にある「DB Manager」にチェックを入れてください。
サンプルとしてtestdata というレイヤ名で、整数型のval1、val2、小数点型のval3、val4があり、
データテーブルの値の一部はNULLを含んでいるとします。
1.DBマネージャを開いたら、左にあるプロバイダの凡例から
「仮想レイヤ」→「プロジェクトのレイヤ」→「testdata」と辿ります。
2.F2キーを押すか、SQLウィンドウのボタンを押して、SQLクエリ入力のタブを開きます。
QGISでは
ここで説明されているように、
SQLite やSpatiaLite のエンジンが利用できます。
SQLiteには ifnull という、名前のとおり値がNULLならば別の値を返す関数があるので、これを利用します。
3.クエリの入力箇所に、
SELECT
ifnull(val1, 0) as val1,
ifnull(val2, 0) as val2,
ifnull(val3, 0.0) as val3,
ifnull(val4,0.0) as val4,
geometry
FROM testdata
と入力します。カラム名やレイヤ名の部分は適宜変更してください。
もしかしたら、変数名やカラム名はダブルクォーテーションでくくる("testdata")方が安全かもしれません。
geometry は地物がジオメトリを持っている(ポリゴンなど)の場合に使います。
データ形式によってはgeom という名前かもしれません。「テーブル」のタブで確認してください。
ジオメトリなしのテーブルの場合は、geometry と一つ上の行末尾のカンマを削除してください。
4.実行ボタンを押します。クエリ結果として、NULLの部分が0に置き換わったテーブルが表示されると思います。
ここで、「新規レイヤとして読み込む」にチェックを入れると、読み込み用のオプションが表示されます。
特に設定の必要がなければそのまま、「読み込み」ボタンを押すと、NULLデータが0に置き換わったレイヤがマップに追加されます。
5.冒頭述べたように、これは仮想レイヤ(クエリレイヤ)ですので、必要に応じてファイルやデータベース等にレイヤを保存します。
これで、レイヤの保存は1回きりでテーブルのNULLすべてを置き換えることができます。
ここまで書いておいてなんですが、データの値0 とNULL は可能なら区別して扱うのが良いように思います。
アンケートの結果で賛成数が0であるのと、アンケートが回収できていないのは異なりますし、
メッシュ雨量が0mmであるのと、雨量データが欠測となっているのは異なります。
0埋め操作はこれらを区別できなくしてしまうおそれがあります。余計な心配かもしれませんが。
新井 智之
2022年6月30日木曜日 20:37:53 UTC+9 おとは: