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_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
起動時には相変わらず以下のエラーが表示されますが、影響ないのでそのまま待つと起動します。
[ヘルプ]からバージョンを確認すると、1.15であることが確認できます。
OJの新機能
OJ1.15の新機能ですが、配布先のページ(Source Forge)には以下のように書いてあります。
ラスター関係の機能追加が多いようですが、点列から線を作成する機能も追加されたようです。
今回は、バスのロケーション情報を使ってこの機能(以降、線化機能と呼びます)を検証しましょう。
まずはデータの取得
福井県鯖江市のコミュニティバス”つつじバス”では、バスのロケーション情報を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を確認します。
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)”を選択し、”次>”ボタンを押下します。
続いて表示されるダイアログで、セパレータ(Field separator)にカンマを指定し、X軸をCSVファイルの第4カラム(経度)、Y軸を第3カラム(緯度)と指定し、”完了”ボタンを押下します。
取り込みが完了すると、以下のような地図が表示されます。
線化の実施
ここからが本題の線化機能の実施です。
線化の実施には、メニュー[ツール]、[編集 ジオメトリ]、[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ファイルを読み込みます。
次に、プロセシングツールボックスから”点をつないで線に”を指定し、パラメータを指定して実行します。
スタイルを設定し、OSM地図と重ね合わせるとわかりやすい地図になってしまいました。
まとめ
今回は、OpenJUMP1.15の新機能を紹介しました。
約1年ぶりにOJの新バージョンがリリースされたので、つい記事にしてしまいました。
今回は残念ながら、OJの新機能がQGISでは普通にできるという結果となりました。
これはQGISがGDALなど外部のライブラリを組み込んだ上で、Pythonプラグインを実現するなどプラットフォーム化しつつあるのに対して、OJの機能追加は実質Javaのみでプログラマしか手が出せないことから、コミュニティの裾野の差が出ているんだなと感じています。
ガンバレ、OpenJUMP!、どこへ行くOpenJUMP!