ベクタデータが記録された複数のシェープファイル等を結合する方法を紹介します。 同じ都道府県のデータが複数のファイルに分割されており、それらを一つのファイルにまとめて扱いたい時などに利用できる機能です。
結合できるのは記録されたベクタデータのジオメトリタイプが同じファイル同士です。 例えば、ポリゴンのファイルとポイントのファイルを結合することはできません。
分割されたベクタデータの例
以下の画像は千葉県の範囲に重なる標高メッシュデータを国土数値情報からダウンロードしQGISに読み込んだものです。
国土数値情報の標高メッシュデータはメッシュ番号ごとにダウンロードする方式であるため、千葉県のデータが5つのファイルに分割されてしまいます。 都道府県単位のデータを作成する場合などにはこのまままではとても扱いづらいです。
これらのファイルを結合して一つのファイルにまとめるのが今回紹介する機能です。
結合したいレイヤをいったんQGISに読み込んでから結合する方法と、読み込まずにPCに保存されているファイルを直接選択する方法の2種類があります。 それぞれ説明します。
QGISに読み込んだレイヤを結合する場合
上で紹介した千葉県の範囲に重なる国土数値情報の標高メッシュデータを使用して説明します。
結合するベクタレイヤをすべてQGISに読み込みます。 すると、レイヤパネルには読み込んだ複数のレイヤが表示された状態になっています。
メニューバーの「ベクタ」から「データ管理ツール」を選択し、出てくるメニューの中から「ベクタレイヤのマージ」を選択します。
すると「ベクタレイヤのマージ」というウインドウが表示されます。
このウインドウでは以下のように、結合するレイヤの指定、座標参照系、ファイルの保存場所を設定します。
- 「入力レイヤ」欄で結合するレイヤを選択します。
- 「変換先の座標参照系(CRS)」欄で結合したファイルで使用する座標参照系を選択します。指定しない場合は元のレイヤの座標参照系が引き継がれます。右端にある地球の絵をクリックして座標参照系を指定します。QGISプロジェクトの座標参照系を使用する場合は選択メニューから「プロジェクトのCRS」を選択します。
- 「出力レイヤ」欄で作成したデータを保存する場所とファイル名の設定を行います。右端にある点が3つ並んだところをクリックすると出てくるメニューから「ファイルに保存」を選択します。ファイルを保存する場所を設定するウインドウが出現するので、好きなフォルダを選び、好きなファイル名を付けて「保存」をクリックします。何も設定しないと一時レイヤが作成されます。
以下、具体的な設定方法の説明です。
結合するレイヤを選択する方法
「入力レイヤ」欄から設定を行います。
「入力レイヤ」欄の右端にある点が3つ並んだところをクリックすると表示が変わり、現在QGISに読み込んでいるベクタレイヤ一覧が表示されます。
ベクタレイヤの左側にチェックボックスがあるので、結合したいレイヤを選びチェックを入れていきます。 この例では標高メッシュを5つと千葉県の形状を示すベクタレイヤの計6つが表示されています。 結合するのは標高メッシュなので、標高メッシュのレイヤ5つにチェックを入れましょう。
チェックを入れてレイヤを選択できたら◀をクリックするして元の表示内容に戻ります。
あとは必要に応じて「変換先の座標参照系(CRS)」欄と「出力レイヤ」欄を設定します。
座標参照系(CRS)を設定する
何も設定しない場合は、結合前のレイヤの座標参照系が結合後のレイヤにそのまま引き継がれます。 結合後のレイヤに異なる座標参照系を設定する場合は以下のように指定します。
「座標参照系(CRS)」欄の右側にあるイラスト(水色の球に傘帽子がかぶせられたようなイラストです)をクリックしましょう。 すると「座標参照系の選択」というウインドウが出現します。 「フィルタ」欄にEPSGコードを入力すると、「あらかじめ定義されたCRS」欄に該当する座標三焦経が表示されるので、選択して「OK」をクリックします。
結合後のレイヤの保存先を決定する
最後に結合したレイヤを保存するファイル名の設定を行います。 一番下の「出力レイヤ」欄の右端にある点が3つ並んだところをクリックすると出てくるメニューから「ファイルに保存」を選択します。
するとファイルを保存する場所を設定するウインドウが出現するので、好きなフォルダを選びファイル名を設定して「保存」をクリックします。 「形式」の選択メニューは「GPKG files」(シェープファイルで保存する場合は「SHP files」)を選びます。
レイヤの結合処理を行う
これですべての設定が完了したので結合処理を行います。 出力レイヤ欄の下にある「アルゴリズムの実行後に出力ファイルを開く」のチェックボックスにチェックが入っていることを確認します。チェックが入っていると結合後のレイヤが地図上に表示されるので結果をすぐに確認できます。
「実行」をクリックするとレイヤを結合する処理が開始されウインドウの表示が変わります。 たくさんの文字列が表示されますが、その下の方に「アルゴリズム ‘ベクタレイヤのマージ’が終了しました」と記載されていれば処理が完了しています。処理時間は結合するデータの大きさやレイヤの数に応じて変化します。
処理が完了したら「閉じる」をクリックして地図の画面に戻りましょう。 結合されたレイヤが地図に表示されています。 結合前のメッシュはファイルごとに異なる色で表示されていましたが、結合されたレイヤはすべて同じファイルなので全体が同じ色で表示されています。
表示が変わっていない場合は、結合前のレイヤが一番上に表示されている可能性があるので、それを非表示にしてみましょう。
QGISに読み込まずにファイルを結合する場合
この方法ではQGISにデータを読み込むことなく結合するベクタデータを選択することができます。
結合するベクタデータをファイル単位でひとつずつ選択する方法と、フォルダ単位で一括して選択しフォルダ内のベクタデータを全て結合する方法があります。 それぞれの方法を説明します。
結合するベクタデータをひとつずつ選択する方法
レイヤを読み込む必要がないため、新規に起動したQGISから設定を行えます。 上の方法と同じく、メニューバーの「ベクタ」から「データ管理ツール」を選択し出てくるメニューの中から「ベクタレイヤのマージ」を選択します。
結合するベクタデータを選択する
「ベクタレイヤのマージ」ウインドウが表示されます。 「入力レイヤ」欄で設定を行います。
「入力レイヤ」欄の右端にある点が3つ並んだところをクリックしレイヤ一覧を表示します。 新規に起動したQGISで何もレイヤを読み込んでいない場合は、レイヤ一覧は空欄で何も表示されていません。
レイヤ一覧の右側にあるボタンの中から「ファイルを追加」をクリックします。
するとファイルを結合するファイルを選択する画面が表示されますので、結合したいデータが保存されているフォルダへ移動しましょう。 「.gpkg」で終わるファイルか、「.shp」で終わるファイルを選択し「開く」をクリックしましょう。 「.gpkg」は結合するベクタデータがGeopackage形式の場合、「.shp」は結合するベクタデータがシェープファイルの場合の拡張子です。
するとデータ一覧に選択したデータが追加されます。
結合するベクタデータの数だけこの作業を繰り返すか、ファイルを選択する際にCTRLキー(MacOSはCommandキー)を押しながらファイルを選択し複数選択で一気に選択してしまいます。
データ一覧に結合するレイヤが追加され、すべてにチェックが入った状態になっていればファイルの選択作業は終了です。 ◀をクリックするともとの表示内容に戻ります。
必要に応じて「変換先の座標参照系(CRS)」欄と「出力レイヤ」欄を設定します。
座標参照系(CRS)を設定する
何も設定しない場合は、結合前のレイヤの座標参照系が結合後のレイヤにそのまま引き継がれます。 結合後のレイヤに異なる座標参照系を設定する場合は以下のように指定します。
「座標参照系(CRS)」欄の右側にあるイラスト(水色の球に傘帽子がかぶせられたようなイラストです)をクリックしましょう。 すると「座標参照系の選択」というウインドウが出現します。 「フィルタ」欄にEPSGコードを入力すると、「あらかじめ定義されたCRS」欄に該当する座標三焦経が表示されるので、選択して「OK」をクリックします。
結合後のレイヤの保存先を決定する
最後に結合したレイヤを保存するファイル名の設定を行います。 一番下の「出力レイヤ」欄の右端にある点が3つ並んだところをクリックすると出てくるメニューから「ファイルに保存」を選択します。
するとファイルを保存する場所を設定するウインドウが出現するので、好きなフォルダを選びファイル名を設定して「保存」をクリックします。 「形式」の選択メニューは「GPKG files」(シェープファイルで保存する場合は「SHP files」)を選びます。
レイヤの結合処理を行う
これですべての設定が完了したので結合処理を行います。 出力レイヤ欄の下にある「アルゴリズムの実行後に出力ファイルを開く」のチェックボックスにチェックが入っていることを確認します。チェックが入っていると結合後のレイヤが地図上に表示されるので結果をすぐに確認できます。
「実行」をクリックするとレイヤを結合する処理が開始されウインドウの表示が変わります。 たくさんの文字列が表示されますが、その下の方に「アルゴリズム ‘ベクタレイヤのマージ’が終了しました」と記載されていれば処理が完了しています。処理時間は結合するデータの大きさやレイヤの数に応じて変化します。
処理が完了したら「閉じる」をクリックして地図の画面に戻りましょう。 結合されたレイヤが地図に表示されています。
フォルダ単位で一括して指定する方法
ファルダ単位で結合するベクタデータを選択することもできます。 この方法で指定するとフォルダに入っているベクタデータが全て結合されます。
GISで作業する場合、扱うデータの種類によってはかなり多くのベクタデータを結合することが必要になる場合があります。 そのような場合にこの方法を使うと大量のデータをQGISに読み込む必要がなくなるので便利です。
レイヤを読み込む必要がないため、新規に起動したQGISから設定を行えます。 メニューバーの「ベクタ」から「データ管理ツール」を選択し出てくるメニューの中から「ベクタレイヤのマージ」を選択します。
結合するファイルが保存されているフォルダを指定する
「ベクタレイヤのマージ」ウインドウが表示されます。 「入力レイヤ」欄から設定を行います。
「入力レイヤ」欄の右端にある点が3つ並んだところをクリックしレイヤ一覧を表示します。 新規に起動したQGISで何もレイヤを読み込んでいない場合は、レイヤ一覧は空欄で何も表示されていません。
レイヤ一覧の右側にあるボタンの中から「ディレクトリを追加」をクリックします。
するとフォルダを選択する画面が表示されます。 結合したいデータが保存されているフォルダがある場所へ移動しましょう。
注意点①
フォルダ内には結合するベクタデータのみが入っている状態にしておきます。 また、フォルダの中に別のフォルダがあるとその中のファイルまで追加されてしまうので注意が必要です。
注意点②
xmlファイルは取り除きます。 国土数値情報でダウンロードしたデータなどではシェープファイル以外にxmlファイルがついてきます。 このファイルがフォルダに入ったままだと、結合時にエラーが出てうまくいかないことがありますので、別の場所へ移動するか削除してしまいます。このデータはQGISでデータを使用する場合には不要です。 その他のファイル(拡張子が.shp、.shx、.dbfなどとなっている)は必要なのでそのままにします。
目当てのフォルダを選択した状態で「フォルダーの選択」をクリックします。
するとフォルダ内のすべてのベクタデータが一覧に追加されます。
一覧に表示された全データにチェックが入っています。もし不要なファイルが紛れていた場合は、ここでチェックを外しておきましょう。 これで結合するファイルの選択作業は終了です。 ◀をクリックするともとの表示内容に戻ります。
必要に応じて「変換先の座標参照系(CRS)」欄と「出力レイヤ」欄を設定します。
シェープファイルを結合する際の注意点
この方法でシェープファイルを結合すると「.shp」と「.dbf」のファイルが別データとして結合されてしまい結果的に地物が2倍になります。
そのため、データ一覧に表示されているベクタデータのうち、「.shp」か「.dbf」のどちらかのファイルは全てチェックを外しておきます。
数が大量でひとつずつチェックを外していくのが難しい場合は、最後に紹介する方法で不要な地物を削除します。
座標参照系(CRS)を設定する
何も設定しない場合は、結合前のレイヤの座標参照系が結合後のレイヤにそのまま引き継がれます。 結合後のレイヤに異なる座標参照系を設定する場合は以下のように指定します。
「座標参照系(CRS)」欄の右側にあるイラスト(水色の球に傘帽子がかぶせられたようなイラストです)をクリックしましょう。 すると「座標参照系の選択」というウインドウが出現します。 「フィルタ」欄にEPSGコードを入力すると、「あらかじめ定義されたCRS」欄に該当する座標三焦経が表示されるので、選択して「OK」をクリックします。
結合後のレイヤの保存先を決定する
最後に結合したレイヤを保存するファイル名の設定を行います。 一番下の「出力レイヤ」欄の右端にある点が3つ並んだところをクリックすると出てくるメニューから「ファイルに保存」を選択します。
するとファイルを保存する場所を設定するウインドウが出現するので、好きなフォルダを選びファイル名を設定して「保存」をクリックします。 「形式」の選択メニューは「GPKG files」(シェープファイルで保存する場合は「SHP files」)を選びます。
レイヤの結合処理を行う
これですべての設定が完了したので結合処理を行います。 出力レイヤ欄の下にある「アルゴリズムの実行後に出力ファイルを開く」のチェックボックスにチェックが入っていることを確認します。チェックが入っていると結合後のレイヤが地図上に表示されるので結果をすぐに確認できます。
「実行」をクリックするとレイヤを結合する処理が開始されウインドウの表示が変わります。 たくさんの文字列が表示されますが、その下の方に「アルゴリズム ‘ベクタレイヤのマージ’が終了しました」と記載されていれば処理が完了しています。処理時間は結合するデータの大きさやレイヤの数に応じて変化します。
処理が完了したら「閉じる」をクリックして地図の画面に戻りましょう。 結合されたレイヤが地図に表示されています。
結合後のベクタデータの属性情報についての注意点
属性情報はすべてのベクタデータの物が合体されます。
フィールド名が同じであれば同じフィールドに全ファイルの属性情報が追記されます。 もし、ファイルごとにフィールド名が異なっている場合は、それぞれのフィールドが全て結合されます。その結果追加された元のファイルで該当するフィールドが無いフィールドは、属性情報が空になります。
また、「path」というフィールドが追加されて、結合するベクタデータのパス名(保存しているパソコン上の場所)が記録されます。 自分だけが利用するデータの場合は問題ありませんが、どこかに提出する際には削除しておいた方が望ましいです。
フォルダ単位でシェープファイルを結合した場合にダブって結合された地物を削除する
上で紹介したように、シェープファイルをフォルダ単位で一気に結合すると、「.shp」と「.dbf」のファイルが別データとして結合されてしまい地物が2倍になってしまいます。 結合後のレイヤの属性フィールドを開き、新規に追加されたpathフィールドをよく確認してみると、同じ地物「.shp」ファイル由来の地物と「.dbf」由来の地物が二つあることがわかります。
この現象を防ぐ方法には、レイヤ結合時にデータ一覧に表示されたベクタデータからどちらかのファイルのチェックを外すか、結合した後に不要な地物を削除する必要があります(他に方法があるのかもしれませんが不明です)。
前者のチェックを外す方法を行う場合、目視で確認しながらひとつずつチェックを外していく必要があるためデータ数が大量の場合はミスが発生する可能性があり推奨されません。
その場合は結合後に不要な地物のみを削除します。
「式による選択」の使い方。大量の地物をまとめて選択状態にする方法で紹介した「式による選択」機能で不要な地物のみを選択する条件式を入力します。 そして条件式にはQGISフィルタ機能の演算子の違いを実行例を使って確認するで紹介したワイルドカードを使用できる「LIKE」関数を使用します。
結合後のレイヤをQGISに読み込み、読み込んだレイヤの編集モードに入ります。 編集モードはツールバーの鉛筆マークをクリックするかレイヤパネルのレイヤで右クリックし出てきたメニューから「編集モード切替」を選択します。
続いて、メニューバーの「編集」から「選択」を選択し出てくるメニューを中から「式による選択」を選択します。
すると「式による選択」ウインドウが表示されます。 このウインドウの左側にある「式」欄に以下の条件式を入力します
"path" LIKE '%dbf'
これは「path」フィールドの属性情報の最後が「dbf」で終わる地物のみを選択する条件式です。
入力したらウインドウの下にある「地物を選択」をクリックし、続けて「閉じる」をクリックします。
すると、地図に戻ります。
「dbf」ファイル由来の地物のみが選択状態になっているので、これらを全て削除してしまいます。
削除するには、この状態のままツールバーの「選択物の削除」をクリックします。 赤色のゴミ箱マークのアイコンです。編集モードになってない場合はクリックできません。
クリックした直後には削除が完了しますが見た目は変わりません。 ダブった地物の片方が削除されただけで、残りの一つがそのまま残っているためです。
これで不要な地物の削除が完了したので、再度「編集モード切替」アイコンをクリックし編集内容を保存します。
使用したデータ
- 国土数値情報「標高・傾斜度3次メッシュデータ」
- OpenStreetMap