eyecatch

QGISの空間結合の基礎と実践〜位置関係を活用したデータ分析入門〜

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

この記事でわかること


  • GISにおける空間結合の基本概念
  • QGISを使った空間結合の実践方法

こんな人におすすめ


  • 空間結合の概念を理解したい方
  • QGISで空間結合を実行する手順を学びたい方
  • 複雑な空間的関係に悩み、空間結合がうまくできなかった方

はじめに

GISを使った分析において、異なるレイヤ間でデータを組み合わせることが必要になることがあります。たとえば、「各市区町村にある病院の数を調べたい」といった場面では、位置情報を基にしたレイヤの結合が不可欠です。

空間結合は、このような空間的な関係性を利用してレイヤを統合する機能です。単純な属性値での結合とは異なり、地物同士の空間的関係(交差、包含、等しいなど)を判定基準として使用します。

この記事では、空間結合の基本概念からQGISでの実践方法まで、実例を交えながら解説します。

空間結合とは?

空間結合とは、2つの地物の空間的関係を判定し、条件を満たす地物同士の属性情報を結合する処理です

例えば、市区町村ごとの病院数を集計したい場合を考えてみましょう。市区町村の形状をポリゴンで表現した行政区域レイヤと、医療機関の位置を点で表現したレイヤがあるとします。ただし、医療機関レイヤには所在する市区町村名が属性として含まれていません。このような場合に空間結合を使うと、医療機関の点データが行政区域のポリゴン内に位置しているかを判定し、医療機関が所在する市区町村名を医療機関レイヤの属性に追加できます。これにより、どの市区町村にどの医療機関があるかが一目で把握できるようになります。

空間結合の例。医療機関レイヤに市区町村の属性を付与
空間結合の例。医療機関レイヤに市区町村の属性を付与

空間的関係の種類

この章では、空間結合するにあたり重要な概念となる「空間的関係」について説明します。

空間結合では、2つの地物がどのような位置関係にあるかを判定基準として、レイヤの属性を結合します。このような判定基準となる地物の関係を「空間的関係」とQGISでは呼びます

結合されるレイヤと結合するレイヤの関係がややこしいので、この章ではQGISのウィンドウで使われている「地物を結合するレイヤ」「比較対象」という言葉を使って説明します。「地物を結合するレイヤ」とは空間結合をする際に属性を追加したいレイヤを指し、「比較対象」とは空間結合する際に属性を取得するレイヤをそれぞれ指します。

例えば、医療機関レイヤに行政区域レイヤの市区町村名を追加したい場合には、「地物を結合するレイヤ」として医療機関レイヤを、「比較対象」として行政区域レイヤをそれぞれ指定することになります。

空間結合のウィンドウ。2つのレイヤを用途に応じて「地物を結合するレイヤ」「比較対象」にそれぞれ指定する必要がある
空間結合のウィンドウ。2つのレイヤを用途に応じて「地物を結合するレイヤ」「比較対象」にそれぞれ指定する必要がある

QGISでは、空間結合を行う際に空間的関係として以下の8つから選択することができます。

交差する(intersect)

交差する(intersect)は、「地物を結合するレイヤ」の地物が「比較対象」の地物に一部でも重なっている、または、地物同士が接している場合に満たされる関係です。含む(contain)、含まれる(within)、接触する(touch)、重なる(overlap)や交差する(cross)といった空間的関係を内包しています。

交差(intersect)の例
交差(intersect)の例

含む(contain)・含まれる(within)

「含む(contain)」関係とは、「地物を結合するレイヤ」の地物の領域が「比較対象」の地物を含んでいる場合に満たされる関係を指します。

逆に「地物を結合するレイヤ」の地物が「比較対象」の地物に含まれている関係を「含まれる(within)」といいます。「含まれる(within)」関係は「地物を結合するレイヤ」と「比較対象」との関係が「含む(contain)」と逆転したものになっています。

例えば、図書館と行政区域のレイヤを使い、所在する市区町村を図書館レイヤへ追加したい場合には「含まれる」関係が、逆に所在する図書館の情報を行政区域レイヤへ追加したい場合には「含む」関係が、それぞれ適用できます。

含む(contain)・含まれる(within)の例
含む(contain)・含まれる(within)の例

離れている(disjoint)

「離れている(disjoint)」は、地物同士が離れている場合に満たされる関係です。

