(ロカポ)開発などのブログ2008/02/16ロカポーターのしくみ(2)2.圧縮したデータ群の接続方法ロカポータ圧縮で圧縮した各データは、可変長(というか不定長)のデータの羅列となります。データが接頭符号であれば、そのまま接続できますし、接尾符号でデータの区切りが分かる場合もそのまま接続できます。接頭符号など、情報圧縮全般についてはここが詳しい!情報と通信のハイパーテキスト(詳しい!)しかし、接頭符号でも接尾符号でもないデータをそのまま接続すると、今度分離しようとした時に、どこで分離したらよいか分からず、一意にデータを復元できなくなる恐れがあります。そのばあい、区切り文字を使うこともできますが、仮にデータが100個あれば区切り文字が1文字としても99文字余分に必要になってしまいます。なんだかもったいない。二進数であれば、このようなデータを接続するには(各データの値が小さい場合は)ワイル(weyl)符号化、ガンマ(γ)符号化、(δ)デルタ符号化、などの方法が良く使われ、これらの符号化により接頭符号化するものです。ソフトバンクパブリッシング)ガンマ符号化デルタ符号化については、下記サイトの説明が良く分かります。データ圧縮)さて、ロカポーターでは二進数での処理はせず、文字列で圧縮しているので、文字列ベースでもう少し簡単なものは出来ないか、と考えたのが以下のロカポーターの方式です。あるのでそれぞれを全く違う種類の文字で並べれば人間が目で見ても区切りがすぐわかる。いうように単純に文字を置換します。5先ほど、全く同じデータの際でも必ず1文字は残すルールとしたので、このまま接続しても、文字種によってデータの境界が明白なので、区切り文字などを使用しなくても、そのまま接続してOKBAADA20012CI35C135BJ5AJJJI29H5できあがり。分離するときは、文字か数字かで単純に分ける。5はい、もとどおりです。なんと単純な仕組みですが、これでも「差分をとって、二進数にして、ガンマ符号にして、最後のホフマン符号で圧縮して、6ビットづつ64進法の文字に戻す」とやる場合と比べて、2倍も差はないです。2倍というのは適当な言い方ですが、仮に10000文字の元データをギュウギュウに圧縮して1000文字とすると、ロカポーター圧縮のような簡易形式でも、たいてい2000文字以内には収まる、という意味です。ちなみにこの例では、データの種類ごとに使う文字の種類を変えたが、要するにデータの最後の文字と、次のデータの(どこになるかわからない)先頭部分とが違う文字であればOKです。(AAAA)0のように、問題なくデータを再分離可能です。ロカポータでは、この両方の方式を組み合わせています。緯度経度には前者の方式をベースにしたもの、高度や日時などの付加データには後者の方式をベースにしたもの使用しています。次回は、ロカポーターの目玉である、データ途中の精度変更です。ご質問等があれば、このブログに投稿頂くか、ロケージングまでお問い合わせください。それとロカポーターのホームページ(突貫で作ったので、まだ1ページモノですが・・・)からロカポーターの仕様書をダウンロードできるようになっていますので、どうぞご利用ください。Japanロカポ開発者です。