商圏レポートを作る CSVで試す
タスデータ › コラム › 空間結合とは

空間結合とは?QGISでCSVの地点に市区町村を付ける手順

2026年10月10日 / 最終更新 2026年10月10日
📡
監修:タスデータ(住所・地図データの専門チーム)
住所と地図のデータを扱っている立場から、QGIS公式サイトと公式ドキュメント日本語版(QGIS 3.44)で確認できた名称と、実際のデータで判定した例をもとに整理しています(2026年10月10日時点)。

店舗や顧客、調査地点のリストに緯度経度は入っている。そこへ「どの市区町村に入っているか」「一番近い施設はどれか」を列として足したい。この作業には空間結合という名前が付いています。ここでは、空間結合が何をしている操作なのかを整理し、無料のQGISで緯度経度つきのCSVに市区町村を付けるときの設定を、論点ごとに並べていきます。先に全体像を書くと、緯度経度の入ったCSVと行政区域の面データが手元にあれば、QGISの機能2つ(CSVの読み込みと「属性の空間結合」)で市区町村の列が付きます。行政区域の面データは、国土数値情報から無料で入手できます。

この記事で使う表

例として、5つの地点が入ったCSVを使います。A列が名前、B列が緯度、C列が経度で、1行目は見出しです。

ABC
1店舗名緯度経度
2店A35.689634139.692101
3店B35.694700139.982600
4店C35.807700139.724100
5店D35.666400139.316000
6店E35.300000139.800000

目標は、この表の右側のD〜F列に、市区町村コード・都道府県・市区町村を足すことです。

論点1: 空間結合は、キーではなく位置関係で表をつなぐ

ExcelのVLOOKUPは、2つの表に同じ値が入っている行どうしをつなぎます。顧客番号、商品コード、市区町村名のように、両方の表に共通の列(キー)があることが前提です。

上の表には、市区町村につながるキーがありません。あるのは緯度と経度だけです。一方、行政区域のデータには、市区町村ごとの区域の形(面)と、その名前やコードが入っています。この2つをつなぐ手がかりは「この点は、この面の中にある」という位置関係です。

空間結合は、キーの一致の代わりに位置関係を条件にして、片方の表の列をもう片方の表へ持ってくる操作です。違いを表にすると次のとおりです。

VLOOKUP空間結合
つなぐ条件キーの値が同じ位置関係が成り立つ(中に入っている・一番近い・一定距離内)
必要なもの両方の表に共通の列両方の表に位置の情報(点の座標、面の形)
崩れる原因表記ゆれ、同名、桁数の違い座標の誤り、緯度と経度の取り違え

市区町村名をキーにして引く方法では、表記ゆれや同名の市が問題になります(住所から市区町村コードを一括で調べる方法で扱いました)。空間結合は名前を見ないので、この種類の問題は起こりません。代わりに、座標が正しいことが前提になります。

論点2: 結合の種類は、作業の言葉で3つに分かれる

空間結合という1つの名前の下に、実務では次の3種類の作業が入っています。

種類位置関係付く列の例
点が面に入っているか点が、区域の面の内側にある市区町村名、市区町村コード、営業エリア名
一番近いもの相手の点のうち、距離が最小のもの最寄り駅の名前と距離、一番近い自社拠点
一定距離内にあるもの相手との距離が、決めた値以下半径1km以内の施設の件数、半径内の人口

1つ目は結果が「内か外か」で決まり、距離の値を使いません。2つ目と3つ目は距離を計算した結果で決まります。この違いは、論点7の座標参照系の話に関わってきます。

この記事では、1つ目の「点が面に入っているか」をQGISで行う設定を扱います。2つ目と3つ目のうち、拠点が数か所・顧客が数百件という規模の作業は、Excelの関数だけで完結します。式はエクセルで一番近い店舗を求める方法にまとめてあります。

論点3: 道具はQGIS。無料で、この記事の名称は3.44のもの

QGISはオープンソースの地理情報システムで、公式サイトのダウンロードページから無料で入手できます。ライセンスはGNU General Public License(GNU GPL)です。対応しているのはWindows(64bitのみ)、macOS、Linuxの各ディストリビューションなどです。

2026年10月10日時点で、ダウンロードページには最新版の4.2.3と、長期リリース(LTR)の3.44.15が並んでいます。この記事に出てくるメニュー名・項目名は、QGIS公式ドキュメント日本語版の3.44の表記です。長期リリースの3.44系が、この表記に対応する版です。

用意するデータは2つです。

面のデータの入手先: 国土数値情報「行政区域データ」

面の側は、国土交通省の国土数値情報で公開されている「行政区域データ」が使えます。全国の行政界に、都道府県名・市区町村名・全国地方公共団体コードなどを付けたデータで、タスデータもこのデータで市区町村を判定しています。ダウンロードページに書かれている内容は次のとおりです。

