
3-2.データベースの構造
第3回目の講義です.今回はGRASSのデータベース構造とデータファイルの形式について説明します.
実習ではGRASSの基本操作を引き続き説明します(チュートリアルのBを行ないます).
GRASSのデータベースは,通常Unixで利用されている階層型のディレクトリー構造をそのまま用いています.基本的なディレクトリは
GISDBASE/LOCATION/MAPSETという3段階になっています.通常,利用者が操作するのはMAPSET以下のディレクトリです. 
GISDBASE
:GRASSのデータベースのトップレベル(最上位)のディレクトリーはGISDBASEと呼ばれています.利用者がGRASSに入る時は,まず,このディレクトリーを指定します.LOCATION
:GISDBASEの下のサブディレクトリーとして地域名を指定します.LOCATION(地域名)は地域ごとに独立したデータベースの名称です.すべてのデータベース検索と修正はこのLOCATION内に限定されます(同時に多数のLOCATIONをGRASSから呼び出すことはできません).MAPSET
:LOCATIONの更に下にサブディレクトリーMAPSETがあります.利用者が選んだMAPSETは現在使用しているMAPSETとして記憶され,コマンドの実行前にLOCATIONとセットで表示されます.データベースへの変更は,指定したMAPSETのみにおいて可能となります.MAPSETのデータは利用者固有のものですが,誰でも読めます.読めないようにするには,ファイルのpermissionsをUnixのコマンド等(例えば,chmodコマンド等)で指定しなければなりません(注意が必要な場合があります).なお,各LOCATIONの中には,すべての利用者が利用可能なPERMANENTとよばれる基本的なデータを含んでいる特別なMAPSETが必要です.MAPSETの構造:MAPSETはそれぞれのデータベース要素(Elements)としてファイルやサブディレクトリーを持ちます.これらの要素は次のようなものです.

