QGIS3 – 都道府県区域への融合

概要

国土数値情報で読み込み市区町村単位でマルチパート化したポリゴンを、都道府県単位にまとめる。

複数のポリゴンの接する境界をなくしてひとつながりのポリゴンとするため、Dissolveという処理を行う。

令和4年度の行政区域データでは「無効なジオメトリ」のために処理ができなかったため、これを無視する手順も記録した。

Dissolve処理~無効なGeometryで停止

Dissolve(融合)はメニューの「ベクタ」→「融合(dissolve)」を選択する。

すると以下のようなダイアログが表示される。

ここでポリゴンを融合するキーを選択するため、「基準となる属性」を選んでいく。右にある”…”をクリックするとパラメーター選択の表示になるので、都道府県の属性N03_001にチェックを入れてOKをクリック。

もとのダイアログに戻るので「実行」ボタンをクリック。ところが、この時点で以下のようなエラーが出て処理が停止した。

無効なジオメトリがあるので処理が停止したとのこと。これを確認してみたが、無効な部分を最大に拡大しても特に交差しているなどの形は見られなかった。

無効なジオメトリーの無視設定

ここではプロセッシングツールで無効なジオメトリーを無視するよう設定した。この設定では無効なジオメトリーを修正はせず、無視して実行が続けられる。

都道府県単位の融合結果

上記の設定後にDissolve処理を実行すると、警告は表示されるものの処理は続行されて完了。以下のように都道府県単位にポリゴンがまとめられた。

なお、新たにまとめられた都道府県のポリゴンが入っているレイヤーが作成されるが、一時レイヤーの場合はこれを保存しておく。

属性テーブルを確認すると、以下のように都道府県に対応する47個のオブジェクトにまとめられている。

ただしまとめられたオブジェクトの属性は、たまたま先頭にあったレコードのものが用いられる。このため自治体コードは市区町村のものだったり、NULLであったりする。

 

QGIS3 – 無効なジオメトリ―の無視

Dissolveで停止

QGISで国土数値情報の行政区域を市区町村単位でマルチパート化し、都道府県単位に融合しようとしたところ、以下のような警告が出て処理が停止した。

メニューから「ベクタ」→「ジオメトリツール」→「有効性チェック」で無効な部分を表示させたが、最大限拡大しても交差等の異常は見つけられなかった。

そこで、次の方法で無効なジオメトリ―を無視して処理を続行させるように設定したところ、Dissolveが完了した。

無効なジオメトリーの無視

まず、メニューから「プロセッシング」→「ツールボックス」を選択。

すると画面右側にプロセッシングツールが表示されるので、オプションアイコンをクリック。

オプションの「無効な地物のフィルタリング」が、デフォルトでは「・・・アルゴリズムの実行を停止する」になっているので、これをダブルクリックして「不正なジオメトリの地物を無視」を選択する。

そして再度Dissolveを実行すると、以下のように警告がずらりと表示されるが、処理は進んでいく。

そして都道府県単位での融合が完了した。

無効なジオメトリーの確認

ただし無効なジオメトリーは修正していないので、都道府県境界上にそのような個所があれば、無効な状態のまま残っている可能性がある。

ベクタ→ジオメトリツール→有効性チェックで確認したところ、無効なジオメトリーや「不正なジオメトリの出力レイヤ」と「エラー部分の出力レイヤ」には何も存在しなかった。

 

 

QGIS – 行政区域データ – マルチパート化

概要

同じ基礎自治体(市区町村)に島や飛び地がある場合、複数のポリゴンが同一の市区町村名を持つ。国土数値情報から行政区域データを読み込んだ段階では、これらは別々のオブジェクトとなっている。

一つの市区町村に複数の領域がある場合、市区町村単位でこれをまとめて扱いたい。このようなときは、同じ属性を持つ地物を一つにまとめて扱うマルチポリゴン化を行う。

一つの市区町村に複数の領域がある例

埋立地