項目内容
形状面
座標系世界測地系(JGD2011)の緯度経度
形式GML形式・シェープファイル形式・GeoJSON形式
範囲全国のデータと、都道府県別のデータ
時点最新は2025年(令和7年)1月1日時点
利用条件オープンデータ(CC BY 4.0)

この記事で使う属性は3つです。N03_001が都道府県名、N03_004が市区町村名、N03_007が5桁の全国地方公共団体コードです。地点が1つの県に収まっている場合は、都道府県別のデータで足ります。出典の書き方はオープンデータを商用利用するときの出典表記のやり方で整理しています。

面のデータをQGISで開く

ダウンロードしたファイルは、メニューの「レイヤ ► レイヤの追加 ► ベクタレイヤの追加」で開けます。ソースタイプで「ファイル」を選び、ファイルを指定して「追加」を押します。ファイルをQGISの地図の画面やレイヤパネルへドラッグ&ドロップする方法でも追加できます。

論点4: CSVを「点」として読み込む

CSVは、そのままでは緯度と経度という数字の列が入った表です。QGISでは、読み込むときにどの列が座標なのかを指定すると、各行が地図上の点になります。

メニューは「レイヤ ► レイヤの追加 ► CSVテキスト」です。開いたダイアログで、次の項目を指定します。

ダイアログの項目例の表での指定
ファイル形式読み込むファイルの区切り方に合わせる
エンコーディングCSVを保存したときの文字コード
ジオメトリ定義「ポイント座標」
X属性経度(C列)
Y属性緯度(B列)
ジオメトリのCRS緯度経度で位置を表す地理座標系
Xが経度、Yが緯度です。Xは東西(横)方向、Yは南北(縦)方向の位置で、東西の位置を表すのが経度、南北の位置を表すのが緯度だからです。例の表では、35台の数字が緯度(Y)、139台の数字が経度(X)です。例の表のように列が「緯度、経度」の順に並んでいる場合、左から順にX・Yへ割り当てると逆になります。

取り違えた場合、例の表では緯度が139度台、経度が35度台の点になります。緯度は90度までしか無いので、これは地球上に存在しない位置で、次の論点5の結合ではどの面にも入りません。結合の結果が全行で空になったときは、X属性とY属性が入れ替わっていないかが最初の確認点になります。

論点5: 「属性の空間結合」で、点に市区町村の列を付ける

使うのは「属性の空間結合」です。メニューでは「ベクタ ► データ管理ツール」の中にあり、プロセシングツールボックスにも同じ名前で入っています。設定する項目と、例の表での指定は次のとおりです。

項目指定理由
地物を結合するレイヤCSVから作った点のレイヤ列を足したいのは点の側
空間的関係「含まれる」点が面に含まれる、という向き
比較対象行政区域の面のレイヤ列を持ってくる元
結合するフィールドN03_001(都道府県名)・N03_004(市区町村名)・N03_007(コード)指定しないと、面の側の全フィールドが追加される
結合型「最初に合致した地物の属性のみを取得(1対1結合)」元のCSVと行数を変えない
結合対象がなかった地物を破棄有効にしないどの面にも入らなかった点を、結果に残す
コピーしたフィールドの接頭辞空欄、または「area_」など元の列と見分けたいときに付ける

「含まれる」と「含む」は向きが逆

公式ドキュメントは「空間的関係」を、ソース地物がターゲット地物との間に持っている場合に結合される、空間関係の種類と説明しています。上の指定では、ソースが点、ターゲットが面です。点の側から見た関係は「面に含まれる」なので、選ぶのは「含まれる」になります。「含む」は面が点を含むという、面の側から見た関係です。選択肢にはほかに「交差する」「等しい」「接触する」「重なる」があります。

結合型は、行数を変えないものを選ぶ

結合型の選択肢は3つあります。

元のCSVに列を足して返す、という目的では、行数が変わらない1対1の結合型が合います。

結果

結合すると、点のレイヤに面の側の列が足されます。例の5点を、国土数値情報の行政区域データに対して「点が面に含まれるか」で実際に判定した結果が、色の付いたD〜F列です。

ABCDEF
1店舗名緯度経度市区町村コード都道府県市区町村
2店A35.689634139.69210113104東京都新宿区
3店B35.694700139.98260012204千葉県船橋市
4店C35.807700139.72410011203埼玉県川口市
5店D35.666400139.31600013201東京都八王子市
6店E35.300000139.800000

D〜F列の見出しは内容を表す名前にしてあります。QGISの結果では、面のデータが持っているフィールド名(N03_007・N03_001・N03_004。接頭辞を指定した場合は、その接頭辞つき)で列が付きます。

