AISデータを扱うことになった方に向けて、基本的なAISの仕様についてとデコードの方法について解説していきます。
日本語のソースがほとんどないので、英語ができない学生は困っているはずなのでどうぞ活用してください。
以下の内容は「http://catb.org/gpsd/AIVDM.html」 こちらをほとんど和訳した内容です。
Eric S. Raymondさんありがとうございます。
この投稿でわからない部分は英語がわかる友達に聞きましょう。
AISとは船舶自動識別装置のことです。
典型的なAISの生データは以下のようなものです。
!AIVDM,1,1,,B,177KQJ5000G?tO`K>RA1wUbN0TKH,0*5C
コンマ「,」で区切られた一つ一つに意味があります。
この記事では「177KQJ5000G?tO`K>RA1wUbN0TKH」この部分をデコードする方法について解説していきます。
まずはじめに、デコードやエンコードという言葉が理解できない人のために言葉の解説をします。
エンコードとは、すごく簡単に言ってしまえば「短く簡単にする」ことです。
デコードとは、その逆です。
例:「こんにちは」→エンコードする→「00」
「00」→デコードする→「こんにちは」
まだしっくり理解ができないかと思います。
野球中継を見たことありますか?
時々、「監督がバッターに向けてジェスチャー(サイン)をする」場面があります。
あれも一種のデコードとエンコードと考えられます。
バッターボックスとベンチは離れてますから、大きな声で指示を出すのは難しいです。
だから、ジェスチャーのサインを送るすんですね。
例えば、「大きく振れ!」のメッセージがサインでは「帽子を触る」だとします。
これは、「大きく振れ!」→エンコード→「帽子を触る」 ということです。
バッターはその逆で、デコードをして「帽子を触る」を「大きく振れ!」と解釈するわけです。
なんとなくわかってきましたか?
では、AISデータの話に戻ります。
AISデータをデコードするというのは、具体的に言い換えれば、
「177KQJ5000G?tO`K>RA1wUbN0TKH」⇦これを人間が読める形にする、ということです。
ここまでの説明で「AISをデコードする」という言葉の意味が理解できましたでしょうか?
それでは、次に「プロトコル」という言葉の説明をします。
プロトコルとはデコードとエンコードをする時のルールです。
意味わかんないですね。
また例を用いて説明します。
先ほど、二つの例を出しましたね。
「こんにちは」→「00」
「大きく振れ!」→「帽子を触る」
みなさん、もし誰かからメールが来て、そこに「00」とたった一言書いてあったら、どう思いますか?
びっくりしますよね。
「いや、あれは”こんにちは”って意味なんだよ」
と後で友達に説明されても「知らねーよ」ってなります。
野球でも同じことが起こります。
あるチームの監督が、別のチームの選手に向けて「帽子を触る」動作をしても意味が理解できません。
「なんか、やけにあの人帽子触るなぁ」
で終わりです。
メッセージを送る側と、受け取る側でルールがないと、意味が理解できませんよね?
このルールのことを情報技術(IT)ではプロトコル、と呼ぶのです。
AISにも当然プロトコルがあります。
それが次の表です。
難解な表に見えますが、びっくりしないでください。とても簡単です。
この表の見方は簡単です。演習形式で理解していきましょう。
問1「表の1列目から”m”を探して、その右隣三つ目の二進法表示を教えてください」
小学生のおつかいくらい簡単です。
表を見て、「m」を探してください。
そしたら、その右隣三つめの0と1で表された数字を答えてください。
答えは「110101」です。
できましたか?
すごい!
実はここまでで、AISデコーディングの半分が終わっているのです!
今あなたがやったことを、AISデータの全ての文字に適用すれば、「AISデータを二進法表示する」ことに成功しているのです。
つまり、
「177KQJ5000G?tO`K>RA1wUbN0TKH」⇦これを一文字ずつ0と1に変えていけばいいのです。
↑この文字は28文字あるので、二進数表示にすると28*6で168桁の二進数表示の数値になります。
しかし、まだこれでは人間が読んで理解出来る形ではないです。
もう一つの表が必要です。
それが次の表です。
表の使い方を説明します。
①168文字の二進数を左から順番に6個取り出します。
②これを10進数に変換します(わからない人は「2進数 10進数 変換」で検索)
③その数値がメッセージタイプを表しています。
表の使い方が理解できましたか?
表をみてください。
「Field」は二進数の桁(インデックス)を表しています。
その桁が表す情報を説明しているのが「Description」です。
例えば、61-88は経度の情報を表しているのです。
(ただし、これは分表示で10000を掛けられたものなので、度表示にするなら60*10000で割る)
表に従って168文字から01を取り出して、10進数に変換して必要ならまた別の処置を施して人間のわかる形にデコードをしてあげてください。
以上がAISのでコーディングの仕方でした。
エクセルでデコードをするのが楽ですよ。