碧南市はシンプルな例で、本体のエリアのほかに海上の大きな埋立地がある。これらは属性テーブルでは2つのデータに分かれている。

以下は本体の方。

こちらは埋め立て地の方で属性は全て上と同じだが、異なるIDを持つ別の地物となっている。このような例は、埋め立て地のほか大規模な堤防にも見られる。

島や岩場

日本の海岸によくある例で、沿岸に島・岩が多数あり、それらが同じ市区町村の領域となっている。細かい多数の岩が全て館山市の区域。

飛び地

府中市に接する小金井市の中にある東京自治会館だけ、府中市の飛び地となっている。黄色い区域の周りは小金井市、そのすぐ左・下に府中市の本体がある。

市区町村区域のマルチポリゴン化の概要

上記のような島や飛び地など複数のポリゴンを一つのオブジェクトとしてまとめるために、マルチポリゴン化を行う。

その手順中、マルチポリゴンでまとめるキーの属性を指定するが、市区町村単位でまとめた場合、所属未定地の扱いと同名市区町村が問題となる。

所属未定地・同一区名・政令市の扱いの問題

所属未定地の問題

現状のままで市区町村名をキーにしてマルチポリゴン化すると、全都道府県の「所属未定地」が1つのオブジェクトになってしまう。

たとえば以下のように千葉県に1箇所、所属未定地があることがわかる(ここでは属性名をAliasで付け直している)。

また東京都には多くの境界未定地が存在している。

このままmunicipalityをキーとしてマルチポリゴン化すると、千葉県・東京都その他すべての都道府県の所属未定地が一つにまとめられてしまう。

これを都道府県ごとの所属未定地とするためには、都道府県名(prefecture)と市区町村名(municipality)をつなげた属性を新たに設ければよい。

同名市区町村の問題

同一名称の市区町村は多数あって、たとえば「池田町」は北海道・福井県・長野県・岐阜県に存在する(2022年時点)。また東京都の特別区や政令市の区の名前もここに現れるが、北区や緑区などは複数存在する。

さらに、同一県内に同名の市区町村が存在する場合もある。たとえば神奈川県横浜市と相模原市の両方に緑区があり、横浜市と相模原市のいずれにも南区がある。このためmunicipalityだけでマルチポリゴン化すると、緑区や南区が1つにまとめられてしまう。

この場合はprefecturemunicipalityだけでは不十分で、政令市名が入るcity_or_countyも含める必要がある。

政令市の扱いの問題

地理院のデータでは政令市内の区が一般の市町村と同じに扱われている。この構造でそのままマルチポリゴン化すると政令市が1つの自治体として扱われず、区単位に分けられる。

政令市を区で分けずに他の市区町村と同じように扱いたい場合には、以下のような新たな属性を設け、それをキーとしてマルチポリゴン化する。

  • city_or_countyが政令市の場合、prefecturecity_or_county
  • cyty_or_countyNULLか郡名の場合、prefecturemunicipality
    • ここでは同一都道府県内で政令市の区以外に同名の市区町村名は存在しないことを前提としている

新たな属性の追加

ここでは所属未定地、政令市の扱いについて以下のような仕様とする。

  • 所属未定地は都道府県単位でまとめる
    • 例:北海道所属未定地 など
  • 政令市は区で分けず、一般市区町村と同じ行政区として扱う
    • 例:北海道札幌市、北海道函館市・・・など

この条件でマルチポリゴン化するため、以下の手順で新たな属性を追加する。

  1. レイヤー右クリックでレイヤプロパティダイアログを開く
    1. 左の属性タブ選択
    2. 新規フィールドアイコンでフィールド追加し、フィールド名等を設定
    3. 必要なら属性フォームタブでAilias設定
    4. OKボタンクリック
  2. レイヤー右クリックで属性テーブルを開く
    1. フィールド計算機アイコンでフィールド計算機ダイアログを開く
    2. 既存フィールド更新で、作成したフィールドを選択
    3. フィールドの計算式を入力
    4. プレビューを確認して、よければOKボタンをクリック

