航海用電子海図のフォーマット
S-57 の規格を読んでも、航海用電子海図のフォーマットは簡単にはわかりません。ここでは、具体例をあげて、簡単に説明します。 航海用電子海図の交換セットには、CATALOG.031 (S-57 Edition 3.1 の場合) と複数の拡張子が ”000” のファイルが入っています。 どちらのファイルも ISO 8221 によってカプセル化されたファイルで、ヒューマンリーダブルな形にはなっていません。CATALOG.030 は、データセットのカタログです。これは、航海用電子海図製品仕様(準備中)のところで説明します。 拡張子が "000" のファイルは、データセットです。これが1つのセルに対応しています。 S-57 のデータ構造には、2つのフォーマットが規定されていて、ASCII型とBINARY型があります。航海用電子海図は、S-57 の航海用電子海図製品仕様の規定の中で、BINARY型にする事になっています。 ここでは、説明の都合上、BINARY型をASCII型にデータ変換したものを使って説明します。 上の図で左側の4文字が '0001' から '****' までの範囲をレコードと呼んでいます。 レコードには複数のフィールドが存在します。フィールドターミネーター(フィールドの終端文字)は本当は16進で'1E'ですが、わかりやすくするため、改行文字にしてあります。 よって、この画面では、1行がフィールドに対応します。フィールドは、さらにサブフィールドに分かれて、フィールドのタグ名に応じて、それぞれのサブフィールドが定義されています。 フィールドには、最初にフィールドを区別するタグ、次に、フィールドの文字長、以降が、フィールドそのものです。まず、タグを説明します。S-57 には、数多くのタグが定義されていますが、航海用電子海図で使用するのは、データセットが新規の場合は、以下の表に示したものだけが使用されます。
これだけでは、何がなんだかわからないと思うので、簡単なデータを作ってみました。 下の図は、ENCDesignerで見た、セルの中に1つの水深区域(DEPARE)、1つの陸域(LNDARE)、 1つの自然海岸線(COALNE)があるケースです。この他に、データの存在区域を示すメタカバレッジ(M_COVR)も入れてあります。 あくまでもサンプルですので、航海用電子海図製品仕様(ENC Product Specification)を満たしている訳ではありません。 これを航海用電子海図のフォーマットにして、ASCII型にデータ変換すると、下のようになります。上の画面には、交点や線のIDを赤で入れました。少しは、対応が読めるでしょうか。 具体的に説明します。まず、座標の値の読み方です。S-57 では、空間的な座標値は必ず整数で表します。これをある値で割ると、実際の座標が求められます。 ある値は、下の図のDSPMの中のCOMF(Coordinate Multiplication Factor)に入っていて、この例では、10000000 です。文字が黒の四角で見えているのは、ユニットターミネーターと呼ばれていて、 サブフィールドが可変長の場合の区切り文字です。 では、座標は具体的にどのように表されているのでしょうか、下の図は、コネクティッドノード(交点、あるいは端点) VC0000000003 の座標読み方です。 これで、ENCDesigner の表示画面との対応が一部とれました。次は、エッジ(線)です。VE0000000004 を見てみましょう。 エッジは、必ずコネクティッドノードから始まり、コネクティッドノードで終わります。その間に、中間点(Vertex)を持ちます。上の図の例では、中間点は1つです。また、エッジには方向がある事に注意して下さい。 複数の中間点を持つエッジでは、SG2D で始まるフィールドに複数の経緯度が羅列されます。2点から成るエッジには、中間点はありません。 サンプルデータの例では、VE0000000005 が該当します。通常は始点と終点のノードは異なりますが、エッジが閉曲線になる場合、始点と終点のノードは一致しますので、VRPT に現れる2つのノードは同じ ID になります。 最後はフィーチャーです。 オブジェクトコード 42 番は、DEPARE(Depth Area、水深区域)です。アトリビュートコード 87 番は、DRVAL1 で浅い方の水深で、 単位は m です。アトリビュートコード 88 番は、DRVAL2 で深いほうの水深で、単位は m です。つまり、このフィーチャー は、水深 0m から 10m の水深表示区域です。 このフィーチャーは、FSPT によって、VE0000000004 と VE0000000005 を指しています。この時、それぞれのエッジの ID の直後の文字が、向きを表しています。 それぞれのエッジには向きがあり、VE0000000004 を正方向に、VE0000000005 を逆方向にして接続してあげれば、この面を囲む線は右回りになります。 大体どんなものか、ご理解頂けたでしょうか?頭の体操でした。 会社情報 サイトご利用にあたって |
|||||||||||||||||||||||||||||||||||||||||||||||