OpenJUMP1.15

オープンソースGISのOpenJUMPの新バージョンがリリースされたようなのでレポートします。

OpenJUMP1.5の導入と起動

以前の記事でもご紹介しているOpenJUMP、先日新バージョンがリリースされていました。
 現バージョン OpenJUMP-1.14.1-r6147
 新バージョン OpenJUMP-1.15-r6241
1.14.1から1.15へのバージョンアップです。 早速導入しましょう。

下記サイトからOpenJUMP1.15(以降、OJと略します)をダウンロードします。
https://sourceforge.net/projects/jump-pilot/files/OpenJUMP/1.15/

インストーラ形式の.exeや.zip、.jarがありますが、私はJREを導入済みなので、.zipを使っています。
また、COREとPLUSの違いは、プラグインなし(CORE)/あり(PLUS)です。プラグインは便利なものもあるので、プラグインありを導入した方がよいでしょう。

OJのダウンロード画面

ダウンロード後は任意のフォルダーに解凍すればインストール完了です。
(以降、インストールディレクトリを(OJ_HOME)と記載します。)
ただし、DBQuery(オラクルやPostGISなどへSQLを直接発行できる便利ツール)でオラクル接続する方は、以下の準備をしておいてください。
 ・(OJ_HOME)\lib\extに、JDBCドライバ(ojdbc8.jar)を配置する
 ・(OJ_HOME)\lib\ext\dbquery.propertiesの内容を編集(下記は接続名”oracle1”のイメージ)

#”oracle1″ database
jump.dbquery.queryclass.oracle1=org.freevoice.jumpdbqueryextension.oracle.JumpOracleDbQuery
jump.dbquery.driver.oracle1=oracle.jdbc.driver.OracleDriver
jump.dbquery.jdbcurl.oracle1=jdbc:oracle:thin:@hogeSVR:hogePORT/hogeSERVICE
jump.dbquery.username.oracle1=hogeUSR
jump.dbquery.password.oracle1=hogePWD

下記を実行すると、OJが起動されます。
 (OJ_HOME)\bin\OpenJUMP.exe

起動時には相変わらず以下のエラーが表示されますが、影響ないのでそのまま待つと起動します。

OJ起動時のエラーは新バージョンでも改善していない

[ヘルプ]からバージョンを確認すると、1.15であることが確認できます。

OJのバージョン確認画面

OJの新機能

OJ1.15の新機能ですが、配布先のページ(Source Forge)には以下のように書いてあります。

OJ1.15の新機能

ラスター関係の機能追加が多いようですが、点列から線を作成する機能も追加されたようです。
今回は、バスのロケーション情報を使ってこの機能(以降、線化機能と呼びます)を検証しましょう。

まずはデータの取得

福井県鯖江市のコミュニティバス”つつじバス”では、バスのロケーション情報をWEB-APIにて公開しています。
http://www.city.sabae.fukui.jp/users/tutujibus/web-api/web-api.html
利用条件は上記URLと使用したAPIの公開で、利用料は無料となっています。素晴らしいです。
APIの仕様は下記URL(PDF)を確認してください。
http://www.city.sabae.fukui.jp/users/tutujibus/_src/sc2539/WEB-API-manual5Bfix25D.pdf
今回は、”運行履歴データAPI”を使って過去のロケーションデータを抽出します。
仕様書(つつじバスロケーションWEB-API説明書)から運行履歴データの取得APIを確認します。

運航履歴APIの仕様 出典:つつじバスロケーションWEB-API説明書

2020年3月25日の運行履歴データ(1,000件)を取得するAPIは以下となります。
http://tutujibus.com/rosenrecordLookup.php?datetime=20200325
上記をブラウザなどから発行すると、以下のような結果(JSON形式)が返却されます。