以下はフィールド計算機ダイアログの入力状況。計算式でCASE文を使っている。

これを反映した属性テーブルは以下の通り。都道府県名+所属未定地となっていて、政令市と一般市が同列に扱われている。

この段階で編集後の属性テーブルを、「編集内容の保存」アイコンで保存すると、1~2分ほどかけて保存される。その後、プロジェクトを保存しておく。

マルチポリゴン化の実行

マルチポリゴン化を実行するには、メニューから「ベクタ」→「ジオメトリツール」→「シングルパートをマルチパートに集約」と選択していく。

ダイアログが表示され、マルチポリゴン化が実行される。実行は瞬時に終わり、下のプログレスバーは0%だがこの時点で実行は終了している。マルチポリゴン化されたオブジェクトは新たに作成された出力レイヤーに保存される。

出力レイヤーを右クリックして属性テーブルを表示させると、政令市・一般市区町村ごとに1つのレコードとなっている。

先に例示した館山市の海岸部を見てみると、細かな一つ一つの岩が館山市として認識されている。

スクラッチレイヤーの保存

ここまでの状態ではマルチパート化された行政区画があるレイヤーは一時的なスクラッチレイヤーとなっている。継続的にこのレイヤーを使うためには、レイヤーを保存しておく必要がある。

スクラッチレイヤーの場合、レイヤーの右側にアイコンが出るので、それをクリックして、GeoPackageファイルの保存場所を指定して保存する。デフォルトでは、ファイル名がレイヤー名として自動的に初期設定される。

 

QGIS3 – 行政区域データ – 読み込み

概要

QGISに行政区域データを読み込む。データソースは国土地理院による国土数値情報(Digital National Land Information)を用いる。

データのダウンロード

  1. 地理院の国土数値情報ダウンロードサービスに行く
    • デフォルトのデータ形式はShape

スクロールして「2.政策区域」→「行政地域」をたどり、「行政区域(ポリゴン)」をクリック。

ダウンロードしたい地域を選択。今回は「全国」をクリック。

各都道府県・全国のデータごとに各年度のデータが登録されている。3~4年ごとにデータ容量が1.5~2倍に増えていて、最新のR4年度版では700MBを超えている。

ダウンロードしたZIPファイルを展開したところ。容量が2.4GBになっている。

データの読み込み

QGISのメニューで、「レイヤ」→「レイヤを追加」→「ベクタレイヤを追加」を選択。

ダイアログが開くので読み込みの設定。

  • ソースタイプは「ファイル」のまま
  • 文字コードはShift_JIS
  • ファイルの場所を入力
  • 「追加」ボタンをクリック

すぐにレイヤーが追加されて、市区町村単位の行政界が表示される。

内容の確認

地理院サイトの子のデータの説明に以下のクラス図が掲載されている。

レイヤーを右クリックして「属性テーブルを開く」を選択し、属性テーブルを表示させる。

冒頭には各都道府県単位のデータが、都道府県名以外の内容がNULLとして登録されている。

下の方にスクロールすると、振興局名・郡政令都市名・市区町村名と行政区域コードが表れてくる。以下のような対応になっていることがわかる。

  • N03_001:振興局名
  • N03_002:郡政令都市名
  • N03_003:市区町村名
  • N03_004:行政区域コード

一般的な県内の郡・市町村は以下の通り。

項目名の変更

属性テーブルの項目名がそのままではN03_001のような記号表現になっているが、これを変更したいときには、別名(Alias)使うのが簡単。項目名変更の手順はこちらにまとめている。

 

QGIS3 – インストール

ダウンロードとインストール

OSGeo版ではなく、長期リリースのパッケージ版のインストール。

  1. QGISのダウンロードサイトに入り、長期リリース(最も安定)をダウンロード
  2. 約1GBのmsiファイルがダウンロードされるので、これを実行してインストール

動作確認

地理院タイルを表示させて動作確認。

 

QGIS3 – 地理院タイルの表示

概要

