属性値に応じて地物を絞り込もう〜QGISの便利なフィルタ機能を紹介〜
この記事でわかること
- ベクタデータのフィルタの方法
- フィルタ式の使い方
こんな人におすすめ
- 属性の値を使ってベクタレイヤを絞り込みたい方
- 必要な地物のみを表示したい方
はじめに
地図データを可視化する際に、「都道府県のポリゴンデータから特定の市町村のポリゴンだけを表示したい」とか「人口が◯◯人以上の都道府県のみを表示させたい」といった特定の条件に合致した地物のみを絞り込んで表示したいと思ったことはないでしょうか。
このような場合には、QGISのフィルタ機能を用いることで、ベクタデータの属性値に基づいて特定の値を持つ地物のみを抽出し、データを表示することができます。
この記事ではベクタデータのフィルタ機能について紹介します。
今回使用するデータの紹介
今回は、地球地図日本(国土地理院)から行政界のデータを使用して様々なフィルタをかけてみたいと思います。QGISにデータを追加すると、日本全国の市区町村が表示されます。
フィルタを使用する前に、追加したデータの属性を確認しておきましょう。
属性テーブルを確認すると、3行目の「nam」に「都道府県名」、4行目の「laa」に「市区町村名」、5行目の「pop」に「人口」の値が入っていることがわかります。
フィルタの使い方
文字列でフィルタをかける
まずは、「nam」のカラムが「Hokkai Do」となっている地物のみを表示するようにフィルタをかけたいと思います。
レイヤから、フィルタをかけたいベクタレイヤを右クリックし、[フィルタ]を選択します。フィルタ画面が表示されると画面左上の[フィールド]の項目には属性のカラム名が表示されています。
- フィールドの一覧から、都道府県名が入力されている[nam]をダブルクリックしてください。すると、画面下部のフィルタ式入力欄に
"nam"
と入力されます。 - そのまま、[すべて]をクリックすると、「nam」に入力されている属性値のリストが表示されます。[すべて]をクリックして表示される値は、画面左の[フィールド]で選択中のカラムの属性となります。
- 演算子から[=]をクリックします。
- 値の候補から、[Hokkai Do]をダブルクリックします。
"nam" = 'Hokkai Do'
上記のようにフィルタ式に入力されていることを確認して[OK]をクリックすると、地図上の地物が絞り込まれて表示されます。
属性テーブルを開いてみても、「nam」のカラムが「Hokkai Do」となっている地物の情報しか表示されていないことがわかります(本記事では、フィルタされていることがわかりやすいように日本の白地図と重ねて表示しています)。
数字でフィルタをかける
続いて、「pop」(人口)のカラムが100,000以上の地物のみを表示してみたいと思います。再びフィルタを開き、フィルタ式に入力されている文字をすべて削除してください。
- フィールドの一覧から、[pop]をダブルクリックしてください。
- 演算子から[>=]をクリックしてください。
- フィルタ式に直接、
100000
と半角で入力して、[OK]をクリックしてください。
"pop" >= 100000
「pop」の値が100,000以上の地物のみ表示されます。
フィルタ結果
様々なフィルタ式
2つ以上の条件すべてに合致する地物を表示する(AND検索)
「namがHokkai Do」かつ「popが100,000以上」というように2つ以上の条件式でフィルタをかける際には、それぞれの式を「AND」で結びます。
"nam" = 'Hokkai Do' AND "pop" >= 100000
フィルタ結果
どちらか一方の条件が合致する地物を表示する(OR検索)
複数の条件のうち、どれか1つでも条件に合致する地物を表示したい場合は「OR」を使用します。
"nam" = 'Hokkai Do' OR "nam" = 'Osaka Fu'
フィルタ結果
複数の値を一度に指定する(IN、NOT IN)
「nam」がHokkai Do、Aomori Ken、Akita Ken、Iwate Kenの値の地物を表示したい場合、それらを「OR」で繋げて、以下のように記述することも可能です。
"nam" = 'Hokkai Do' OR "nam" = 'Aomori Ken' OR "nam" = 'Akita Ken' OR "nam" = 'Iwate Ken'
しかし、これでは式がとても長くなってしまいますので、複数の値の地物を表示したい時は「IN」を使用して、以下のように記載しましょう。
"nam" IN ('Hokkai Do','Aomori Ken','Akita Ken','Iwate Ken')
フィルタ結果
「NOT IN」を使用すると、指定した値以外の地物を返します。
"nam" NOT IN ('Hokkai Do','Aomori Ken','Akita Ken','Iwate Ken')
フィルタ結果
指定した条件以外の地物を表示する(NOT、!=、<>)
「nam」がHokkai Doなどの特定の条件以外の地物を表示したい場合などは「NOT」や「!=」、「<>」を使用して式を作ることができます。
「NOT」を使用した場合。
NOT "nam" = 'Hokkai Do'
「!=」を使用した場合。
"nam" != 'Hokkai Do'
「<>」を使用した場合。
"nam" <> 'Hokkai Do'
いずれも同じ結果になります。
フィルタ結果
あいまいな文字検索(LIKE)
ある文字を含む地物を検索するときは「LIKE」を使用します。そして、ワイルドカード「_(アンダースコア)」もしくは「%」を組み合わせて、条件を指定します。
「_」は不特定の1文字の役割をします。
"nam" LIKE 'Fuku_ Ken'
上記の式では「Fuku○ Ken」となっている地物を返しますので、この場合Fukui Kenのみが該当します。
フィルタ結果
アンダースコアの数だけ不特定の文字が入る条件となるので、アンダースコア2つ使用して以下のように記述すると、Toyama Kenのみが該当して、Wakayama KenやOkayama Kenは該当しません。
"nam" LIKE '__yama Ken'
フィルタ結果
文字数に限らず不特定の文字を指定する場合は「%」を使用して、以下のように記述すると「yama Ken」の前に何文字かの文字がついている地物を返します。
"nam" LIKE '%yama Ken'
フィルタ結果
「%」を文字の後ろにつけると、その文字から始まる地物を返します。以下の式では「Yama」から始まる地物を返します。
"nam" LIKE 'Yama%'
フィルタ結果
「%」を文字の前後につけると、その文字がどこかに入っている地物を返します。以下の式では、文字列のどこかに「shima」が含まれる地物を返すので、Fukushima Ken、Hiroshima Ken、Tokushima Ken、Kagoshima Kenが返ってきます。
"nam" LIKE '%shima%'
フィルタ結果
大文字、小文字を区別しないあいまいな文字検索(ILIKE)
「ILIKE」は「LIKE」と使い方は同じですが、大文字と小文字の区別はされません。以下の式では、大文字・小文字に関わらず「shima」、「SHIMA」「Shima」などという文字が入っている地物を返しますので「Shimane Ken」も検索結果に含まれます。
"nam" ILIKE '%shima%'
フィルタ結果
よくある質問
[すべて]をクリックしても値の候補がすべて表示されない
[すべて]をクリックして表示される値の候補は、現在有効になっているフィルタによって絞り込まれた地物の候補を表示します。そのため、フィルタがかかっていると、レイヤの全ての値は表示されません。フィルタがかかっている状態で、全ての地物から値の候補を取得するには、[フィルタなしレイヤを使用]にチェックを入れて[すべて]をクリックしてください。
フィルタ式を保存して再利用したい
フィルタの設定画面で、「保存」をクリックすると、入力中のフィルタ式を保存することができます。
保存しているフィルタ式を開くときは「読み込む」から可能です。
フィルタをかけたら地物がなにも表示されなくなった
フィルタ式を入力して[OK]をクリックすると、全ての地物が表示されなくなってしまったということはないでしょうか。おそらく入力したフィルタ式の条件に該当する地物がないか、フィルタ式が間違っていることが考えられます。
[OK]をクリックする前に[テスト]をクリックすると、フィルタ式に間違いがないか、フィルタ式に該当する地物が何件ヒットするかを確認することができます。
入力したフィルタ式を検証する際にテストを活用してみると良いでしょう。
おわりに
フィルタで活用できる様々な式を紹介していきました。フィルタを活用して効率的に目的のデータを表示してみましょう。