2015年12月31日木曜日

GeoGigでGISデータのバージョン管理をする (4)QGIS GeoGig Pluginを試す

GeoGigをQGISで使えるプラグインが出たそうなので、今回はそれを試してみることにします。

GeoGigの基本的な機能については、以前書いた記事で紹介しています。

環境

次の環境で試しました。
  • Windows 10
  • QGIS 2.12.0(最新版よりはちょっと古いです)
※ 現在のところ、Windows版とMacOSX版にしか対応していない("At the moment, the plugin works only in OSX and Windows")のだそうです。

インストール

qgis-geogit-pluginのgithubサイトから、zipファイルをダウンロードします。zipを展開すると、"versio"というフォルダーがでてきますので、それをフォルダーごとQGISのプラグインのフォルダー([ユーザーフォルダー]\.qgis2\python\plugin)に配置します。

QGISプラグインフォルダーにversioを配置したところ

QGISを起動し、プラグインの管理画面を開きます。


インストール済のプラグイン一覧に「GeoGigClient」があるのを確認し、GeoGigClientにチェックを入れて有効にします。
プラグインの表示

そうすると、レイヤ管理ツールバーにアイコンが1個増えます。これでインストールは完了のようです。
GeoGigのアイコンが追加されたところ

操作


プラグインの説明はこちらに詳しく書かれています。これをもとにして、基本的な操作を試してみます。

リポジトリの作成


新しくできたアイコンをクリックする(またはアイコンの横の▼をクリックして"GeoGig Navigator"を選択する)と、GeoGig Navigatorという画面が開きます。この画面の左上にある"New Repository"ボタンから、新しいリポジトリを作ることができます。

レイヤ管理ツールバー上のGeoGig Navigatorアイコン


GeoGig Navigator(リポジトリを1個作ったところ)



リポジトリにレイヤーを追加する

レイヤーを先ほど作ったリポジトリに登録するには、レイヤパネルから、表示中のレイヤーを右クリックして、"GeoGig"⇒"Add layer to Repository"を選択します。

レイヤーの追加

対象のリポジトリと、最初のチェックインコメントを入力して、"Add layer"をクリックします。

追加先のリポジトリとチェックインコメントを入力

ユーザーの設定ができていない場合には、下のようなユーザー設定が出てきます。

ユーザー情報を入力

これでレイヤーが登録されます。


レイヤパネルから、再び表示中のレイヤーを右クリックして、今度は"GeoGig"⇒"Browse layer history..."をAdd layer to Repository"を選択すると、チェックインの履歴が表示されます。

履歴表示

リポジトリ内のレイヤーのロード


リポジトリに登録したレイヤーをQGISに読み込むには、GeoGig Navigatorの画面上でレイヤーを選択し、右下の"Open Repository in QGIS"ボタンをクリックします。
GeoGig Navigatorからレイヤーをロード

レイヤーをロードしたところ


地物の追加

次は、レイヤーを編集して、下図のように地物を追加してみます。
右下の三角形を追加

編集を保存すると、自動的にチェックインコメントの入力ダイアログが出てきます。

チェックインコメント入力
履歴にはこんな感じで出てきます(日本語は文字化けしてしまう模様)。

変更履歴(一番上の文字化けしてるのが今追加したもの)


差分の表示

このプラグインには、リポジトリの差分を表示する機能があるようです。

まずは、レイヤーを編集して下図のようにして、チェックインします。
左上の地物を変形、左下の地物を移動
履歴を開き、今追加したバージョンを選んで、"Show changes introduced to this version..."を選択します。

履歴から差分を表示

そうすると、前のバージョンとの差分が下図のように表示されます。地物の変更前後の状態を図で出してくれます。

差分を表示したところ



おわりに

上記で試したことのほか、タグやブランチを作ったり、以前のバージョンに戻したりもできるようなので、バージョン管理に必要な一通りの機能は備わっているという印象です。
あとは、リモートのGeoGigリポジトリにアクセスできるといいかなと(すでにそういう機能もあるのかもしれません)。

2015年12月22日火曜日

FOSS4Gで電子海図の世界をのぞく

これは、「FOSS4G 二個目だよ Advent Calendar 2015」の22日目の記事です。

QGISでは様々は形式のベクタファイルを読み込むことができますが、その中でも最もなじみが薄いファイルの一つだと思われる「S-57 Base File」について、少しお話します。
今回の主役はこれ

これはなに?

これは、「航海用電子海図」(ENC: Electric Navigable Chart)という呼ばれるものです。「S-57」というのは、ENCのデータフォーマットを定めている仕様の名称です(→S-57の仕様書はこちら)。
ENCは、大型の客船や貨物船に搭載されている「ECDIS(電子海図表示システム)」と呼ばれる専用の機器の上で海図を表示するのに使われます。