離れている(disjoint)の例
離れている(disjoint)の例

等しい(equal)

「等しい(equal)」は、地物同士の形、位置の双方共に等しい場合に満たされる関係です。

等しい(equal)の例
等しい(equal)の例

接触する(touch)

「接触する(touch)」は、「地物を結合するレイヤ」の地物と「比較対象」の地物が境界線で接している場合に満たされる関係です。この関係は、行政区域データを使って隣接する市区町村や都道府県を属性に追加したい場合に有用です。

接触する(touch)の例
接触する(touch)の例

重なる(overlap)

「重なる(overlap)」という関係は、2つの同じ次元の地物のそれぞれ一部が重なっている場合に、条件を満たします。

例えば、複数の市区町村に重なっている建物だけを分析する場合などに適用できるでしょう。

重なる(overlap)の例
重なる(overlap)の例

交差する(cross)

「交差する(cross)」とは、2つの地物の一部が重なっている場合に満たされる関係です。この関係は主にライン同士、またはラインとポリゴンを比較する場合に使用されます。例えば、「道路に対してどのような名前の河川が通っているか?また何本通っているか?」といった分析に活用できます。

線同士における交差する(cross)関係の一例
線同士における交差する(cross)関係の一例

なお、「交差する(intersect)」と比較すると、「交差する(cross)」はより限定的な関係です。ライン同士の場合は交差部分が点である必要があり、ラインとポリゴンの場合は交差部分が線である必要があります。

線とポリゴンにおける交差する(cross)関係の一例
線とポリゴンにおける交差する(cross)関係の一例

空間的関係を理解するコツ

空間的関係を理解するための簡単な方法は、次のように考えることです。

「地物を結合するレイヤが、比較対象のレイヤに対してどんな位置関係にあるか?」

例えば、医療機関に行政区域の情報を追加したい場合は「医療機関の点が行政区域のポリゴンに含まれているか?」と考えます。したがって、この場合の空間的関係は「含まれる(within)」を選択します。

なお、各空間的関係の詳細については公式ドキュメントをご参照ください。

空間結合の実践

この記事では、空間結合の実践例として、鉄道駅データに市区町村の値を付与し、特定の市区町村の鉄道駅だけをフィルタリングする方法を紹介します。

データを取得する

まずはデータを取得し、QGISに追加します。市区町村のデータと鉄道駅のデータは、いずれも国土数値情報ダウンロードサイトで公開されている「行政区域データ(東京都)」と「鉄道データ」を使用します。

鉄道データには複数のシェープファイルが含まれているため、_Station.shpで終わる鉄道駅データのファイルを使用します。なお、国土数値情報の鉄道駅データは駅を線として表現しているため、この記事では、プロセシングツールの「重心」機能を使って点に変換したデータを使用しています。

国土数値情報データをQGISに追加する方法については以下の記事をご覧ください。

データを追加して、以下のような状態になっていれば準備は完了です。

行政区域レイヤをQGISに追加し、鉄道駅レイヤの重心を作成した状態(地理院タイルを背景に、「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)
行政区域レイヤをQGISに追加し、鉄道駅レイヤの重心を作成した状態(地理院タイルを背景に、「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)

鉄道駅データに行政区域データを空間結合

まず、鉄道駅データの属性テーブルを確認しましょう。路線名や運営会社、駅名といった属性はあるものの、駅が所在する市区町村を示す属性はないことが分かります。

空間結合前の鉄道駅レイヤの属性テーブル(「国土数値情報(鉄道データ)」(国土交通省)を加工して作成)
空間結合前の鉄道駅レイヤの属性テーブル(「国土数値情報(鉄道データ)」(国土交通省)を加工して作成)

次に、行政区域レイヤの属性テーブルも確認しましょう。「N03_004」に市区町村名が格納されていることがわかります。

行政区域レイヤの属性テーブル(「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)
行政区域レイヤの属性テーブル(「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)

そこで、空間結合を使い、鉄道駅レイヤの属性に市区町村の情報を追加します。空間結合のウィンドウは以下の方法のいずれかで開くことができます。

  • 画面上のメニューバーから[ベクタ]→[データ管理ツール]→[属性の空間結合]を選択
  • プロセシングツールボックスから[ベクタ一般]→[属性の空間結合]を選択