SEARCH_PATH
:MAPSETのパス(ディレクトリー名)を指定したアスキー形式のファイルです.WIND
:現在の地域の設定情報が入ったファイルです.このファイルは,MAPSET作成時に自動的に作られ,GRASSのg.region コマンドにより修正されます.GROUP
:利用者がグループ(イメージ形式ファイル参照)として指定した画像名を記録します.これは,GRASSのイメージ機能により利用します.Element(要素)
:GRASSの中で用いられる要素(実際のデータ・属性等が保存されているディレクトリー名)です.要素のリストの一部を以下に示します. 
各要素はMAPSETが作られた時点では必ずしも存在しません.コマンドやアプリケーションによって必要に応じて自動的に作られます(自分で作成しなければならない場合もあります).MAPSETの実際のデータはこれらのElement(要素)の下にあります.
PERMANENT
:LOCATIONは必ずPERMANENTというMAPSETを持っています.PERMANENTはMAPSETの1つで,変更してはならないラスターやベクトルのファイル,例えばベースマップなどを保存しておくのに利用します.また,PERMANENTの中にMYNAMEとDEFAULT_WINDという2つの特別なファイルが含まれています.その2つは,通常のGRASSのコマンドでは修正されません.MYNAMEはLOCATIONの説明等を含む1行のアスキー形式のファイルです.DEFAULT_WINDはLOCATIONの領域の標準設定値(デフォルト値)が入っています.これらのファイルは,新しくMAPSETを作ったときに自動的に作成され(内容は自分が指定したもの),WINDの初期化等に使います.また,LOCATIONの標準設定として利用者が使用することができます.データベースの利用ルール
:GRASSのデータベースへの利用者からのアクセスはMAPSETレベルごとに制御されており,次の3つの簡単な規則があります:・利用者がMAPSETディレクトリーの所有者である場合に限り,そのMAPSETを選ぶことができる.
・GRASSが動作している現在のMAPSET中のみファイルの作成,あるいは修正が許される.
・MAPSET中のすべてのファイルは,UNIXのファイルpermissionsによって禁止されないかぎり,誰にでも読める.
SEARCH_PATH
:通常,利用者が利用するデータファイルは現在のMAPSETにあります.しかし,ユーザーが他の既存のデータファイルを指定した時は,データベースはファイルを見つけ出すためにサーチ(検索)をしなくてはならない場合もあります.例えば,もし利用者が既存する“SOILS”というラスター地図を利用したいときは,システムは“SOILS”と名付けられたラスターファイルを探すために,種々のMAPSETデータベースを見なければなりません.利用者がMAPSETのSEARCH_PATHを設定することにより,探すMAPSETを指定することができます.SEARCH_PATHは単にMAPSETのリストです.それぞれのMAPSETが順に調べられ,そしてその中で見つかった最初の“SOILS”というラスターファイルが表示されるようになります.このように利用者がSEARCH_PATHを設定することで,他の利用者のMAPSETのデータもアクセスすることができます.このファイルはg.mapsetsコマンドによって追加・修正等をします.Unixのファイルの利用許可(File Permissions)
:GRASSが作成するファイルは,一般にそのユーザーに対してはread(読む)/write(書く)が可能,ほかの人に対してはreadのみ可能です.ディレクトリーはユーザーにはread/write/search(探す)が可能で,他の人にはread/searchが可能です.つまり,先ほど説明したように,これはすべての利用者が他の誰のデータファイルでも読むことができることを意味します.MAPSET中のすべてのファイルへの許可は,GRASSのg.accessコマンドを用いてMAPSETディレクトリーの上で,readとsearchの許可を取り去る,あるいは付加することによって制御できます.もし,readとsearchの許可を取り去ったならば,他の利用者は現在の利用者のMAPSETにあるファイルを読むことができなくなります.
GRASSのデータファイル形式は基本的に,ラスター型データ,ベクトル型データ,サイト型データ,イメージデータグループなどに分けられます.ここでは,これらの各データ形式のデータ構造およびファイルの内容について簡単に説明します.
GRASSのラスター型データは各格子セルの属性値あるいは数値を示すマトリックスとして,ラスターファイルに保存されます(整数型はディレクトリcellの下,実数型はディレクトリfcellの下).それぞれの格子セルは,長方形(一般的には正方形のほうが解析には便利)で土地をパッチ状に覆うものと考えます.属性値はカテゴリー番号と呼ばれる値が割り当てられます.
それぞれのラスター型データに対する色々なサポートファイルがあります.サポートファイルは,すべてラスターファイル名と同じ名前がつけられており,それぞれはMAPSETの下にある別のディレクトリーに存在します.これらのディレクトリーとそれらの機能を以下に示します.

