18.2. Lesson: DBマネージャを使用してQGISで空間データベースと連携する

すでにQGISや他のツールで多くのデータベース操作を実行する方法を見てきましたが、今度は、この同じ機能の多くに加えてさらに管理指向のツールを提供するDB管理者ツールを検討します。

このレッスンの目標: QGISのDBマネージャを使用して、空間データベースと対話する方法を学びます。

18.2.1. basic Follow Along: DBマネージャでPostGISデータベースを管理する

最初にDBマネージャのインターフェイスを開く必要があります。それには データベース --> DBマネージャ --> DBマネージャ メニューを選択するか、ツールバー上のDBマネージャアイコンを選択します。

dbManager

すでに設定した接続が表示され、myPG セクションとその public スキーマを展開すると、前のセクションで扱ったテーブルを見ることができるはずです。

まず最初に気づくのは、データベースに含まれるスキーマに関するメタデータが表示されるようになったことです。

../../../_images/db_manager_dialog.png

スキーマはPostgreSQLデータベースのデータテーブルやその他のオブジェクトをグループ化する方法であり、権限やその他の制約のためのコンテナでもあります。PostgreSQLのスキーマの管理はこのマニュアルの範囲外ですが、PostgreSQL documentation on Schemas にスキーマに関するより多くの情報があります。DBマネージャを使用して新しいスキーマを作成することができますが、効果的に管理するためにはpgAdmin IIIやコマンドラインインタフェースのようなツールを使用する必要があります。

DBマネージャは、データベース内のテーブルを管理するために使用できます。すでに、コマンドライン上でテーブルを作成し管理するためのさまざまな方法を見てきていますが、ここでDBマネージャでこれを行う方法を見てみましょう。

まず、ツリー内の名前をクリックして 情報 タブの中を見ることで、テーブルのメタデータを見てみることは有用です。

../../../_images/table_info.png

このパネルでは、テーブルについての 一般情報 も、ジオメトリと空間参照系に関してPostGIS拡張が維持している情報を見ることができます。

情報 タブで下にスクロールした場合、表示しているテーブルに対して、 属性制約インデックス についての詳細な情報を見ることができます。

../../../_images/table_info_fields.png

単にレイヤツリーにレイヤの属性テーブルを表示することによって、これを行う可能性がありますほとんど同じ方法でデータベース内のレコードを見てDBマネージャを使用することも非常に便利。 テーブル タブを選択して、データを閲覧できます。

../../../_images/table_panel.png

地図プレビューでレイヤのデータが表示される プレビュー タブもあります。

ツリー内のレイヤを右クリックし、 キャンバスに追加 をクリックすると地図にこのレイヤが追加されます。

これまでのところはデータベース、そのスキーマとテーブル、それらのメタデータを閲覧しているだけですが、もしテーブルを変更して列を追加したいとしたらどうでしょう。DBマネージャを使えば、これを直接行うことができます。

  1. ツリーで、編集するテーブルを選択します

  2. メニューから テーブル ► テーブルを編集 を選択し、 テーブルプロパティ ダイアログを表示します。

    ../../../_images/edit_table.png

列を追加するには、このダイアログを使用してジオメトリ列を追加し、既存の列を編集したり、列を完全に削除できます。

制約 タブを使用、どのフィールドが主キーとして使用されるか、既存の制約を削除するために管理できます。

../../../_images/constraints_panel.png

インデックス タブは、空間索引と通常のインデックスの両方を追加および削除するために使用できます。

../../../_images/indexes_panel.png

18.2.2. basic Follow Along: 新しいテーブルを作成する

データベース内の既存のテーブルでの作業のプロセスを一通り終えましたので、ここでDB マネージャを使用して新しいテーブルを作成してみましょう。

  1. まだ開いていない場合は、DBマネージャウィンドウを開き、データベースに既にあるテーブルのリストが表示されるまでツリーを展開します。

  2. メニューから テーブル --> テーブルを作成 を選択し、 [テーブルの作成]ダイアログを開きます。

  3. デフォルトの Public スキーマを使用し、テーブル名を places とします。

  4. 以下のように id, place_name, elevation フィールドを追加します

  5. id フィールドが主キーとして設定されていることを確認します。

  6. ジオメトリカラムを作成 のチェックボックスをクリックし、POINT 型に設定されていることを確認し、名前を geom にして、4326SRID として指定します。

  7. 空間インデックスを作成 の横にあるチェックボックスをクリックし、作成 をクリックしてテーブルを作成します。

    ../../../_images/create_table.png
  8. テーブルが作成されたことを知らせるダイアログを閉じ、 閉じる をクリックして「テーブル作成」ダイアログを閉じます。

これで、DBマネージャで、テーブルを検査できますし、もちろんその中にデータがないことがわかります。ここからレイヤのメニューで 編集を切替 できます、テーブルに場所の追加を開始します。

18.2.3. basic Follow Along: 基本的なデータベース管理