空間結合ウィンドウの開き方(地理院タイルを背景に、「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)
空間結合ウィンドウの開き方(地理院タイルを背景に、「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)

空間結合のウィンドウでは、以下のように操作します。

  1. 地物を結合するレイヤ:[鉄道駅]レイヤを選択。鉄道駅レイヤの属性に行政区域レイヤの属性を追加したいため
  2. 空間的関係:[含まれる(within)]を選択。「鉄道駅の点が行政区域のポリゴンに含まれるかどうか」を条件としたいため
  3. 比較対象:[行政区域]レイヤを選択
  4. 結合するフィールド:[•••]ボタンをクリックして[N03_004]を選択。これは行政区域レイヤに含まれる属性のうち、「市区町村名(N03_004)」を結合したいため
  5. 結合型:[最初に合致した地物の属性のみを取得(1対1結合)]を選択。今回鉄道駅を点に変換したデータを使用しており、複数の行政区域に属していることはないため
  6. 上記の設定が完了したら、[実行]ボタンをクリック
属性の空間結合画面
属性の空間結合画面

空間結合したレイヤの属性テーブルを開いて結果を確認してみましょう。鉄道駅データの属性に、行政区域レイヤの市区町村名を示す属性(「結合するフィールド」で指定した属性)が追加されているのが確認できます。

空間結合した後の鉄道駅レイヤの属性テーブル。所在する市区町村が追加されている(「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工し作成)
空間結合した後の鉄道駅レイヤの属性テーブル。所在する市区町村が追加されている(「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工し作成)

ここまでの手順で、空間結合が正常に完了したことを確認できました。

最後に、フィルタ機能を活用して特定の市区町村の駅だけを表示してみましょう。例えば、"N03_004" = '大田区'というフィルタ条件を設定すると、大田区内に位置する駅のみを抽出できます。フィルタ機能の詳しい使い方については、以下の記事をご参照ください。

フィルタ機能を使い、大田区内の鉄道駅のみ表示している画面(地理院タイルを背景に、「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)
フィルタ機能を使い、大田区内の鉄道駅のみ表示している画面(地理院タイルを背景に、「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工して作成)

空間結合の結合型について

空間結合のプロパティとして指定した「結合型」には3つの選択肢があります。選択する項目によって結果が変わるため、分析の目的に応じて適切に選択しましょう。

マッチした地物ごとに地物を作成(1対多結合)

「地物を結合するレイヤ」の地物と「比較対象」の地物とが複数回一致する場合に、それぞれ独立した新しい地物として出力する結合方法です。結果として、結合前の「地物を結合するレイヤ」の地物数が「比較対象」の地物の数だけ作成されるため、出力される地物数が増える可能性があります。

行政区域レイヤに鉄道レイヤを結合した場合の属性テーブル。千代田区のデータが複数行存在し、それぞれに異なる路線名と駅名が追加されている(「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工し作成)
行政区域レイヤに鉄道レイヤを結合した場合の属性テーブル。千代田区のデータが複数行存在し、それぞれに異なる路線名と駅名が追加されている(「国土数値情報(鉄道データ)」(国土交通省)、「国土数値情報(行政区域データ)」(国土交通省)を加工し作成)

最初に合致した地物の属性のみを取得(1対1結合)

「地物を結合するレイヤ」の1つの地物に対して、「比較対象」のレイヤの中から最初に合致した(QGISが最初に検出した)地物の属性のみを結合する方法です。結果として、出力される地物数は「地物を結合するレイヤ」の地物数と等しくなります。

複数の結合対象が存在する場合、「比較対象」のどの地物と結合されるか予測できないため、注意が必要です。

もっとも重なる地物の属性のみ(1対1)

「地物を結合するレイヤ」の1つの地物に対して、「比較対象」のレイヤの中で、空間的に最も重なりが大きい(オーバーラップする面積または長さが最大)地物の属性のみを結合する方法です。結果として、出力される地物数は「地物を結合するレイヤ」の地物数と等しくなります。

おわりに

この記事では、空間結合の基本概念から実際の操作方法まで解説しました。

空間結合は、GISにおける様々な分析の基礎となる重要な処理です。この記事で紹介した基本操作を応用することで、より複雑な空間分析にも取り組めるようになります。空間結合機能をマスターすれば、位置情報を活用したデータ分析の可能性が大きく広がります。

ぜひ積極的に活用してみてください。

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

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

関連する記事