OpenJUMPからのSpatiaLite接続
前回までの記事では、SpatiaLiteを導入しPythonプログラムからの検索までを検証しました。
今回は、OpenJUMPからSpatiaLiteデータベースを利用します。
DB Queryからの検索
OpenJUMPからSpatiaLiteデータベースの検索は、オラクルやPostGIS同様、”DB Query”プラグインから可能です。
DB Queryの起動は、OpenJUMPのメニュー[ファイル]、[DB Query]にて行います。DB QueryにSQLを入力し、画面下部のJDBC接続先にファイル名のフルパスを指定して(例:”jdbc:sqlite:d:\data\test.sqlite”)、”Run Query”ボタンを押下すると検索が実行され地図が表示されます。
DB Queryの使い方は、以下を参考にしてください。
[blogcard url=”https://takamoto.biz/gis/openjump/”]
DB Queryの問題点
便利なDB Queryですが課題もあり、前回の記事でも扱った空間演算を含むSQLはエラーとなります。
select b.P11_001 from area a ,busstop b where a.s_name = ‘丸の内1丁目’ and Contains(a.Geometry ,b.Geometry);
DB Queryから上記SQLを発行すると、以下のエラーとなります。(日本語は文字化けしていますが、正しく認識されています。)
これは、DB QueryにSpatiaLiteの空間拡張モジュールが読み込まれていないことが原因です。では、空間拡張モジュールを読み込ませるとどうなるでしょうか?
今度は、不許可エラー(not authorized)となりました。
この現象は、OpenJUMP(DB Query)から、拡張モジュールの読み込みを許可するAPIが発行されていないことが原因と思われます。
例えば、Pythonの場合は、以下のAPIにて拡張モジュールの読み込み許可設定を行います。
con.enable_load_extension(True) ※conは、データベース接続オブジェクト
SpatiaLiteプラグインの導入
DB Queryは、ここまでが限界のようなので、OpenJUMPのプラグインを調べていくと、”SpatiaLite Plugin”がありました。
このプラグインを使えば、SpatiaLiteデータベースに空間演算を含むSQLを発行してOpenJUMPに地図表示できるようです。早速導入しましょう。
物件のダウンロード
物件のダウンロードはこちらのサイトから行います。
アクセスすると以下の画面が表示されます。
画面の”1.4”フォルダの下にある以下のファイルをダウンロードします。
・spatialite-plugin-1.4_Win32.zip
※64ビット環境でも上記ファイルです。
物件の配置
ファイルのダウンロードが完了したら、以下のように物件を配置します。
1.必要な物件(2つのjarファイル)
・spatialiteplugin-1.4.jar
・sqlite-jdbc-3.30.1.jar
2.配置先
$OJ_HOME\lib\ext
※$OJ_HOMEは、OpenJUMPのホームディレクトリです。
物件を配置したら、OpenJUMPを起動します。
起動後に”レイヤ”メニューを選択すると、最下部に”Import Spatial Layer…”が追加されます。
”Import Spatial Layer…”を選択するとプラグインの画面が表示されます。
画面から”Open Spatial DB”アイコンをクリックしてSpatiaLiteデータベースファイルを指定し、画面左の”Tables”ツリーにテーブルが表示されたら導入は成功です。
SpatiaLiteプラグインの動作確認
SQLの入力方法
このプラグインは、下記2つの方法でSQLを入力することができます。
・キーボードからの直接入力
・画面左のSQLや空間関数などをの指定入力
SQLを入力後、アイコン”Execute SQL query”を押下すると、SQLが実行され結果がリスト表示されます。
SQLの実行と地図表示
ジオメトリを含む検索結果が表示された状態で、アイコン”Add Layer”を押下すると、OpenJUMPにレイヤが追加され地図が表示されます。
プラグインを使って気づいた点
SpatiaLiteプラグインを使って気づいた点を以下に示します。
- 画面左にSQLや関数の一覧が表示されており空間拡張関数の学習に役立つ
- SQLをキーボード入力できるが、コピペには未対応
- モーダルダイアログのためプラグイン表示中はOpenJUMPを操作できない
- プラグインの画面を開くごとにデータベースへの接続が必要
まとめ
今回は、以下を学習しました。
- DB QueryからのSpatiaLiteデータベースへの接続
- SpatiaLiteプラグインの導入とデータベースへの接続
SpatiaLiteプラグインは、機能的に大変よくできていて、かなり堅牢な作りのように感じました。ただ、SQLがコピペできない点はかなり残念でした。
このプラグイン、もしかしたら教育を目的に作られたものかなと感じました。