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で表示したところ

おわりに


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

0 件のコメント:

コメントを投稿