サンプル SML スクリプトv65 新機能

累積値データの作成
ベクタポイントを縦棒や根を使って表示する際、載せる属性情報が 1 個であれば、特別なデータ準備は必要ありません。しかし、1 つのベクタポイントに複数の属性を表示するには、複数のレコードがポイントにアタッチされて、かつそれらのレコードの値が「累積的な値」にになっている必要があります。ここで、累積とは 1 つの属性の階級 ( クラス ) の最大値が次の階級の最小値になっているデータを意味しています。ボーリン
グコアのようなデータは、この形です。人口のようなデータは一般的に累積値ではありません。しかし、裏面に示す SML スクリプト ( 裏面参照 )を実行すると、色の積み重ねを使った属性毎のスタイル付けに必要な形式で、レコードをアタッチした新規テーブルを作成することができます ( この機能についてご存じでない場合は“ポイントの積み上げ縦棒表
示 (Vector Points on Stalks)” のカラープレートをご覧ください )。
テーブル名やフィールド名を変えるだけで簡単に、このスクリプトを他のデータセットに適用することができ、表示したいポイントに関連するデータベーステーブルに反映させる
Hyspanic ヒスパニックことができます。
Black 黒人Asian アジア系
White NonHispanic 非ヒスパニック系白人

まず、SML を実行する前に、積み上げ縦棒表示に使うフィールド用の属性図1値を持つテーブルを用意します ( 図 1)。
このテーブルにはクラスフィールドと呼ぶ主キーとなるフィールドが 1 つ必要 で す。 ス
クリプトを実行して新規テーブル
元のテーブル
SMLで生成したテー
スクリプトにより作成したテーブル
ブル中の外部キー を 作 成 し た
全てのポイントに対して、新規テーブルは縦棒や根表示したい各属性値のレコードを含んはこのクラステーブ 後 は、 既 存でいます。必要な属性値は、ここでは非ヒスパニック系の白人 ( 計算フィールド )、アジア系、ル中の主キーを指の ク ラ ス
黒人、ヒスパニックです。元のテーブルは、スタイルに使用する以外にも沢山のフィールし示しています。
ドが入っているかもしれません。
テーブルとリ レ ー ト
既存のクラステーブル
右図は、カラースタック機能をす る 必 要
スタイル割りクラス
使 い 属 性 に よ る 縦 棒・ 根 表 示
当てテーブルテーブルがあります。新規テーブルでクラス情する際に必要な 3 つのテーブル
報を持っているフィールド ( ここではの 関 係 を 示 し て い ま す。 デ ータ ベ ー ス エ デ ィ タ (Database“people”) は、“Class”テーブルの主Editor)〉の中で丸で囲んでいキーフィールドをポイントする必要がます。
あります。この関係付けは、データベー
新規テーブルスの [ テーブル / フォームの作成 (MakeTable/Form)] アイコンから [ リレーションの修正 (Edit Relations)] を選択するか、新規に作成したテーブルの [ 定義の編集 (Edit Definition)] メニューから設定します。また、〈Vector Object Key Attribute Style Assignment〉ウィン
ドウ ( ベクタレイヤコントロール /3 次元 / ラインスタイル : 属性を使用 / 指定 (Vector Layer Controls / 3D panel /Line Style: By Attribute / Specify)) で選択されたキーフィールドは、“Class”テーブル中の主キーフィールドである必要があります。属性を縦棒や根のスタイルを使って表示するには、この関係付けを正しく設定する必要があります。
図2

V65 のリリース後、レコード内の複数フィールドを取り出し、累積表示におけるフィールドの並び順や割り当てカラーの指定を行う、より簡単なスタイル作成方法を開発する予定です。このページで述べた方法は、各属性値に対し単にカラーを割り当てるだけではなく、ポイントの縦棒や根に属性を使ってスタイルを割り当てたいときは依然として必要です。複数アタッチのレコードに対する属性を使ったスタイルの割り当ては、縦棒や根のスタイルとしてラインパターンにも対応しています。

サンプルスクリプトは TNTmips の SML の機能をどのように利用したらよいかを例証するために用意したものです。可能であれば、この場で詳細が読めるように全スクリプトを書き出してあります。スクリプトが 1 ページに書ききれないほど長いときは、重要な箇所が抜粋されています。ここに示したサンプルスクリプトは www.microimages.com/sml/ からダウンロードできます。

累積的形式のデータを持つテーブルの作成 (cumul.sml)
clear(); #clear console
GetInputVector(Vect);class DATABASE database;class DBTABLEINFO tableinfo;
class DBTABLEINFO populationinfo;
numeric numPoints;
numeric index;
numeric record;
numeric numRecords;
numeric value;
numeric population;
Array records[1];TableReadFieldNum(tableinfo,”ASIANPOP”,record);
population += value;index =
TableNewRecord(populationinfo,population,”Asian”);
records[1] = index;TableWriteAttachment(populationinfo,i,records,1);# Write Black population
value =
TableReadFieldNum(tableinfo,”BLKPOP”,record);
population += value;index =
TableNewRecord(populationinfo,population,”Black”);
records[1] = index;
TableWriteAttachment(populationinfo,i,records,1);

database = OpenVectorPointDatabase(Vect);# Create new table
populationinfo =TableCreate(database,”Population”,”Created by SMLscript”);
TableAddFieldInteger(populationinfo,”population”,12);
TableAddFieldString(populationinfo,”people”,16,16);# Open old tabletableinfo = DatabaseGetTableInfo(database,”TABLE”);
numPoints = NumVectorPoints(Vect);for i=1 to numPoints {numRecords =TableReadAttachment(tableinfo,i,records,”point”);
if (numRecords <= 0) continue;
record = records[1];# Write White Non Hispanic population
value =
TableReadFieldNum(tableinfo,”WhiteNonH”,record);
population = value;index =
TableNewRecord(populationinfo,population,”WhiteNonH”);
records[1] = index;
TableWriteAttachment(populationinfo,i,records,1);# Write Asian population
value =

# Write Hispanic population
value =
TableReadFieldNum(tableinfo,”HISPPOP”,record);
population += value;index =
TableNewRecord(populationinfo,population,”Hispanic”);
records[1] = index;
TableWriteAttachment(populationinfo,i,records,1);}
printf(“Script Ran to Completion”);