レーダー・アメダス解析雨量データフォーマット                          平成11年5月 気象庁 加筆 平成12年2月 気象庁 加筆 平成13年5月 気象庁 一部修正 平成14年3月 気象庁 一部修正 平成15年10月 気象庁 1 フォーマットの特徴    レーダー・アメダス解析雨量データに用いたフォーマットはGPVのうち離散的な値を持つ データを想定しており、主にレーダーあるいは解析雨量等に用いられる。ランレングス圧 縮を使用しているので展開プログラムの作成が容易で、展開が高速なのが特徴である。 2 ファイル形式概説  一つのファイルは管理部とデータ部の繰り返しからなる。各部の最後に未定義の領域が 含まれることがある。 +---------------------------------------------+ | 管理部                   | |  コメント、データ数、データの日時、    | |  データ部の位置、格子系定義、       | |  圧縮されたデータを展開するのに必要な情報 | +---------------------------------------------+ |        (未定義)          | +---------------------------------------------+ | データ部                  | |  圧縮データ、付加情報           | +---------------------------------------------+ |        (未定義)          | +---------------------------------------------+ | データ部(繰り返し)            | |                       | 3 ファイルフォーマット詳細  表の見方 +---------------------+ | 内容 | +---------------------+ | 型*サイズ(バイト) | +---------------------+ | 例 | +---------------------+   型を示すC は文字, I は整数( Little Endian )。   予備は全ビット1である。 A 管理部 A-1 コメント (80バイト) +---------+--------+-------------------------------+------+------+------+ | 識別子 | 版番号 | 作成者コメント | | || +---------+--------+-------------------------------+------+------+------+ | C*6 | C*5 | C*66 | I*1 | I*1 | I*1 | +---------+--------+-------------------------------+------+------+------+ |"JMARAP" |"2002A" |"*****************************"| 13 | 10 | 0 | +---------+--------+-------------------------------+------+------+------+  最後の3バイトを除き ASCII 文字からなる。識別子は固定である。  作成者コメントはファイル作成者が自由に設定してよい。 A-2 データ部へのインデックス (4+20×データ数:データ数が24ならば484バイト) +----------------+ | データ数 | +----------------+ | I*4 | +----------------+ | 24または48 | +----------------+   データ数:2003年5月までは「24」(毎正時)、6月以降は「48」(30分毎) +-----+-----+-----+-----+-----+-----+-----+------+-------------------- | 年 | 月 | 日 | 時 | 分 | 要素| 予備|データ| | | | | | | | |の位置| +-----+-----+-----+-----+-----+-----+-----+------+ | I*2 | I*1 | I*1 | I*1 | I*1 | I*2 | ?*8 | I*4 | データ数分繰り返し +-----+-----+-----+-----+-----+-----+-----+------+ | 2005| 2 | 22 | 15 | 00 | 0 | | | +-----+-----+-----+-----+-----+-----+-----+------+--------------------   要素  0:解析雨量   日時は日本時刻   データの位置はファイルの先頭から該当するデータ部の先頭までのバイト数 A-3 格子系定義 (40バイト) +-----+--------+--------+---------+------+------+--------+--------+-----+ |予備 |地図種別| 緯度 | 経度 |横格子|縦格子|横格子数|縦格子数|予備 | | | | | | 間隔 | 間隔 | | | | +-----+--------+--------+---------+------+------+--------+--------+-----+ | ?*2 | I*2 | I*4 | I*4 | I*4 | I*4 | I*2 | I*2 |?*16 | +-----+--------+--------+---------+------+------+--------+--------+-----+ | | 1 |47987500|118015625| 31250| 25000| 1024 | 1120 | | +-----+--------+--------+---------+------+------+--------+--------+-----+    地図種別 (255以下) 1:緯度・経度格子座標系    緯度・経度は最初のデータの座標。単位は1,000,000分の1度    本CD-ROMデータでは、地図種別は緯度・経度格子座標系、範囲は矩形、最初のデー タは範囲の北西端である。データ順は、同緯度で西から東に並び、範囲の東端に達すれば 1格子南の緯度の西端に移る。 A-4 圧縮方法, 雨量値表 (通常200バイト程度, 最大514バイト) +--------+--------+ +----------+------------------------ | | | |レベル0の | |圧縮方法|レベル数| | 雨量値 | +--------+--------+ +----------+ | I*2 | I*2 | | I*2 | <レベル数分繰り返し> +--------+--------+ +----------+ | 1 | 99 | | -1 | +--------+--------+ +----------+-------------------------    圧縮方法は現在1のみ定義されている。    レベル数の最大は255。レベル数が0なら雨量値表を用いない。 A-5 レベル-反復数表 (通常258バイト) +----------+ +-----------------+-------------------------- | | | 組み合わせ1 | |表の大きさ| +-------+---------+  | | |レベル | 反復数-2| +----------+ +-------+---------+ <表の大きさ分繰り返し> | I*2 | | I*1 | I*1 | +----------+ +-------+---------+ | 128 | | 0 | 2 | +----------+ +-------+---------+--------------------------    表の大きさの最大は128。 B データ部 B-1 +--------------+ +------------+-------------------------- |圧縮後の大きさ| | 圧縮データ | +--------------+ +------------+ | I*4 | | I*1 | <繰り返し> +--------------+ +------------+ | 12345 | | 1 | +--------------+ +------------+-------------------------- B-2  (12バイト) +------------------+--------------+ | |解析に使用した| | レーダー運用状況 |アメダスの総数| +------------------+--------------+ | 8 byte(64bit) | I*4 | +------------------+--------------+ |0000……0101011111| 4025 | +------------------+--------------+  レーダー運用状況(64bit)の構造 (1995年1月〜1999年9月) +--------+ |     | | 未使用 | |     | +--------+ | 16 bit | +--------+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |凌|啓|衛|ア|石|宮|沖|名|種|福|室|広|松|大|名|福|新|富|東|秋|仙|函|釧|札| |風|風|星|メ|垣|古|縄|瀬|子|岡|戸|島|江|阪|古|井|潟|士|京|田|台|館|路|幌| |丸|丸| |ダ|島|島| | |島| |岬| | | |屋| | |山| | | | | | |   | | | |ス| | | | | | | | | | | | | | | | | | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ (1999年10月〜 ) +--------+ |     | | 未使用 | |     | +--------+ | 16 bit | +--------+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |凌|啓|衛|ア|石|静|沖|名|種|福|室|広|松|大|名|福|新|長|東|秋|仙|函|釧|札| |風|風|星|メ|垣|岡|縄|瀬|子|岡|戸|島|江|阪|古|井|潟|野|京|田|台|館|路|幌| |丸|丸| |ダ|島| | | |島| |岬| | | |屋| | | | | | | | | |   | | | |ス| | | | | | | | | | | | | | | | | | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ (2001年4月〜 ) +----------+ |     | | 未使用 | |     | +----------+ | 18 bit | +----------+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |ア|未|未|石|沖|名|種|福|室|広|松|大|名|福|静|長|東|新|秋|仙|函|釧|札| |メ|使|使|垣|縄|瀬|子|岡|戸|島|江|阪|古|井|岡|野|京|潟|田|台|館|路|幌| |ダ|用|用|島| | |島| |岬| | | |屋| | | | | | | | | | |   |ス| | | | | | | | | | | | | | | | | | | | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| 2| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+   00 未デジタル化またはデータ未使用, 01 エコーあり, 10 エコーなし, 11 観測なし * 未定義領域  管理部、データ部の最後にこのフォーマットには定義されていない情報が付加される事 がある。領域の大きさは不定である。 4 解説 4−1 雨量値表  データ部には雨量値そのものでなく、レベル値で格納されている。これはレベル値から 雨量値への換算表である。データの並びは不定で、昇順に並んでいるとは限らない。  雨量値表の単位は 0.1mm。'-1' は欠測を表す。 4−2 レベル-反復数表  同じレベル値が連続しているデータを効率的に格納するための表である。レベルと(反 復数-2)の組からなる。 4−3 圧縮データ  圧縮データ部は以下のいずれかの繰り返しである。 (この節では大きさの単位は bit ) (a) レベル-反復表によるランレングス圧縮 +---+-------------------+ | 0 |レベル-反復表の位置| +---+-------------------+ | 1 | 7 bit | +---+-------------------+ (b) レベル反復表によらないランレングス圧縮 +---+---+---+-----------+ +-----------+ | 1 | 1 | 0 | レベル値 | | 反復数 -2 | +---+---+---+-----------+ +-----------+ | 1 | 1 | 1 | 5 bit | | 8 bit | +---+---+---+-----------+ +-----------+ (c) 単独のレベル値(頻度の多いもの) +---+---+---------------+ | 1 | 0 | レベル値 | +---+---+---------------+ | 1 | 1 | 6 bit | +---+---+---------------+ (d) 単独のレベル値(頻度の少ないもの) +---+---+---+---+---+---+---+---+ +----------+ | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | | レベル値 | +---+---+---+---+---+---+---+---+ +----------+ | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | 8 bit | +---+---+---+---+---+---+---+---+ +----------+  《サンプル》  雨量値表 レベル-反復数表   雨量値     レベル 反復数 +----+ +-----+-----+ 0 | -1 |(欠測) 0 | 0 | 255 | レベル0が257個 +----+ +-----+-----+ 1 | 0 |(0.0mm) 1 | 0 | 0 | レベル0が 2個 +----+ +-----+-----+ 2 | 4 |(0.4mm) 2 | 1 | 0 | レベル1が 2個 +----+ +-----+-----+ 3 | 10 |(1mm) 3 | 0 | 1 | レベル0が 3個 +----+ +-----+-----+ 4 | 20 |(2mm) 4 | 0 | 2 | レベル0が 4個 +----+ +-----+-----+ 5 | 30 |(3mm) 5 | 1 | 1 | レベル1が 3個 +----+ +-----+-----+ 6 | 40 |(4mm) 6 | 1 | 2 | レベル1が 4個 +----+ +-----+-----+ 7 | 50 |(5mm) 7 | 2 | 0 | レベル2が 2個 +----+ +-----+-----+ 8 | 70 |(7mm) 8 | 1 | 3 | レベル1が 5個 +----+ +-----+-----+ 9 | 90 |(9mm) 9 | 3 | 0 | レベル3が 2個 +----+ +-----+-----+ | | | | |              圧縮 雨量値   レベル値    データ +----+ +----+ +----+ | -1 | → | 0 | --+ | | +----+ +----+ |→ | 1 | | -1 | → | 0 | --+ | | +----+ +----+ +----+ | 0 | → | 1 | --+ | | +----+ +----+ | | | | 0 | → | 1 | |→ | 5 | +----+ +----+ | | | | 0 | → | 1 | --+ | | +----+ +----+ +----+ | 4 | → | 2 | ---→ | 82 | +----+ +----+ +----+ | 0 | → | 1 | ---→ | 81 | +----+ +----+ +----+ | 10 | → | 3 | --+ | | +----+ +----+ |→ | 9 | | 10 | → | 3 | --+ | | +----+ +----+ +----+ | 20 | → | 4 | ---→ | 84 | +----+ +----+ +----+ 4−4 展開プログラム例 short *levels; /* レベル・雨量値換算表 */ struct { unsigned char level; /* レベル値 */ unsigned char rep; /* 反復数 */ } tableLevRep[128]; /* レベル-反復数表 */ int unpack( unsigned char *data, /* 圧縮されたデータ */ int size, /* 圧縮されたデータのバイト数 */ short *out ) { /* 雨量値に展開されたデータ */ int ii, ip = 0, op = 0; unsigned char d; while( ip < size ) { d = data[ip++]; if( ( d & 0x80 ) == 0 ) { /* (a) */ for( ii = tableLevRep[d].rep + 2 ; ii > 0 ; ii-- ) out[op++] = levels[ tableLevRep[d].level ]; } else if( ( d & 0xE0 ) == 0xC0 ) { /* (b) */ for( ii = data[ip++] + 2 ; ii > 0; ii-- ) out[op++] = levels[ d & 0x1F ]; } else if( ( d & 0xC0 ) == 0x80 ) { /* (c) */ out[op++] = levels[ d & 0x3F ]; } else if( d == 0xFE ) { /* (d) */ out[op++] = levels[ data[ip++] ]; } else { fprintf( stderr, "解凍できませんでした\n" ); exit(1); } } return op; }