{“rosenrecord”:[{“isRunning”:true,”datetime”:”20200325065502″,”busid”:”1″,”rosenid”:”10″,”binid”:”1″,”latitude”:35.945176,”longitude”:136.313984,”speed”:0,”direction”:5,”isdelay”:false},{“isRunning”:true,”datetime”:”20200325065529″,”busid”:”1″,”rosenid”:”10″,”binid”:”1″,”latitude”:35.945371,”longitude”:136.313738,”speed”:10,”direction”:307,”isdelay”:false},{“isRunning”:true,”datetime”:”202003250655

上記をOJに読み込むためにはCSV化する必要があるので、以下の簡単なPythonスクリプトで抽出・CSV化します。
なお、上記JSONはAPIレスポンスの最初と最後のカッコ”(”、”)”を手作業で削除したものです。

import json

fd_busjson = open("bus.json" ,"r")
fd_outcsv = open("bus.csv" ,"w")

busjson = json.load(fd_busjson)

for v in busjson["rosenrecord"]:
    fd_outcsv.write(v["busid"] + "," + v["datetime"] +"," +str(v["latitude"]) + "," + str(v["longitude"]) + "\n")

fd_busjson.close()
fd_outcsv.close()

完成したCSVファイルは、以下のようになります。

1,20200325065502,35.945176,136.313984
1,20200325065529,35.945371,136.313738
1,20200325065538,35.945601,136.313559
1,20200325065548,35.945858,136.31338
1,20200325065555,35.946118,136.313256
1,20200325065603,35.946375,136.313074

最初のカラムがバス番号、その後に日時、緯度、経度と続く4カラムの構成です。

OJへCSVファイルの読み込み

作成したCSVファイルを、OJの地図表示エリアにドロップすると、以下のダイアログが表示されますので、ドロップダウンリストから”csv(set options)”を選択し、”次>”ボタンを押下します。

”オプション設定”のCSV読み込みを指定

続いて表示されるダイアログで、セパレータ(Field separator)にカンマを指定し、X軸をCSVファイルの第4カラム(経度)、Y軸を第3カラム(緯度)と指定し、”完了”ボタンを押下します。

セパレータ、X軸Y軸を指定して”完了”ボタンを押下

取り込みが完了すると、以下のような地図が表示されます。

CSVを取り込んだ後の地図表示

線化の実施

ここからが本題の線化機能の実施です。
線化の実施には、メニュー[ツール]、[編集 ジオメトリ]、[Create LineStrings From Ordered Points]を選択します。

線化機能の呼び出し

メニュー選択後、条件指定ダイアログが表示されますので、以下のように入力し”OK”ボタンを押下します。
・Layer:CSVから新規作成されたレイヤ
・Sorting attributes:Col2(日時)
・Group by Option:チェックする(任意の情報でグループ化します)
・Attribute used to group points:Col1(バス番号)

線化条件指定ダイアログ

上記の指定は、”点をバス番号ごとに日時順で結んだ線を作成する”を意味します。
線が表示されたら、地図のスタイル設定を行います。スタイル設定は、作成された線レイヤを指定した状態で、画面上部の”スタイルの変更”ボタン(パレットのアイコン)を押下します。

スタイル設定ボタン

表示される”スタイルの変更”ダイアログから、”色主題”タブを選択し、”色主題を有効にする”をチェックして、”属性”に”Col1”(バス番号)を指定します。

色主題の設定

続いて”ラベル”タブを選択し、”ラベル表示を有効にする”をチェックし、”ラベルの属性”に”Col1”(バス番号)を指定して”OK”ボタンを押下します。

ラベルの指定

結果の地図は、以下のようになります。
バス番号ごとに色が設定され、地図にラベルも表示されます。

線化+スタイル設定した地図

QGISにて同じことを実施

QGISで同じことを実施してみましょう。
まずは、データソースマネージャからCSVファイルを読み込みます。

QGISで鯖江のバスロケCSVをインポート

次に、プロセシングツールボックスから”点をつないで線に”を指定し、パラメータを指定して実行します。

プロセシングツールボックスから”点をつないで線に”を指定

スタイルを設定し、OSM地図と重ね合わせるとわかりやすい地図になってしまいました。

OSM地図上にバスロケ情報を重ね合わせた地図

まとめ

今回は、OpenJUMP1.15の新機能を紹介しました。
約1年ぶりにOJの新バージョンがリリースされたので、つい記事にしてしまいました。
今回は残念ながら、OJの新機能がQGISでは普通にできるという結果となりました。
これはQGISがGDALなど外部のライブラリを組み込んだ上で、Pythonプラグインを実現するなどプラットフォーム化しつつあるのに対して、OJの機能追加は実質Javaのみでプログラマしか手が出せないことから、コミュニティの裾野の差が出ているんだなと感じています。
ガンバレ、OpenJUMP!、どこへ行くOpenJUMP!