GRASSのラスターデータファイルの物理的な構造はuncompressed, compressed,およびreclassedの3つのフォーマットの中の1つをとることができます.
・Uncompressed
フォーマット:非圧縮型で,ラスターファイルには,実際に(行)×(桁)のマトリックスのデータが入っています.それぞれのバイト(あるいは,多バイトデータであればバイトセット)がラスター地図レイヤーの1セルを表します.物理的なファイルの大きさは,行×列×(byte/セル) バイトです.・Compressed
フォーマット:圧縮型で,非常に大きなディスク容量を使用するラスターファイルを保存するために用いられます.圧縮はラン-レングス変換(run-length encording)により行われます.ラン-レングス変換とは,同じデータ値の連続をその”値”と”連続する数”の2つで示すことによって,圧縮する方法です.・Reclass
レイヤー:Reclassレイヤーは,直接的なデータを含んでいませんが,参照する地図レイヤーのカテゴリーを再分類表に沿って再分類し,ほかの地図レイヤーとして参照できるようにします.reclassファイルはそれ自身,直接的なデータを持っていません.reclass情報は,ラスターヘッダーファイルに保存されます.サポートファイル
:ヘッダー(Header),カテゴリー(category),カラーテーブル(color table)ファイルなどから構成されます.これらのフォーマットと意味を以下に示します.ヘッダーファイル(cellhd)
:下に示したような,ラスターファイルの領域・分解能・データのサイズ等を記述しています. 
カテゴリーファイル(cats)
:ラスターファイルの名前,カテゴリ値(番号)とカテゴリーの名前の対応を記述しています. 
カラーテーブルファイル(colr)
:ラスターファイルのカテゴリーとそれを表示するための色の対応を記述しています. 
なお,実数型は整数型に加えて多くのサポートファイルが必要ですので注意してください.GRASSのバージョンの上位に向っては互換性がありますが,下位に向っては互換性がありません.なお,GRASS4.Xで作成したファイルは(GRASS5.0でも,そのままでも使える場合がありますが),r.supportコマンドにより,GRASS5.0の形式に更新して下さい.
実数型に必要なサポートファイル
:実数型には上記のサポートファイル以外に,フォーマット(f_format),レンジ(範囲;f_range),変換ルール(f_quant),ヌル(null)などのファイルがあります.これらは,cell_miscディレクトリーの下のラスターファイル名のディレクトリーの下に,それぞれ保存されています. 
これらの意味を以下に簡単に示します.
・f_format(フォーマット):実数型データのフォーマットを定義しています.
・f_range(レンジ;範囲):実数型データの最大値と最小値を記述しています.
・f_quant(変換ルール):実数型データを整数型に変換する際の方法を記述しています.
・null(ヌル):ヌル値のフラグを記述しています.
GRASSのベクトル型データは,arcs(アーク;弧)と呼ばれる非交差曲線からなるarc-node表現法で保存されています.arcはxy座標のペアの連続として保存され,1つのarcの2つの終端点は,node(ノード;節)と呼ばれています.2つの連続したxyのペアがarcの各セグメントを示します.
arcは,1つ,または結合した他との組み合わせで,より高度な地図要素であるline(ライン;線(例えば,道路あるいは河川)),あるいはarea(エリア;領域(例えば農地))を形成します.線的な形(linear feature)を形成するarcは,line(線)と呼ばれ,そして,area(領域)の輪郭となるarcはarea edge(領域境界線),あるいはarea line(領域線)と呼ばれています.
それぞれの線や領域には,カテゴリー番号と呼ぶ整数の属性値が割り当てられます.ベクトル型データの情報は多くのデータファイルに分けられて保存されます.1つのベクトル地図レイヤーを構成するファイルはすべて同じ名前を持ち,それぞれはMAPSETの下の異なったディレクトリー(要素element)に保存されます.これらのディレクトリー(要素)とその機能(function)を以下に示します.

実際に使われるarcの情報は,
digディレクトリにバイナリー形式のファイルとして保存されます.ASCIIフォーマットで表現したものはdig_asciiディレクトリに保存されます.データはヘッダー部分とデータ部分の2つから構成されます.ヘッダー部分にはベクトルデータの諸情報(作成者・作成日時・スケール・領域等)を示しています.このヘッダー部分のフォーマットを次に示します: 
arcの情報は,このヘッダーに続いています.それぞれのarcは形の記載とそれに続く一連のxy座標のペアより表現されます.形の記載部分は
arcのタイプ(A:領域境界,あるいは,L:線)+点の数
の2つで示します(例えば,3点からなる線はL 3,5点から構成される領域は,A 5など).そして,実際のxy座標点が次に続きます(以下は,UTM座標系の例です).