国土地理院のベースマップのタイルに接続して表示させる方法。

新規接続

QGISの”XYZ Tiles”で「新規接続」を選択。

XYZ接続のダイアログが表示される。ここで接続先のURLや名前を指定する。

接続先の確認

国土地理院の「地理院タイル」のページに入り、ベースマップの標準地図のリンクをクリック。上部にURLが表示されるのでこれをコピー。

接続先の指定

XYZ接続のダイアログに、コピーしたURLをペーストし、接続名やズームレベルも指定してOKボタンをクリック。

接続が登録されるので、これをレイヤーに追加する。

地理院タイルのベースマップ、標準地図が表示された。

QGIS – クリッピング

概要

たとえばあるエリアの地図と、そのエリア内だけ鉄道や道路のベクタを切り出して扱いたい時がある。このようなときは、広域データの鉄道や道路のベクタデータのうちエリア内のみ切り出す「クリッピング」を行う。

ここでは、東京23区内の鉄道路線と駅をクリップする例を示す。大まかな手順は以下の通り。

  1. 23区の地図データを切り出し、外形データを作る
  2. 上記の外形データで鉄道路線と駅の全国データをクリップ

地図データの切り出しと外形データの作成

地物の切り出し

地物を切り出す手順で、23区のみ抽出して保存する。このデータはレイヤとして後に利用する。

外形データの作成

切り出した23区のデータの外形を融合(dissolve)処理によって作成・保存。このデータはクリッピングのために一時的に利用するだけ。

以下の図は、23区の外形ポリゴンと全国の鉄道路線データ、駅データを重ねたもの。

qgis-tokyo-ward-outline-and-railway

クリップ処理

メニューから、ベクタ→空間演算ツール→クリップでダイアログを表示させる。

qgis-clipping-dialog

  • 「入力レイヤ」には、クリップされるデータを指定(この場合は鉄道路線データ)
  • 「レイヤをクリップする」データには、クリップ範囲のデータを指定(この場合は23区の外形データ)
  • 「クリップされた」データには、クリップ後のデータを保存するファイルのパスを指定

実行結果は以下の通り。

qgis-tokyo-ward-clip-railway

 

QGIS – 政令市区の融合

概要

国土数値情報の行政界データは、政令市の区が他の市町村と同じレベルで「行政区域」として扱われている。たとえば神奈川県を例にとると、横浜・川崎・相模原の3政令市については各区のポリゴンが他の市町村と同じように表示される。

qgis-kanagawa-before-disolve

属性テーブルのフィールドでも、最も細かい名称フィールド”N03_004″で政令市は区単位で、政令市名は郡名と同じフィールド”N03_003″に記録されている。

qgis-designated-city-dissolve-attribute-table-before

 

政令市区の融合

政令市も一般市と並びで扱うケースのために、政令市と他の市町村が同じフィールドになるように再構成する。

神奈川県を例にとると、行政界データは以下のように政令市~一般市~郡部町村という構成になっている(注目しているカラムのみ示している)。

N03_001 N03_003 N03_004 N03_007
神奈川県 横浜市 鶴見区 14101
神奈川県 横浜市 都筑区 14118
神奈川県 川崎市 川崎区 14131
神奈川県 川崎市 麻生区 14137
神奈川県 相模原市 緑区 14151
神奈川県 相模原市 南区 14153
神奈川県 横須賀市 14201
神奈川県 綾瀬市 14218
神奈川県 三浦郡 葉山町 14301
神奈川県 愛甲郡 清川村 14402

このうち同じ政令市の区を地物までまとめて一つの政令市として扱うようにする。

N03_001 N03_007 N03_901
神奈川県 14100 横浜市
神奈川県 14130 川崎市
神奈川県 14150 相模原市
神奈川県 14201 横須賀市
神奈川県 14218 綾瀬市
神奈川県 14301 葉山町
神奈川県 14402 清川村

大まかな手順は以下の通り

  • 政令市を含んだ市町村名を、新たにフィールドを作ってそこに設定
  • 政令市のコードは、従来のコード欄の値を手打ちで修正

