csv-plot.xl(CSVプロットデータのマトリックスへの変換)
著者: 森 洋久 / joshua@globalbase.org ※
プロトタイプ
xl csv-plot.xl [CSV-FILE] [CORRESPOND] [MATRIX] [X-DOTS] [Y-DOTS]
引数
[CSV-FILE] プロットデータのCSVフィアル
[CORRESPOND] 対応変換ファイル
[MATRIX] 保存先マトリックスファイル
[X-DOTS] X方向ドット数。
[Y-DOTS] Y方向ドット数。
オプション
環境
エージェント exl [UNDEF REF (exl)]
説明
LANDSCAPEをインストールされている場合、/usr/local/xl-gbs/xlsamples/gbs/plot1 にサンプルデータがあるのでこれを参考に以下を読んでいただきたい。
このスクリプトは、CSVファイル [CSV-FILE] に列挙されたプロットデータを [MATRIX] で与えられたマトリックスフォーマットのファイルへ変換する。マトリックスとなったプロットデータは、全体を見ていて、多量のプロットが画面に表示しきれない場合は、次のような動作となる。
-
アイコンを小さくする。
-
アイコンを小さくしても表示しきれない場合は、単なる色のついた点にする。
-
画面の1ピクセルにいくつものプロットが入るような場合は、点をマージして領域表示にする。
このような操作により、表示可能プロット数はほぼ無制限となる。
マトリックスは基本的には整数座標系であるのに対して、プロットはたとえば緯度経度に対するプロットなど、連続(実数)座標系のプロットである場合が多い。そのため、マトリックスでは解像度を指定し、プロットの座標を整数に変換する。言ってみれば、実数座標系を非常に細かいグリッドに分割し、プロットの位置をそのグリッドの整数座標で表す。 [X-DOTS][Y-DOTS] はその整数グリッドの大きさを表す。
マトリックス内部の1プロットに与えられた属性は0から始まる番号で識別される。座標XX,YYのプロットのN番の属性といった具合である。各属性にはデータ型が存在する。このデータ型は、マトリックスの画像(グリッド)解像度を下げていく過程で、プロット同士のマージが生じた場合にどのようにマージするかを指定するものでもある。このような観点から以下のデータ型が定義されている。まず基本データ型である。
-
mxPgTYPE_NONE
NONE型。値を持たない型。
-
mxPgTYPE_STRING
字列型
-
mxPgTYPE_INT
実数型。
-
mxPgTYPE_RGBA
透明チャンネルを持った8bitフルカラー。
さらに、各基本データ型に詳細データ型が存在する。
-
mxPgNONE
NONE型。
-
mxPgSTRING
文字列型。マトリックス上位レベルノードの文字列を無視し、かつ新しい文字列を割り当てる。
-
mxPgSTRING_INHERIT
文字列型。マトリックス上位レベルノードの文字列を継承する。(ユーザは使っては行けない。)
-
mxPgSTRING_ERASE
文字列型。マトリックス上位レベルノードの文字を無視かつからのもじれるにする。(ユーザは使っては行けない。)
-
mxPgINT_ADD
整数型。下位レベルノードのマージ対象のプロットの値の合計値をもって上位レベルノードの値とする。
-
mxPgINT_AVG
整数型。下位レベルノードのマージ対象のプロットの値の平均値をもって上位レベルノードの値とする。
-
mxPgINT_MAX
整数型。下位レベルノードのマージ対象のプロットの値の最大値をもって上位レベルノードの値とする。
-
mxPgINT_MIN
整数型。下位レベルノードのマージ対象のプロットの値の最小値をもって上位レベルノードの値とする。
-
mxPgRGBA
RGBA型。各色チャンネルの平均値を持って上位レベルノードの値とする。
CSVファイル [CSV-FILE] は単なる属性の列挙なので、どれが座標なのかわからない。また同様にCSVファイルの属性は型をもっていない。そこで、
-
CSVファイルのどの列を座標値の列とみなすか。
-
CSVファイルの残りの列をマトリックスファイルの何番の属性に割り当てるか。
-
割り当てるときに、型をなににするか。
を指定しなければならない。この指定を行うのが、 [CORRESPOND] で指定されるファイルである。[CORRESPOND]は、XLスクリプトファイルであるが、実際に使う命令は少ない。 /usr/local/xl-gbs/xlsamples/plot1/gaz.xl がこれにあたる。これを開くと、使われている命令は、?xl,Define,gmxPgPlotField のみである。
Defineで定義されている変数
<Define> ^reso 3600 </Define>
は、解像度を変数resoに定義しており、これは、3600dot/degree という意味である。例に挙げられている、gaz.csvでは、列A,Bにdegree=度で座標が指定されており、マトリックスファイルでは、1秒を1ドットとして定義しているためである。 ファイルの最後にある、
<Define> ^StartLine 1 </Define>
はCSVの最初の無視する行数を示している。例では最初の1行を無視する。
gmxPgPlotField
次につづく、gmxPgPlotFieldによってcsvの各列と、マトリックスファイルの座標、および属性番号の対応を実現している。gmxPgPlotFieldはエージェントgbmxの関数になっており詳しい機能 XL関数(環境)(gmxPgPlotField)を参照されたい。csv-plot.xlスクリプトでは以下2種類のように使われる。
(A)
<gmxPgPlotField id="^mtx" csv="A" merge-type="^mxPgTYPE_INT" dim="0">
^Fields ^mxPgFDIT_DD ^reso (* 180 reso) 0</gmxPgPlotField>
(B)
(B-1)
<gmxPgPlotField id="^mtx" csv="C" merge-type="^mxPgTYPE_STRING" label="5">
^Fields utf-8 ([quote type="direct"] '([field name="LABEL"] ($ ___convert)))</gmxPgPlotField>
(B-2)
<gmxPgPlotField id="^mtx" merge-type="^mxPgTYPE_RGBA" label="0">
^Fields 0 0xff000000</gmxPgPlotField>
(B-3)
<gmxPgPlotField id="^mtx" csv="D" merge-type="^mxPgTYPE_STRING" label="1">
^Fields utf-8 () test-http </gmxPgPlotField>
(A) は座標を指定する方法であり、 (B) は属性の対応を指定する方法である。XML属性は以下のとおりである。
-
id=" ^ mtx"
マトリックスのIDを指定するものであり、csv-plot.xlの場合はこの文字列に固定。
-
csv
csvの属性に対応する列の番号、A,B,C,....を指定する。このXML属性を省略することができる。
-
label
(B) のパターンで利用され、label XML属性はマトリックスの属性番号を指定する。csv XML属性にある列を、このlabel XML属性で指定されるプロット属性番号に対応される。csv XML属性が省略されているとgmxPgPlotFieldの要素データで与えられるデータ値が共通にすべてのプロットのlabel属性番号に保存される。
label XML属性は省略可能であるが、dim XML属性とどちらかは存在している必要がある。
-
dim
(A) のパターンで利用され、マトリックスの座標軸番号を指定する。マトリックスの本来の機能としては、マトリックスの次元-1までの値が指定できるが、plot-csv.xlは2次元マトリックスのみサポートしているので、0,1のいずれかが指定可能である。X軸は0であり、Y軸は1である。
dim XML属性は省略可能であるが、label XML属性とどちらかは存在している必要がある。
-
merge-type マトリックスの詳細属性型を与える。
最後にgmxPgPlotFieldの要素データの与え方はmerge-type XML属性で与えたデータ型によって異なる。
-
mxPgNONE
なし。
-
mxPgSTRING
[作業領域へのポインタ] [保存文字コード名] [変換式] [初期化文字列:任意]
[変換式] が () の場合、特にCSVのデータを加工せずそのまま属性値とする。 [変換式] がXL式で与えられる変換式として与えられていた場合、これによりCSVの値を変換した者を属性値とする。上記 (B-1) の例がそれに相当する。___convertの部分に、CSVからの値が格納される。実際の変換は、CSVのテーブルを初めて引いたときに行われるので、この時点では、シンボル$は解釈されてはならないので、ダイレクトquateを施す必要がある。
csv属性が指定されていない場合、 [初期化文字列:任意] が必要となり、この文字列が [変換式] に与えられ、一定値としてすべてのプロットの属性にセットされる。
-
mxPgINT_ADD mxPgINT_MAX mxPgINT_MIN
[作業領域へのポインタ] [CSV中のデータ型] [変換解像度] [変換オフセット] [カウント] [初期化数値:任意]
CSV内のデータは、まず、 [CSV中のデータ型] に示されるデータ型として認識され、それを倍精度浮動小数点として読み込む。 [CSV中のデータ型] の詳細は追って記述する。 読み込まれたデータは、 ( [読み込まれたデータ]x[変換解像度]+[変換オフセット])という式で変換され、変換値は端数切り捨てにより整数値となり、マトリックスの属性データあるいは、座標値となる。 [変換解像度] , [変換オフセット] は倍精度浮動小数点として与える。
[カウント] はこの三つのデータ型では無視される。0をおいておけばよい。
csv属性が指定されていない場合、 [初期化数値:任意] が必要となり、この数値が、上記変換に供され、一定値としてすべてのプロットの属性にセットされる。
-
mxPgINT_AVG
[作業領域へのポインタ] [CSV中のデータ型] [変換解像度] [変換オフセット] [カウント] [初期化数値:任意]
属性データの計算方法は、 mxPgINT_ADD mxPgINT_MAX mxPgINT_MIN と同じである。このデータとともに、 [カウント] も属性データとして保存される。二つの整数値のペアとなる。この型の場合、マトリックスの上位レベルへプロットをマージする場合、各プロットの平均をとり新しいプロットの属性値とする。その平均はこの [カウント] 重み付けで計算され、さらに、上位レベルにおける [カウント] は下位レベルの [カウント] の合計値となる。
csv属性が指定されていない場合、 [初期化数値:任意] が必要となり、この数値が、上記変換に供され、一定値としてすべてのプロットの属性にセットされる。
-
mxPgRGBA
[作業領域へのポインタ] [カウント] [初期化RGBA:任意]
RGBAをCSVから取得し、プロットの属性へ割り当てる。16進数で与える場合は、0xff000000 のようにC言語と同じ書式となっているひつようがある。 [カウント] は、整数型の[カウント]と同様の働きをし、上位レベルの色を計算するときに、重み付けに使われる。0を指定すると、重み付けを行わない。
csv属性が指定されていない場合、 [初期化RGBA:任意] が必要となり、この数値が一定値としてすべてのプロットの属性にセットされる。
整数型における[CSV中のデータ型] これに指定する値としては以下のものがある。
-
mxPgFDIT_INT
CSVのデータ型は整数型である。(64bit整数)
-
mxPgFDIT_FLOAT
CSVのデータ型は倍精度浮動小数点である。
-
mxPgFDIT_DD
CSVのデータ型は緯度経度の十進小数点表記である。たとえば、135.50は135度30分となる。
-
mxPgFDIT_DDMMSS
CSVのデータ型は緯度経度の60進表記である。たとえば、135.5012は、135度50分12秒である。
/usr/local/xl-gbs/xlsamples/gbs/plot1の使い方
プロットデータを公開したい場合、
-
/usr/local/xl-gbs/xlsamples/gbs/plot1を公開ポイントへコピーする。たとえばそのディレクトリを、myplotとすると、
-
myplotの中身img.crdの書誌データを編集する。
-
公開したいプロットデータのCSVファイルを用意し、それを、myplot内にたとえば、myplot.csvというファイルとして保存する。
-
gaz.xlファイルをmyplot.csv用に編集し、属性の対応をはかる。
-
xl csv-plot.xl - - / myplot.csv gaz.xl img.mtx [X-DOTS] [Y-DOTS]
を実行する。
-
xl makefile.xl - -
を実行する。
という流れで公開可能である。
▲ページトップへ戻る
戻り値
エラー
参考
/usr/local/xl-gbs/xlsamples/gbs/plot1
バグ
▲ページトップへ戻る
|