店Eは、どの市区町村の面にも入らなかった点です。「結合対象がなかった地物を破棄」を有効にしていないので、行は残り、足された列だけが空になります。空の行は、座標が区域の外(海上など)を指している行で、緯度経度の入力誤りを見つける手がかりになります。この項目を有効にすると店Eの行そのものが結果から消え、元のCSVと行数が合わなくなります。

結果をファイルに保存する

結合の結果は、QGISの中に新しいレイヤとしてできます。Excelで開ける形にするには、そのレイヤを右クリックして「エクスポート ► 地物の保存...」を選びます。「ベクタレイヤを名前を付けて保存」のダイアログが開くので、形式にCSVを選び、ファイル名と文字コードを指定して保存します。

論点6: 向きを逆にすると「市区町村ごとの件数」になる

ここまでは、点の側に面の列を足しました。逆に、面の側に点の情報を集計して足すこともできます。「市区町村ごとに店舗が何件あるか」「エリアごとの売上の合計」という表がこれに当たります。

QGISには「空間結合(集計つき)」という別の機能があり、「計算する集計関数(すべて計算する場合は空のまま)」という項目で集計の種類を選びます。選べるのは、個数、ユニーク数、最小値、最大値、範囲、合計、平均、中央値、標準偏差、最稀値、最頻値、第1四分位、第3四分位、四分位範囲などです。

例の表で市区町村ごとの店舗数を数える場合は「個数」を選ぶことになります。店A〜Dはそれぞれ別の市区町村に入っているので、新宿区・船橋市・川口市・八王子市が1件ずつ、という結果になります。

「点に列を足す」のか「面ごとに集計する」のかで、使う機能が分かれます。作りたい表の1行が地点なのか、エリアなのか、という問いで区別できます。

論点7: 座標参照系と距離の単位

CSVを読み込むときに「ジオメトリのCRS」という項目がありました。CRSは座標参照系のことで、座標の数字が何を表しているかの取り決めです。QGIS公式の「やさしいGIS入門」は、次の2種類を説明しています。

種類位置の表し方単位
地理座標系緯度と経度度
投影座標系互いに直交する2軸のXY平面通常はメートル

緯度経度のCSVから作った点のレイヤは、地理座標系のレイヤです。論点2の整理に戻ると、「点が面に入っているか」は内か外かで結果が決まり、距離の値を使いません。距離の値を使わないので、座標の単位が度であることは、内か外かの結果に影響しません。

「一番近いもの」「一定距離内にあるもの」は、距離の値で結果が決まります。地理座標系の座標は単位が度なので、500mや1kmというメートルの条件とは単位が合いません。メートルで距離を扱いたいときは、単位がメートルの投影座標系にレイヤを変換してから計算する、という方法があります。QGISで座標参照系を変換する機能の名前は「レイヤの再投影」です。

投影座標系にも種類があり、「やさしいGIS入門」は、地図上で距離の計測を正確にしたい場合は距離精度の高い投影法を使う、面積計算には正積図法が適する、と書いています。距離の精度を求める作業では、どの投影座標系に変換するかも選ぶ対象になります。

論点8: 件数や頻度が増えたとき、緯度経度が無いとき

緯度経度の入ったCSVが手元にあり、市区町村を付ける作業が1回で終わるなら、ここまでの方法で足ります。QGISは無料なので、費用もかかりません。

この方法が前提にしているものは3つあります。

住所しか無い、毎月リストが更新される、最寄り駅や半径内の人口も同時に付けたい、という条件が重なったときの選択肢の1つがタスデータです。CSVをアップロードすると、緯度経度・最寄り駅・市区町村コード・半径内の人口などの列が、元の表の右側に追加されて返ります。地図の画面は持っていません。

タスデータが行っている処理は、論点2の3種類にそのまま対応します。市区町村コードの判定は「点が面に入っているか」、最寄り駅(一番近い駅とその距離)は「一番近いもの」、半径内の人口・世帯数と周辺施設の件数は「一定距離内にあるもの」です。半径内の人口・世帯数は、円にかかるメッシュの値を面積で按分して合計しています。

住所の列があるCSVをアップロードすると、市区町村コード・最寄り駅・半径内の人口などの列が右側に追加されて返ってきます。
無料アカウントで毎月100行まで使えます。

CSVに列を追加する →

住所1つだけ確かめたいなら 商圏レポート(住所を入れるだけ・無料) でも市区町村を確認できます。

まとめ

関連記事・ツール
GISとは? — 「地図版のExcel」でできること
住所から緯度経度がわかる仕組み(ジオコーディング入門)
住所から市区町村コードを一括で調べる方法
最寄り駅を一括で調べる方法
エクセルで一番近い店舗を求める方法
商圏人口の計算方法
オープンデータを商用利用するときの出典表記のやり方
住所1つで商圏レポートを作る(無料)