ベクトルカテゴリー属性ファイル(dig_att)
:ベクトル地図レイヤーにおけるそれぞれの線や領域に,それぞれカテゴリー番号を割り当てます.dig_attはASCII形式のファイルで,各線や領域に関してそれぞれ,座標マーカーとカテゴリー番号を指定したつぎのようなものです. 
座標マーカーとはdigファイルにおける線や領域を特定するために用いられます.そのためには,線や領域をユニークに識別できるような位置を示していなければなりません.特に,領域(A)の座標マーカーは領域の内部になければなりません.また,線(L)の座標マーカーは,線を確実に示す座標でなければならず(他の線との交点ではだめ),かつ,node(節;端点)を指定してはいけません.
このdig_attファイルに記載されていない線や領域は,unlabeled(ラベルなし)として取り扱われます.注意しなければならないのは,ベクトル→ラスター変換などを行う際に,ラベルなしの領域はカテゴリーゼロとして変換され,また,ラベルなしの線は無視されます.
カテゴリーラベルファイル(dig_cats)
:各カテゴリー値(番号)にカテゴリー名をラベルとして付けます.記述方法やフォーマット形式はラスターのカテゴリーファイルと同じです.
点のデータはsite list(サイト(位置)リスト),あるいはsite file(サイト(位置)ファイル)と呼ばれ,ASCII形式でファイルに保存されます.サイトファイルはデータベース要素(ディレクトリー)のsite_listsの下に保存されます.サイト型データファイルの例を示します.

人工衛星などによって撮影されたデジタル画像データ(リモートセンシング画像)やイメージスキャーナによってデジタル化された航空写真などは,各セルの情報を波長帯(バンド)ごとなどに分けファイル化し,多バンド(マルチバンド)ファイルとして構成されることが一般的です.例えば,ランドサットのTMデータはバンド1からバンド7までに分けられています.この様な多バンドの画像は同じ領域で同じ分解能を持つなど,値以外は同じであることが多いために,それらをまとめて1つのグループとして取り扱うと便利です.このためのデータ形式にラスター型データをグループとして取り扱うイメージ型データ(GROUP)があります.画像は個々は通常のラスター型データですが,グループとして扱うことにより,画像データの入力,位置合わせや統計解析等を行う場合に有効です.
GRASSにはデータの表示や解析などを行う区域を限定するための
REGION(領域)およびMASK(マスク)という2つのメカニズムがあります.利用者はREGIONで長方形の区域を限定し,さらにオプションとしてMASKによって,その領域内でのセルレベルの取り扱い領域を制限でます.REGIONとMASKは利用者の現在使用しているMAPSETの下に保存されます.GRASSのプログラムは自動的にそのREGIONの中のデータだけを表示・検索・計算します.さらに,MASKが設定されていれば,MASKの範囲だけに処理は限定されます.
REGIONはコマンドg.regionやd.zoomを用いることによって設定され,設定内容はMAPSET中のWINDファイルに記述されます.また,このファイルは,単に地理的な領域境界だけでなく,セルの解像度等も指定できます.
MASKは,r.maskコマンドにより設定できます.MASKはラスター型データの特殊なファイルであり,他のラスターファイルを読む時に,不透明なフィルターとなります.MASKが設定されていると,図14に示したように,MASK中でNo-data(データなし,カテゴリー値0)となっているセルは,もとの実際の値にかかわらずデータなし(null;図中では0)に対応づけられます.逆に,データあり(カテゴリー値1)となっているセルは,もとの値通りに対応づけます.このことにより,様々な形で取り扱う領域を限定することが可能となります.

図14.MASKの概念図
GRASSのデータベース構造
Unixの階層型ディレクトリー構造
GISDATABASE/LOCATION/MAPSET
実データ:MAPSETの下のElement
PERMANETディレクトリー
(特別なディレクトリー)データフォーマット
ラスター型 格子セルマトリックス(整数:cell,実数:fcellのディレクトリー)
サポートファイル(名前はすべてデータ名と同じで,ディレクトリーが異なる)
ヘッダー(cellhd),カテゴリ(cats),カラー(colr)
ベクトル型 非交差曲線からなるarc-node表現法
実際の座標データ:digあるいはdig_asciiディレクトリー
サポートファイル(名前はすべてデータ名と同じ,ディレクトリーが異なる)
属性ファイル(dig_att)・カテゴリ名(dig_cats)
サイト型 点のデータ(site_lists)
イメージ型 多バンドの画像などはグループ(group)
領域とマスク
REGIONおよびMASKによる2段階の領域限定
(以上,第3回講義)
第3回 実習のページへ 大阪市立大学広報ホームページ