この日記は、 RDBMS-GIS(MySQL,PostgreSQLなど) Advent Calendar 2020 の14日目ぶんとして後から書いているものです。
この日記は
QGISという GISの専用ツールがあります。 QGIS が何かについては私も語るほど整理できた情報を持っていないので、とにかく地理情報(緯度経度等の情報)のデータを、表示したり色々したりできるツールです(雑な説明)。
この、QGISからMySQLにアクセスし、MySQLのデータを表示する試みを紹介します。本日記ではとりあえず、Windows上で MySQLに接続して、テーブルまるごと表示するところまでです。
概要
実は非常に苦労して、あれこれトライしていたのですが(MySQLに接続されるものの、データが表示されなかった)、QGIS を 3.10 から 3.16 に上げたら、あっさりと表示されるようになりました。なので、この日記で紹介するものは、非常にシンプルです。 なんだったんだ、この数日の苦労は。。でも嬉しい。
以下、手順を示します。
MySQL にデータを用意
以下の日記を参考にするなどして、適当なデータをMySQLに登録しておきます。今回動作しているのは MySQL 8.0.22 です。
sakaik.hateblo.jp
私は、上の日記を書いたあとで、全国の境界値データと、全国の湖沼データを登録しておきました。
QGIS から MySQL への接続情報の登録
レイヤ - データソースマネージャ を開きます。
左ペインで「ベクタ」を選択し、
ソースタイプ:データベース
を選択。
データベース は「新規」を押して、以下の画面のとおりに設定。名前はお好きな名前で。
タイプ:MySQL
ホスト:localhost
データベース:(データの入っているデータベース(スキーマ)名)ここでは shptest
ポート番号:特に設定変更していなければ 3306
認証はベーシックにして ユーザ名とパスワードを設定。保存にチェックを入れておくと、毎回入れなくて済むのでラク。「構成に変換」を押して変換しておくのが吉(そうでない場合はパスワードも平文で保存/表示されます)
「接続テスト」ボタン押下して接続が問題なければ、OK。
ここまでで、MySQLへの接続情報の登録が完了しました。
この画面を開いたままで、次の作業へと進みます。
閉じちゃった場合、次回以降は レイヤ - レイヤを追加 - ベクタレイヤを追加 で同じ画面が開かれます。接続情報は記憶されているので、上記DB接続設定作業を繰り返す必要はありません。
QGIS にMySQLデータを読み込む
とりあえず今回は、テーブルを指定して、そのテーブルの空間データをすべて表示する、ということが目標です。
データソースマネージャのベクタの画面を開き(この日記の手順通りにやってきた場合は、ひらきっぱなしになっている画面のことです)、「追加」ボタンを押下します。(ベクタレイヤを追加する、という指示になります)
設定されたデータベース(スキーマ)の全テーブルが一覧表示されるので、QGISで参照したいテーブルを指定してOKを押します。データのサイズによっては少し時間がかかるので、処理が終わるのをおとなしく待ちましょう。
そして表示されるのが、冒頭の日本地図です。関東地方を拡大してみたのが以下の図。
たったこれだけです。
おまけ:表示の変更、調整など
ここからは単純に QGIS の操作の話になります。もうMySQL関係ない。
左側にある「レイヤ」は、取り込んだテーブル1つがひとつのレイヤとなっています。チェックマークを付け外しすることで、表示オンオフを切り替えられます。レイヤの右端にハテナ(?)がついている場合は、そのレイヤに適切な測地系の指定が行われていません。クリックして、一応ちゃんと設定しておいたほうが良いでしょう。
表示の塗りつぶしや線の色・太さを変えるには、レイヤのひとつを選択して、右クリックーシンボロジ(上から3番目)です。以下にキャプチャした画面で塗りつぶしの色や塗りつぶしパターンを、同画面上部の、ここでは「シンプル塗りつぶし」になっている部分をクリックすると、線の色や太さの設定ができます。