第3回目の講義です.今回はGRASSの構造とデータ構造について説明します.
実習ではGRASS Seedsチュートリアルの残りのCとDを行います.
GRASSは色々なタイプの利用が可能なように様々な階層的なレベルを持っています.また,それぞれのレベルでは異なったタイプのユーザーインタフェースがサポートされています(図11).最も利用者に便利になっているのはTcl/tkを用いたTcl/tkGRASSやOSF/Motif(fvwm等でも可)で稼動するXGRASSのインターフェースを用いたレベルです.しかし,GRASSの一般的な利用者のほとんどはインターフェースとしてコマンドレベルを通してシステムを利用しています.
コマンドレベルでは,利用者はUNIXシェルを通してGRASSツールを利用します.GRASSを起動すると,利用者はキーボードを通して対話型で情報を入れながら操作するか,あるいはコマンドラインから一度に情報を入れて動作させます.
プログラマーレベルにおいては,利用者がC言語でプログラムすれば,GRASSにあるライブラリーを直接呼び出して,GRASSとは異なる独自のプログラムを作成し,利用することができます.
インターフェース限定レベルはTcl/tkやOSF/Motifなどの標準ではない限定されたインターフェースを利用するレベルです.このレベルの利用は必要に応じて,様々なコマンドやそれらの値をマウスから操作できます.これはWindowsなどの優れたグラフィカルユーザーインターフェースに慣れた我々にとって非常に便利なものです.現在はTcl/tkが主流なようです.Tcl/tkGRASS(図12)に関しては,後日説明する予定です.
利用者や開発者の努力によって生み出されるGRASSのソフトウェアは常に規格化され,そして常に最新のものに更新されています.また,GRASSは変数の記述,アルゴリズムの説明を付けたプログラムのソースコード(C言語で基本的に作成)を全て公表しています.
このように,他の商用の市販されているGISに比べて,GRASSは低いコスト(基本的に無料ですが)という利点だけではなく,オープンアーキテクチャであるという利点もあります.これにより利用者は必要性にあわせてカスタム化したり,改良したりすることが可能になっています.

図11.GRASSの階層的な利用レベル.

図12.Tcl/tkGRASSの表示例.
GRASSのデータベースは,通常UNIXで利用されている階層型のディレクトリー構造をそのまま用いています.基本的なディレクトリはGISDBASE/LOCATION/MAPSETという3段階になっています.一般的な利用者が操作するのはMAPSET以下のディレクトリです.

GISDBASE:GRASSのデータベースのトップレベル(最上位)のディレクトリーはGISDBASEと呼ばれています.利用者がGRASSに入る時は,まず,このディレクトリーを指定します.
LOCATION:GISDBASEの下のサブディレクトリーとして地域名を指定します.LOCATION(地域名)は地域ごとに独立したデータベースの名称です.すべてのデータベース検索と修正はこのLOCATIONのみに限定されます.なお,同時に多数のLOCATIONをGRASSから呼び出すことはできません.
MAPSET:LOCATIONの下にサブディレクトリーMAPSETがあります.利用者が選んだMAPSETは現在使用しているMAPSETとして記憶されます.データベースへの変更は,指定したMAPSETのみにおいて可能となります.MAPSETのデータは利用者固有のものですが,UNIXファイルのpermissionsによって止めないかぎり誰でも読めますので注意して下さい.なお,各LOCATIONの中には,すべての利用者が利用可能なPERMANENTとよばれる基本的なデータを含んでいる特別なMAPSETを持たなければなりません.
MAPSETの構造
:MAPSETはそれぞれのデータベース要素としてファイルやサブディレクトリーを持ちます.これらの要素は,下のダイアグラムの中で,/の後に続くものによって示されます.MAPSETには次のようなファイルがあります.
a)
SEARCH_PATH:MAPSETのサーチパスです.このファイルはg.mapsetsコマンドによって作成・修正します.b)
WIND:現在の地域設定です.このファイルは,MAPSET作成時に自動的に作られて,GRASSのg.region コマンドにより修正されます.c)
GROUP:利用者がグループとして指定した画像名を記録します.これは,GRASSのイメージ機能により利用します.d)
Element(要素):GRASSの中で用いられる要素のリストの一部を以下に示します.
MAPSETの下のサブディレクトリーは,それぞれがデータベースの要素です.各要素はMAPSETが作られた時点では存在せず,コマンドやアプリケーションによって必要に応じて自動的に作られます.MAPSETの実際のデータはこれらのElement(要素)の下にあります.
PERMANENT
:それぞれのLOCATIONにはPERMANENTというMAPSETを持っています.PERMANENTはMAPSETの1つで,変更してはならないラスターやベクトルのファイル,例えばベースマップなどを保存しておくのに利用します.また,このMAPSETのなかに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のデータもアクセスすることができます.UNIXのファイルの利用許可(File Permissions)
:GRASSが作成するファイルは,利用者に対してはread/writeが可能,ほかの人に対してはreadのみ可能です.ディレクトリーは利用者にはread/write/searchが可能で,他の人にはread/searchが可能です.つまり,先ほど説明したように,これはすべての利用者が他の誰のデータファイルでも読むことができることを意味します.MAPSET中のすべてのファイルへの許可は,GRASSのg.accessコマンドを用いてマップセットディレクトリーの上で,リードとサーチの許可を取り去る,あるいは付加することによってコントロールできます.もしリードとサーチの許可を取り去ったならば,他のどのような利用者も現在の利用者のMAPSETにおいてファイルを読むことが不可能になります.
GRASSのラスター型データは格子セルの属性値を示すマトリックスとして,ラスターファイルに保存されます(ディレクトリ
cellの下).それぞれの格子セルは,長方形(一般には正方形)で土地をパッチ状に覆うものと考えます.属性値はカテゴリー番号と呼ばれる整数が割り当てられます(GRASS5.0からは実数も取り扱えます).それぞれのラスター型データに対する色々なサポートファイルがあります.サポートファイルは,すべてラスターファイルと同じ名前がつけられており,それぞれはMAPSETの下にある別のディレクトリーに存在します.
これらのディレクトリーとそれらの機能を以下に示します.