市町村欄の生成

  • 神奈川県のレイヤの属性テーブルを表示
  • フィールド計算機を立ち上げる
  • 「新しいフィールドを作る」にチェックし、出力フィールド名、フィールドタイプ、フィールド長を設定
  • 条件式を入力
  • OKボタンを押してダイアログを閉じる
  • レイヤの編集モードを解除

qgis-designated-city-dissolve-field-calculator

条件式は以下の通り。

フィールドN03_003は以下のいずれか

  • N03_004が政令市区の場合は政令市名
  • N03_004が一般市の場合は市名
  • N03_004が町村の場合は郡名

そこで、N03_003が’市’で終わる場合(政令市の場合)はN03_003を、その他(一般市町村)の場合はN03_004を新たなフィールドN03_901にセットする。

実行結果は以下の通り。

qgis-designated-city-dissolve-attribute-table-after

次に、「ベクタ」→「空間演算」→「Dissolve」でN03_901フィールドの値で融合処理。融合後の地物は以下の通りで、政令市が一体化されている。

qgis-kanagawa-after-disolve

属性テーブルを開いてみると3政令市がそれぞれ一つにまとめられているが、各フィールドは各政令市のいずれか一つの区のデータのみが残っている。これらについては、手打ちで修正した。

qgis-designated-city-dissolve-attribute-table-code

 

QGIS – クエリ・式

式の入力について

フィルタやフィールド計算機などで必要になるクエリの式についてまとめる。

クエリビルダでフィールドや演算子などを入力するとき、直接キーボードから入力してもいいし、ダイアログのボタンやドロップダウンから選択してもよい。

関数をドロップダウンから選択しても、括弧閉じの対応はされない。

値の参照

レコード内のフィールド値を参照するにはダブルクォート(")でフィールド名を囲む。

数値リテラルはそのまま数値を書き、文字列リテラルはシングルクォート(')で囲む

LIKEであいまい検索をする場合の任意長の文字列は’%(‘*‘は使えない)。以下は’横浜市’、’横浜’、’浜松’にマッチする。

条件検索

条件の真偽によって結果を変える場合はifを使う。

以下、例示。

 

 

QGIS – 地物の切り出し

たとえば全国の行政界データを持っていて、そこから特定の県だけ抜き出したレイヤを作りたいとき。大まかな手順は以下の通り。

  • 抽出対象の地物をフィルタで抽出
  • 抽出後の状態で「領域またはシングルクリックによる地物選択」ボタンを押す
  • 領域を選択してフィルタ後の地物を全選択
  • メニューの「編集」→「地物のコピー」
  • メニューの「編集」→「新規レイヤへの地物の貼り付け」→「新規ベクタレイヤ」
  • 「空間参照システム」ダイアログで座標系を選択(JGD2000)
  • 新規Shapeファイルの保存先ディレクトリとファイル名を指定してOK

例として国土数値情報の全国の行政界データから神奈川県の市区町村のみ取り出す手順をまとめる。

神奈川県の市区町村のみフィルタリングした状態から「領域またはシングルクリックによる地物選択」ボタンを押す。

qgis-select-porigon1

フィルタリングされた神奈川県全体を覆うようにドラッグして地物を選択し、「編集」→「地物のコピー」。

qgis-select-porigon2

続けて「編集」→「新規レイヤへの地物貼り付け」→「新規ベクタレイヤ」。

qgis-select-porigon3

「空間参照システム選択」ダイアログで座標システムを指定。この場合はデフォルトのJGD2000のまま。

qgis-select-porigon4

OKを押すと「ベクタレイヤに名前を付けて保存」ダイアログが立ち上がるので、「ブラウズ」で新しいフォルダとファイル名を指定してOK。

qgis-select-porigon5

「保存されたファイルを地図に追加する」にチェックが入っていれば、新しく作成されたShapeファイルのレイヤがレイヤパネルに追加されて表示される。

qgis-select-porigon6