DB マネージャは、基本的なデータベース管理タスクを実行することもできます。確かに、より完全なデータベース管理ツールの代わりにはなりませんが、データベースを維持するために使用できるいくつかの機能を提供します。

データベーステーブルは、多くの場合、非常に大きくなることがありえますし、頻繁に変更されているテーブルは、もはやPostgreSQLで必要とされてないレコードの残渣を残したままにすることがあります。 VACUUM コマンドでは、ガベージコレクションのようなものをして、パフォーマンス向上のためにテーブルを圧縮したりオプションで分析します。

DB マネージャから VACUUM ANALYZE コマンドを実行する方法について見てみましょう。

  1. DBマネージャツリーにあるテーブルのひとつを選択します

  2. メニューから テーブル ► バキューム解析の実行 を選びます

PostgreSQLはこれで操作を実行します。テーブルの大きさにもよりますが、完了までに時間がかかるかもしれません。

VACUUM ANALYZE処理については、PostgreSQL Documentation on VACUUM ANALYZE に詳細が記載されています。

18.2.4. basic Follow Along: DB マネージャでSQLクエリを実行する

DBマネージャはまた、データベーステーブルに対してクエリを記述し、結果を表示するための方法を提供します。すでに ブラウザ パネルの中のこの種の機能を見てきましたが、再びここでDBマネージャでそれを見てみましょう。

  1. ツリーにある lines テーブルを選択します。

  2. [DB マネージャ]ツールバーで SQLウィンドウ ボタンを選択します。

    ../../../_images/sql_window_btn.png
  3. 次の SQLクエリ を与えられたスペースに構成します

    select * from lines where roadtype = 'major';
    
  4. クエリを実行するには、 実行(F5) ボタンをクリックします。

  5. Result パネルに一致するレコードが表示されているはずです。

    ../../../_images/sql_results.png
  6. 新規レイヤとして読み込む のチェックボックスをクリックして地図に結果を追加します。

  7. id 列を ユニーク値のカラム として、geom 列を ジオメトリのカラム として選択します。

  8. レイヤ名(接頭辞) として roads_primary を入力します。

  9. 読み込み をクリックして地図に新しいレイヤとして結果を読み込みます。

    ../../../_images/sql_add_to_map.png

クエリと一致したレイヤーは今、地図上に表示されます。もちろんこのクエリツールは、以前のモジュールとセクション中で見たものなど、任意のSQLコマンドを実行するために使用できます。

18.2.5. DBマネージャを使用したデータベースへのデータのインポート

コマンドラインツールを使用して空間データベースにデータをインポートする方法をすでに見てきました。次に、DBマネージャを使用してインポートを行う方法を学習しましょう。

  1. [DBマネージャ]ダイアログボックスのツールバー上の レイヤー/ファイルを読み込み ボタンをクリックしてください。

    ../../../_images/import_layer_btn.png
  2. 入力データセットとして exercise_data/projected_data から urban_33S.shp ファイルを選択します。

  3. フォームの値の一部を事前に埋めるために、 オプションを更新 ボタンをクリックしてください。

  4. 新しいテーブルを作成 オプションが選択されていることを確認してください

  5. 変換前SRID`を ``32722` に、 変換後SRID`を ``4326` に指定します

  6. 空間索引を作成 の横にあるチェックボックスをオンにします。

  7. インポートを実行するために OK をクリックします

    ../../../_images/import_urban.png
  8. 読み込みが成功したことを知らせるダイアログを閉じます

  9. DBマネージャツールバーにある リフレッシュ ボタンをクリックします

これで、ツリーでテーブルをクリックすることで、データベース内のテーブルを検査することができます。Spatial ref:WGS 84 (4326) と表示されていることを確認し、データが再投影されていることを確認します。

../../../_images/urban_info.png

ツリー中のテーブルを右クリックして キャンバスに追加 を選択すると地図にレイヤとしてテーブルが追加されます。

18.2.6. DBマネージャを使用したデータベースからのデータの書き出し

DB マネージャは空間データベースからデータを書き出すためにも当然使用できますので、それがどのように行われるかを見てみましょう。

  1. ツリーで lines レイヤを選択し、ツールバーの ファイルにエクスポート ボタンをクリックして ベクタファイルに出力する ダイアログを表示します。

  2. ... ボタンをクリックして 出力ファイル を選択し、 exercise_data ディレクトリに urban_4326 という名前でデータを保存します。

  3. 変換後SRID4326 を設定します。

  4. OK をクリックしてエクスポートを開始します。

    ../../../_images/export_to_vector.png
  5. 書き出しが成功したことを知らせるダイアログを閉じ、DBマネージャを閉じます。

ブラウザパネルで作成したシェープファイルを検査できます。

../../../_images/inspect_vector_output.png

18.2.7. In Conclusion

ここまで、QGISのDBマネージャインターフェイスを使用して空間データベースを管理する方法、データに対してSQLクエリを実行する方法、データのインポートとエクスポートの方法について説明しました。

18.2.8. What's Next?

次に、これらの同じテクニックを SpatiaLite データベースで使用する方法について説明します。