GRASSのラスターデータファイルは整数値の2次元マトリックスです.それぞれの格子セルは1バイトから4バイト(1バイト=8ビット)のデータとしてファイルに保存されています.N×MラスターファイルとはN行,M列のセルを含んでいことを示します.ラスターファイルの物理的な構造はuncompressed, compressed,およびreclassedの3つのフォーマットの中の1つをとることができます.
Uncompressed
フォーマット:非圧縮型で,ラスターファイルには,実際にN×Mマトリックスのデータが入っています.それぞれのバイト(あるいは,多バイトデータであればバイトセット)がラスター地図レイヤーの1セルを表します.物理的なファイルの大きさは,行×列×(byte/セル) バイトです.Compressed
フォーマット:圧縮型で,非常に大きなディスク容量を使用するラスターファイルを保存するために用いられます.圧縮はラン-レングス変換(run-length encording)により行われます.ラン-レングス変換とは,同じデータ値の連続をその”値”と”連続する数”の2つで示すことによって,圧縮する方法です.Reclass
レイヤー:Reclassレイヤーは,直接的なデータを含んでいませんが,参照する地図レイヤーのカテゴリーを再分類表に沿って再分類し,ほかの地図レイヤーとして参照できるようにします.reclassファイルはそれ自身,直接的なデータを含んでいません.reclass情報は,ラスターヘッダーファイルに保存されます.サポートファイル
:ヘッダー(Header),カテゴリー(category),カラーテーブル(color table)ファイルなどから構成されます.これらのフォーマットと意味を以下に示します.


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の下の異なったディレクトリーに保存されます.これらのディレクトリーを以下に示します.

arcの情報は通常
digディレクトリにバイナリー形式のファイルとして保存されます.ASCIIフォーマットで表現したものはdig_asciiディレクトリに保存されます.データはヘッダー部分とデータ部分の2つから構成されます.ヘッダー部分には履歴情報,地図の記載と位置等を含んでいます.このヘッダー部分のフォーマットを次に示します:
arcの実際の情報は,2番目のデータ部分にあります.それぞれのarcは形の記載とそれに続く一連のxy座標のペアより表現されます.形の記載部分はarcのタイプ(A:領域境界,L:線)とarcの数の2つで示します(例えば,5点から構成される領域は,A 5).そして,実際のxy座標点が次に続きます.

ベクトルカテゴリー属性ファイル(
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が設定されていれば,マスクの範囲だけに処理は限定されます.REGIONはコマンド
g.regionやd.zoomを用いることによって設定され,設定内容はMAPSET中のWINDファイルに記述されます.このファイルは,単に地理的な領域境界だけでなく,セルの解像度等も指定できます.MASKは,
r.maskコマンドにより設定できます.MASKはラスター型データの特殊なファイルであり,他のラスターファイルを読む時に,不透明なフィルターとなります.MASKが設定されていると,図13に示したように,MASK中でNo-data(データなし,カテゴリー値0)となっているセルは,もとの実際の値にかかわらずデータなし(つまり,ゼロ)に対応づけられます.逆に,MASK中でデータあり(カテゴリー値1)となっているセルは,もとの値通りに対応づけます.このことにより,様々な形で取り扱う領域を限定することが可能となります.
図13.MASKの概念図.
GRASSの利用者レベル
コマンドレベル・プログラミングレベル・Tcl/tkやXGRASSレベルなど
GRASSのデータベース構造
GRASSのデータベースは,UNIXの階層型のディレクトリー構造
GISDBASE/LOCATION/MAPSET
実際のデータ:MAPSETの下の各
Element(サブディレクトリ)ラスター型データ
ラスター形式データは整数の格子セルマトリックス
実際のセルデータ:
cellディレクトリサポートファイル(名前はラスターファイルと同じ,ディレクトリーが異なる)
ヘッダー(cellhd)・カテゴリー(cats)・カラーテーブル(colr)
ベクトル型データ
arcs(アーク)と呼ばれる非交差曲線からなるarc-node表現法
実際の座標データ:
digあるいはdig_asciiディレクトリサポートファイル(名前はベクトルファイルと同じ,ディレクトリーが異なる)
属性ファイル(dig_att)・カテゴリ名(dig_cats)
サイト型データ
点のデータはサイトデータとして扱う(
site_lists)イメージ型データ(グループ)
多バンドの画像などはグループ(group)として取り扱う
領域とマスク
REGIONおよびMASKによる2段階の領域限定
(以上,第3回講義)