ENCデータの入手方法

日本近海のENCは、日本水路協会およびENC販売代理店から購入することで入手できます(→詳しい購入方法はこちら)。ただし、ENCのデータは、ECDISなどの専用の装置または表示用ソフトウェアでないと表示できないように、特殊な暗号化処理がかけられています。したがって、ENCのデータだけを入手して、QGISなどのGISソフトで表示させることはできません

例外として、アメリカ海洋大気庁(NOAA)が作成しているアメリカのENCは、前述の暗号化をかけていない状態でインターネット上に公開されており、誰でも無償でダウンロードして利用することができます。この記事では、アメリカのENCを見てみることにします。

アメリカのENCを入手するには、NOAAの海図ダウンロードサイトに行き、次の操作をします。
  1. 「Electronic Charts(ENC)」タブを選択
  2. 入手したいENCのある地域を地図上でクリック(囲いのあるところが、ENCデータの存在する領域になります)。
  3. 画面右側の"My Selection Information"から、入手したいENCデータを選んで、"Available Products"欄にある"ENC"リンクをクリックすると、ENCファイルをzip形式でダウンロードできます。
下図の例では、US4HA51Mという名前のハワイのオアフ島周辺の海図を選択しています。
NOAAの海図ダウンロードサイト


ダウンロードしたzipを展開すると、ENC_ROOTという名前のフォルダーの中に、US4HA51Mというサブフォルダーがあり(この名前は選択したENCによって異なります)、その中に拡張子が「.000」のファイルが存在します。これがENCデータファイルです(拡張子が「.001」とか「.002」などのファイルが同梱されていることがありますが、これは「電子水路通報」と呼ばれるファイルで、今回は無視します)。

ENC_ROOTフォルダーの中身

サブフォルダーの中身

ENCデータを見る


QGISで見る

QGISで見るには、「ベクタレイヤの追加」で、フォーマットから「S-57 Base file」を選択し、上記でダウンロード・展開した.000ファイルを選択します。
そうすると、 「追加するベクタレイヤの選択」というダイアログで、どのレイヤをQGISに読ませるかをきかれます(ENCにおける地物の種類ごとにレイヤが作られることになります)。まずは何も考えずに「全てを選択」しておけばよいでしょう。
レイヤの選択


ファイルの読み込みが完了すると、レイヤが作られてENCの内容が表示されます。
ただ、こんな感じで、何がなんだかさっぱりわかりません。
ファイルをロードしたところ


表示するレイヤを絞って、色の調整をすると、多少マシになります。下図の茶色の部分がオアフ島の陸地の部分になります。陸地の周辺に多数点在する緑の点は、その地点の水深を表す地物です。

少しは見やすくなったかも


専用ソフトで見る

QGISのほか、OpenCPNという、ENC表示専用のオープンソースソフトウェアがあります。当たりまえですが、こちらのほうが実際の表示に近いものです。
OpenCPNでENCを表示(上記と同じENCデータの一部を拡大表示)


また、ArcGIS for Desktopでも、Esri S-57 Viewerというエクステンションをインストールすることによって、ENCを表示することができます。

GDALでENCデータを扱う

GDALでもENCのデータを扱うことができます。

ogrinfoでデータの中身を見ると、こんな感じでレイヤー(地物)の一覧を見ることができます。
c:\ENC_ROOT\US4HA51M>ogrinfo US4HA51M.000
ERROR 4: S57 Driver doesn't support update.
Had to open data source read-only.
INFO: Open of `US4HA51M.000'
      using driver `S57' successful.
1: DSID (None)
2: ADMARE (Polygon)
3: AIRARE
4: ACHARE
5: BCNLAT (Point)
6: BCNSPP (Point)
7: BRIDGE
8: BUISGL
9: BUAARE
(以下省略)

また、ogr2ogrを使って、ENCデータを別のフォーマットに変換することも可能です。
c:\ENC_ROOT\US4HA51M>ogr2ogr.exe -f "ESRI shapefile" LNDARE.shp US4HA51M.000 LNDARE
ERROR 6: Can't create fields of type StringList on shapefile layers.
ERROR 6: Can't create fields of type IntegerList on shapefile layers.

変換されたshapefileをQGISで見ると、属性も含めて、きちんと表示されます。
陸地データだけ拾ったshapefileをQGISで表示したところ

おわりに


上述したように、電子海図データは、(一部地域を除いて)専用の表示装置でないと見られないので、非常に扱いづらいものになっていますが、オープンデータ化しようという動きもどうやらありそうで、そうなればもっとポピュラーなデータとして認知されるのではないかと思います。早く公開されることを願うばかりです。