<<90164W>>

P.1

TNT入門

SMLスクリプト

空間操作言語

TNTmips(R)
TNTedit(TM)
TNTview(R)

P.2

はじめに

本書では、TNTmips(R)やTNTview(R)でSMLスクリプトを作成する方法を紹介します。本書の練習問題では、TNTプロジェクト・ファイルに含まれる空間データ・オブジェクトに対してユーザ独自の操作を行うための強力なスクリプトの概念とその記述方法を紹介します。

必須基礎知識 本書では、読者が『TNT入門:地理空間データ表示』、『TNT入門:システムの基本操作』の練習問題を完了しているものと仮定しています。必須知識や必要な基本操作についてはこれらのパンフレットやTNTリファレンス・マニュアルで調べてください。また本書では、読者が少くともC、BASIC、Pascalなど1つまたは複数のプログラミング言語に関する基礎知識を持っているものと仮定しています。プログラミングに関する基礎知識がなくてもSMLの使用を開始することはできますが、SMLは強力な言語ですので、優れたプログラマが使用するとその長所を最大限に活用できます。

サンプル・データ 本書の練習問題では、TNT製品に添付されているサンプル・データを使用します。TNT製品のCDにアクセスできない場合は、マイクロイメージズ社のウェブ・サイトからデータをダウンロードできます。特に、本書ではLITEDATA / SMLデータ・コレクション、TNTの基本ディレクトリの中のCUSTOMサブディレクトリのスクリプト、CB_DATA、SF_DATA、EDITRASTデータ・コレクションの中のオブジェクトを使用します。サンプル・ファイルは、各自のハードディスク・ドライブにインストールしてください。CD-ROMのサンプル・データを直接操作すると問題が発生する可能性があります。

その他の資料 本書では、空間操作言語に関する概要しか示されておりません。詳細はTNTリファレンス・マニュアル、および特にオンラインのSMLリファレンスを参照してください。

TNTmipsとTNTlite(TM) TNTmipsには2つのバージョンがあります。プロフェッショナル・バージョンと、無料バージョンであるTNTliteです。本書では、どちらのバージョンも「TNTmips」と呼ぶことにします。プロフェッショナル・バージョンにはハードウェア・キーが必要です。このキーがない場合、TNTmipsはTNTliteモードで動作し、プロジェクト・データのサイズが制約されるほか、TNTliteの別のコピーとの間でしかデータを共有できません。

SMLはTNTatlasでは使用できません。TNTliteでは、添付されたサンプルの地理データを使用してすべての練習問題を完全に実行することができます。

Keith Ghormley、1999年3月1日

本書の一部のイラストでは、カラー・コピーでないと重要な点がわかりにくい場合があります。マイクロイメージズ社のウェブ・サイトから本書を入手されれば、カラーで印刷したり表示できます。また、このウェブ・サイトからは、『TNT入門』のその他のテーマに関する最新のパンフレットも入手できます。インストール・ガイド、サンプル・データ、および最新バージョンのTNTliteをダウンロードできます。アクセス先は次の通りです。

http://www.microimages.com

P.3(上、左)

TNT製品におけるSML

Spatial Manipulation Language(SML:空間操作言語)は、TNTプロジェクト・ファイル内の地理空間データ・オブジェクトを操作するスクリプトを記述できるプログラミング言語です。SMLスクリプトは、カスタム・メニューやアイコンバーからでも、コンピュータのデスクトップのアイコンからでも、オペレーティングシステムのコマンドからでも実行できます。

SMLは、カスタマイズやデザイン用のツールです。SMLがあると、TNTの標準メニューの中にあらかじめ定義された処理以外の処理に、TNT製品を使用できます。単純な処理スクリプトも作成できますが、目的とする個々の市場向けの完全な専用製品も作成できます。プロジェクト・ファイル内の選択された地理データ・オブジェクトとスクリプトを一緒にしたパッケージを完成品のAPPLIDAT(データ付きのアプリケーション)として配布することもできます。

マイクロイメージズ社は、ユーザが作成する際の原型にできるようなサンプルのSMLスクリプトのスコアを用意しました。単純な処理ルーチンから数百行のコードを含む複雑なAPPLIDATまで、さまざまなスクリプトを調べて修正することができます。ユーザ自身のSMLスクリプトならば、プロジェクトを進めながら容易に修正したり改良して行くことができます。短時間で試作してプログラム機能をテストすることができます。

#図#
APPLIDATにおけるSML
SMLスクリプトはプラットフォームから完全に独立しており、TNT製品が動作するコンピュータならどれでも、一切の修正を行わずに使用できます。

SML構造はすべてのTNT製品で表示されます。SMLフォームは、次のものの中で使用できます。
・問い合わせ
・地理フォーミュラ
・cartoscript
・APPLIDAT
『TNT入門』シリーズのパンフレット『問い合わせの作成と使用』、『地理空間フォーミュラの使用方法』を参照してください。

P.3(右)

ステップ

## TNT製品CDのインストール・メニューからInstall Sample SML Scripts(サンプルのSMLスクリプトをインストール)を選択します。

 後の練習問題で、tnt製品ディレクトリの/CUSTOMサブディレクトリの中にあるこれらのスクリプトにアクセスします。

4〜7ページの練習問題では、SMLの基本概念と記述上の規則を紹介します。8〜10ページでは、一般的な関数のほか、ループ、分岐、ユーザ入力などのプログラム手法についても説明します。本書の残りの部分では、SMLの作成技法、APPLIDAT、暗号化、配布に関する事柄を説明します。

#図#
TNTeditにおけるSML
TNTviewにおけるSML
TNTmipsにおけるSML

P.4(上、左)

Viewshed.SMLを実行する

ステップ

## Process / SML / Edit Script(処理 / SML / スクリプトを編集)を選択します。
## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択し、LITEDATA / SML / VIEWSHED.SMLを選択します。
## 最初のSMLが出てくるまでスクリプトをスクロールします。
## ウィンドウ下部の[Run...(実行...)]をクリックします。
## 入力ラスタ"RIN"を聞いてきたらCB_TM / ELEVATIONを選択します。
## 入力ベクタ"v"を聞いてきたらLITEDATA / SML / VIEWSHED / VROADを選択します。
## 出力ラスタ"ROUT"を聞いてきたら新しいプロジェクト・ファイルを選択します。
## 表示処理を使用して次の3つのレイヤーを表示します。CB_TM / ELEVATION、自分の新しい出力ラスタ、VIEWSHED / VROADS。

P.4(右)

TNT製品CD-ROMには、VIEWSHED.SMLスクリプトと、対応するサンプル・データが入ったVIEWSHED.RVCが含まれています。これらはマイクロイメージズ社のウェブ・サイトからも入手できます。このスクリプトは、入力された線要素に沿う点の流れから、入力された標高地形の中のどの部分が見えるかを示す出力バイナリ・ラスタ・オブジェクトを生成します。このスクリプトに示す手法は、見通し線地形の特性を扱う多くのアプリケーションで使用できます。

左に示したステップに従って、SMLを起動し、VIEWSHED.SMLスクリプトをロードします。スクリプトを実行する前に、表示をスクロールして内容を調べてください。CやBASICなどのプログラミング言語に慣れている方ならば、命令の形式やプログラミング構造がわかるはずです。

スクリプトに関する作業で最も難しいのはRasterToBinaryViewshed()などのSML関数のコールです。マイクロイメージズ社は、新しい関数をSMLに絶えず追加しています。ほとんどのSMLを作成する上では、使用できる関数やその基本機能を理解していることが必要です。組み込み済みのSML関数のほかに、TNTsdkを使用してCでユーザ独自のSML拡張関数を記述したり、SMLスクリプト内から外部プログラムをコールすることもできます(17ページを参照)。

VIEWSHED.SMLは、入力されたベクタ線要素(青で表示)に沿う点の流れから、入力された標高地形(擬似カラーで表示)の中のどの部分が見えるかを示すバイナリ・ラスタ(黄色の1で表示)を生成します。したがって、この線要素が道路である場合、黄色い部分はその道路上を移動する人から見える部分を示します。

P.5(上、左)

スクリプトの基礎

SMLスクリプトには、ステートメントが1つだけのものから、ネストされた論理的分岐構造や外部プログラム・コールを含む長い構造化プログラムまで、さまざまなものがあります。いくつかの形式的な構造上の制約があります。

空白は、ほとんどどこにでも使用できます。SMLでは、行の字下げに使用されたタブやスペース、残された空白行が無視されるほか、ステートメントの途中に空白を入れて次の行に進んでも構いません。したがって、VIEWSHED.SMLの関数コールはパラメータ・リストの途中で区切れ、次の行に続いています。

##

同様に、ステートメントを複数の行に渡って続けることもできます。File(ファイル)メニューからNew(新規)を選択してSMLウインドウをクリアし、図に示す短いスクリプトを入力してください。最初のClear()ステートメントはConsole Window(コンソール・ウィンドウ)の内容を消去します。var1 = 3というステートメントは、変数var1に値3を代入します。最初のprint()ステートメントは、Console Window(コンソール・ウィンドウ)に値var1を出力します。

次の3つの行に含まれているのは1つの代入ステートメントvar1=5であることに注意してください。同様に最後のprint()ステートメントも4つの行に渡っています。[Run...(実行...)]をクリックしスクリプトを実行します。

もちろん、このおかしな書き方は、SMLで柔軟性の高いフォーマットがサポートされることを説明するために示したものです。自分でスクリプトを記述する際には、プログラムが読みやすく、論理構造が反映されるように、字下げやスペース、空白行を使用します。間違ったシンタックスやフォーマットを使用してしまった場合、SMLは、ユーザが[Run...(実行...)]をクリックしてもスクリプトを実行せず、エラーメッセージを表示し、スクリプト内のエラーのあった部分にカーソルを表示します。

P.5(右)

ステップ

## File(ファイル)メニューからNew(新規)を選択してSMLウィンドウをクリアします。
## タブやスペースを使用して字下げしながら、下図のスクリプトを入力します。
## Syntax / Check(シンタックス / チェック)を選択してシンタックスをチェックします。
## [Run(実行)]をクリックしてスクリプトを実行します。

SMLウインドウは単純なテキスト・エディタであり、関数リストにアクセスしたりシンタックスをチェックすることができます。

#図#
このおかしなフォーマットは、SMLの柔軟性を示すためのものです。

Console Window(コンソール・ウインドウ)にはprint()の結果や、その他のテキスト入出力操作が表示されます。

P.6(上、左)

定数と変数

ステップ

## File / New(ファイル / 新規)を選択してSMLウィンドウをクリアします。
## スクリプトの最初の2行を次のように入力します。
 clear()
 print()
 カーソルは、print()ステートメントのカッコの間に置いておきます。
## Insert / Symbol(挿入 / 記号)を選択し、リストからpiを選択して[Insert(挿入)]、[Close(閉じる)]をクリックします。
## スクリプトの残りの部分を入力して[Run(実行)]をクリックします。

P.6(右)

SMLには、あらかじめ定義された多くの定数があり、これらの値をスクリプトで変更することはできません。定数名は、スクリプトに直接入力することもできますし、Insert Symbol(記号を挿入)ウインドウから挿入することもできます。このウィンドウにはあらかじめ定義されたすべての定数がリストされ、現在選択されている定数の設定値が表示されます。

Insert Symbol(記号を挿入)ウインドウを開くには、SMLウインドウのInsert(挿入)メニューからSymbol(記号)を選択します。Type(タイプ)オプション・ボタンからConstant(定数)を選択します。Insert(挿入)をクリックして現在選択されている定数をスクリプト内のカーソル位置に挿入し、Close(閉じる)をクリックします。

変数は、文字列、数値、論理値、配列、クラス、オブジェクトなどのエンティティに使用できます。変数は、スクリプトが最初にその変数を参照するときに作成されます。配列とクラス以外は、あらかじめ宣言する必要はありません。名前は、最大長さが100文字であり、以下の規則に従います。

文字列:小文字で始まり'$'文字で終わらなければなりません。このページのサンプル・スクリプトではarealabel$が文字列変数です。

数値:小文字で始まり、最後の文字には'$'を使用できません。このページのサンプル・スクリプトではrとareaが数値変数です。

オブジェクト:大文字で始まります。
 例:GetInputRaster(R)

論理値:0=偽、ゼロ以外の値=真であるような数値として実装されます。
 ##

配列名とクラス名も文字列や数値の規則に従います。配列やクラスは使用前に宣言しておかなければなりません。配列の添え字は鍵カッコで囲みます。
 ##

P.7(上、左)

式とステートメント

式は、何らかの値が得られる構造体です。したがって、pi^2、5.10、R[i,j]/100はいずれも式です。式は、代入ステートメントの右辺や関数コールのパラメータとして使用できます。

ステートメントには、単純ステートメントと複合ステートメントがあります。次の例のように代入からなるものは、単純ステートメントです。

 ##

複合ステートメントは、次のようにキーワード"begin"と"end"で挟まれています。

 ##

また、SMLでは、"begin"や"end"の語を使用する代わりにカッコ(波カッコ)を使用することもできます。

 ##

条件付きステートメントは次のようになります。

 ##

else節は"then"と同様オプションです。

 ##

(オプションではありますが)ステートメントの最後のマークとして区切り文字(セミコロン、";")を使用する習慣をつけると良いでしょう。区切り文字を使用すると、複数のステートメントを区切って1行に記述することもできます。

コメント文字("#")は、行の残りの部分を無視するようにSMLに指示します。行の始めにコメント文字がある場合、SMLはその行全体を無視します。また、他のSMLトークンと同じ行にコメントを入れることもできますが、その場合は必ずコメントより前にトークンを記述します。

P.7(右)

SMLでは、比較演算、算術演算、代入演算、論理演算には通常の表記法を使用します。CやBASICのほとんどの演算子はSMLで使用するものと同じです。Insert / Operator(挿入 / 演算子)のリストを参照してください。

ステップ

## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択し、LITEDATA / SML / PAGE7.SMLを選択します。
## スクリプトを実行します。
## if条件を変更してもう一度スクリプトを実行します。

セミコロンは1つの行に含まれる複数のステートメントを区切ります。コメント文字(#)は、行の残りの部分を無視するようにSMLに指示します。

P.8(上、左)

組み込み関数

ステップ

## File / New(ファイル / 新規)を使用してSMLウィンドウをクリアします。
## メニューからInsert / Function(挿入 / 関数)を選択します。
## Function Group(関数グループ)ボタンをクリックし、各カテゴリの関数ライブラリを閲覧します。

P.8(右)

SMLの本当の威力は、プロジェクト・ファイル内の地理空間オブジェクトやサブオブジェクトの作成、読み込み、記述を行える豊富な関数ライブラリにあります。標準的な数学演算、表示、インタフェース、データ操作を行うための関数も用意されています。マイクロイメージズ社では、ユーザがより多様な方法で地理空間データを操作できるよう、絶えずSML関数の改良と拡張を行っています。


Insert / Function(挿入 / 関数)を選択してInsert Function(関数を挿入)ウィンドウを開くと、関数を選択したり、使用されるフォーマット仕様を確認することができます。各カテゴリで使用できる関数をチェックするにはFunction Group(関数グループ)ボタンをクリックします。関数リストをスクロールすると、下部のペーン内の定義が変わり、現在の関数の使用方法が表示されます。関数をSMLスクリプト・ウインドウにコピーするにはInsert(挿入)ボタンをクリックします。

#図#
Function Group(関数グループ)ボタンは関数カテゴリのスクロール・リストを開きます。

Insert Function(関数を挿入)ウィンドウの上部ペーンには関数のスクロール・リストが、下部ペーンには関数定義が表示されます。[Insert(挿入)]をクリックすると、SMLは、ハイライト表示になっている関数をSMLウインドウ内のカーソルのある位置に挿入します。

P.9(上、左)

関数についてのオンライン・ヘルプ

プログラムには、SML関数をサポートするためのマニュアルが組み込まれています。まず、Insert Function(関数を挿入)ウインドウの下部ペーンには、各パラメータとそのデータ・タイプを示す簡単な定義が表示されます。Insert(挿入)ボタンをクリックするとその関数全体をSMLウインドウにコピーすることができます。

詳細を確認するには、Insert Function(関数を挿入)ウインドウのDetails(詳細)ボタンをクリックします。SMLはDetails On:(詳細:)ウィンドウを開いて詳細説明を表示します。コードの動作部では長いスクリプトにおけるその関数の動作に関する説明も表示されます。Insert Sample(サンプルを挿入)ボタンをクリックするとそのサンプル全体をSMLウインドウにコピーすることができます。

SML関数は時々改良されていますので、Insert Function(関数を挿入)ウインドウには、現在の関数が最後に変更された日付が表示されます。自分で今まで使用してきた関数に新しいオプション機能の追加修正が行われていないか確認してください。

緑色のCreate date(作成日付)は、その関数がSMLに組み込まれた日付を示します。赤いModify date(修正日付)は、関数が最後に更新された日付を示します。場合によっては、機能を拡張するためにオプション・パラメータが関数に追加されていることもあります。

Insert Sample(サンプルを挿入)をクリックすると、サンプル・コードの全部分がSMLウインドウにコピーされます。

P.9(右)

ステップ

## Function Group(関数グループ)テキスト・ボックス内のAll(すべて)を選択します。
## GPSPortRead()関数のところまでスクロールします。
## Details(詳細)ボタンをクリックします。
## [Insert Sample(サンプルを挿入)]をクリックします。
## SMLのスクリプト・ウィンドウに新しく挿入されたスクリプト行をチェックします。

#図#
Details(詳細)ボタンをクリックすると、関数のパラメータについての詳細説明や使用法の例が表示されます。

P.10(上、左)

クラスを使用する

ステップ

## SMLウィンドウのメニューからInsert / Class(挿入 / クラス)を選択します。
## Insert Class(クラスを挿入)ウィンドウの上部ペーンのリストをスクロールし、下に表示されるクラス定義をチェックします。

#図#
Insert Class(クラスを挿入)ウィンドウでクラスをスクロールし、下部ペーンに表示される各クラスの定義をチェックします。

クラス名と変数では大文字と小文字が区別されます。

P.10(右)

クラスは、データベース・レコードが複数のフィールドから構成されるのと同様に複数のメンバから構成される、複合変数です。クラス変数には任意の数のメンバを含むことができ、他のクラスも含め任意のデータ・タイプをメンバにすることができます。

クラス変数は、複合関数に対して情報を受け渡せるように考えられたものです。多くの場合、クラス変数のメンバは関数コールによってのみセットされ、スクリプトからは読み込みしか行えません。代入ステートメントによってクラス変数に新しい値を設定することはできません。

クラスは、classというキーワードを使用して次のように宣言する必要があります。

 ##

この場合は、backgroundがCOLORタイプのクラス変数であることを宣言しています。クラスのメンバは、name.memberという形式で指定されます(データベースの値がtable.fieldという形式で指定されるのと同じです)。たとえばCOLORというクラスには5個のメンバがあり、次の形式のステートメントで変更できます。

 ##

nameメンバはRGB.txtから変数に値を渡すために使用されますが、nameメンバは書き込み専用であるため、値を保存して後で読み込むことはできません。したがって

 ##

とすると、RGB.TXTの"purple"の定義に従ってbackgroundのRGB要素がセットされます。

P.11(上、左)

メンバの継承とタイプのチェック

クラスで重要なのは、継承という概念です。XmPushButtonはXmLabelから誘導され、XmLabelはWidgetから誘導されている、という言い方をします。この場合、XniPushButtonはXmLabelsとWidgetsのすべての特性を継承することを意味します。その結果、継承されたクラスのメンバは、明確にクラス定義にリストされていなくても使用することができます。したがって、たとえばXmPushButton自身には大文字と小文字が区別されるメンバはありませんが、XmPushButtonはWidgetであり、すべてのWidgetには大文字と小文字が区別されるメンバがあるため、XmPushButtonもこれを継承します。

クラスを使用することで、強力なタイプ・チェックが可能になります。したがって、パラメータとしてWidgetが必要な関数を呼び出す場合、任意のWidget(またはWidgetから誘導されたもの)を渡すことができます。ただし、この関数はWidgetでない変数はすべて受け付けません。たとえば、COLORはWidgetでないため、誤ってCOLORをそのような関数に渡す恐れがありません。これと逆に、XmPushButtonはWidgetから誘導されたものであるため、XmPushButtonやWidgetから誘導されたすべてのものを、Widgetを必要とする関数に渡すことができます。

#図#
XmLabelとXmPushButtonの定義は、継承が共有されることを示しています。

Widget→XmPrimitive→XmLabel→XmPushButtonという継承の行をたどってください。

P.11(右)

ステップ

## SMLメニューからInsert / Class(挿入 / クラス)を選択します。
## Insert Class(クラスを挿入)ウィンドウの上部パネルからXmPushButtonを選択します。
## 下部パネルに表示されるクラス誘導の行をたどってください。

Widgetメンバは、ウインドウ内でのWidgetsの位置決めに使用されます。すべてのWidgetにはTopWidget、BottomWidget、LeftWidget、RightWidgetがあります。ボタンの継承されたTopWidgetを他の何らかのWidget(XmPushButtonやXmFormなど)に設定することにより、ボタンの相対位置を設定することができます。

P.12(上、左)

表示関数

ステップ

## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択し、LITEDATA / SML / PAGE12.SMLを開きます。
## スクリプトを実行します。
## File / Object selection(ファイル / オブジェクトの選択)処理が指示してきたら、プロジェクト・データから任意のラスタ・オブジェクトを選択します。
## ビュー・ウィンドウのアイコン・ツールを使用して表示を操作します。
## ビューに対する操作が終わったら[Close(閉じる)]をクリックします。
## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を使用してLITEDATA / SML / BOXCAR.SMLを選択します。
## 表示の形態と使用方法、ボタンの機能をチェックします。

P.12(右)

表示関数を使用すると、スクリプトで1つまたは複数のビュー・ウィンドウを開くことができます。スクリプトは、自動的にウインドウを開いたり、オブジェクトの追加、再描画、拡大などを行えます。また、ビュー・ウィンドウのステータス行にメッセージを表示したり、ユーザ独自のプッシュボタンを表示して対話型のユーザ入力用選択肢を提供することもできます。

DispOpen()関数はビュー・ウィンドウを開いて番号を返しますので、スクリプトでそのビューを変数に割り当てることができます。スクリプトPAGE12.SMLで確認してください。

##

サンプル・スクリプトBOXCAR.SMLでは、ユーザ入力とプログラム制御に表示関数とボタン関数を使用しています。File / Open(ファイル / 開く)を使用して、TNT製品のCD-ROMに入っているこのスクリプトやその他のスクリプトをチェックしてください。

#図#
標準のビュー・ウィンドウ・アイコンを追加するには、DispAddStandardTools()を使用します。

Disp--()とDisp--Button--()関数を使用すると、SMLスクリプトでビュー・ウインドウの外観と使用方法をカスタマイズすることができます。

P.13(上、左)

ループと分岐

暗黙のループ。SMLは、代入ステートメントの左辺にラスタ・オブジェクトを見つけると暗黙のループを実行し、ステートメントの右辺を評価して結果を左辺のラスタ・オブジェクトの各セルに代入します。

 ##

While。"while"ループには注意が必要です。

 ##

ループ条件のテスト結果が真である間、ループは続けられます。条件が絶対に偽にならない場合は無限ループになります。

 ##

ForとFor Each。Forステートメントは次のようになります。

 ##

ラスタ(R)表記の中のlinはラスタに含まれる行数、colは列数、rはラスタの中心からのピクセル単位の距離、thetaは水平方向からの(反時計方向の)ラジアン単位の角度です。

ベクタ(V)表記の中のelement_typeは、"point"(点)、"line"(線)、"poly"(ポリゴン)、"node"(ノード)のいずれかにすることができます。nはオプションで、省略することもできます。変数nを指定した場合はループ・カウンタとして使用されます。

あらゆるコンピュータ・システムと同様、浮動小数点値では演算によっては非常に小さい誤差が生じる(1/5は0.2000000000000001となります)ことに注意してください。

P.13(右)

備考:for-eachステートメントは、'foreach'という1つの語として記述することもできます。このバージョンのSMLではfor-eachコマンドのネスティングはサポートされません。

ステップ

## File / Open(ファイル / 開く)を選択し、LITEDATA / SML / PAGE13.SMLを選択します。
## スクリプトを実行します。
## while条件を変更してもう一度スクリプトを実行します。
## ループのステップ値を変更してもう一度スクリプトを実行します。

breakステートメントは、ループが他の理由で終了する前に、ループを終了させるために使用されます。breakステートメントは、ループ内の条件テストで多く使用されます。この例のbreakステートメントは0による除算を防止しています。

P.14(上、左)

ユーザ入力

ステップ

## File / New(ファイル / 新規)を使用してSMLウィンドウをクリアします。
## コンソール・ウィンドウのプロンプトを入力し、図のようなステートメントを入力してスクリプトを[Run(実行)]します。
## 図のようなPopup--()関数ステートメントを入力してスクリプトを[Run(実行)]します。

#図#

関数コールの中でデフォルト値を使用すると、ポップアップ・ダイアログ・ボックスにデフォルト値が表示されます。

P.14(右)

最も単純な入出力ではコンソール・ウインドウを使用します。print()でプロンプト文字列を出力しinput$()でユーザの応答を入力することができます。コンソール入力コードはスクリプトの作成者にとっては簡単ですが、ユーザが不注意によりコンソール・プロンプトを見落としてしまう可能性があります。

 ##

あらかじめ定義されたオプションを表示するにはDisp--Button--()関数が役に立ちます。たとえばNew Values(新しい値)、Save Results(結果を保存)、またはQuit(終了)など正確に3つの方法をユーザに提示する場合、Disp--Button--()関数が非常に役立ちます。コンピュータに関する経験があまりないほとんどのユーザは、習慣として、次に行いたい処理を行うボタンを捜します。

Popup--()関数は最も柔軟性が高いと同時に、ユーザを混乱させる可能性も最小限で済みます。メッセージ、プロンプト、ユーザ入力の際にはポップアップ・ダイアログ・ボックスが開きます。

P.15(上、左)

ラスタ・オブジェクト

ラスタ関数のフル・セットがあれば、SMLスクリプトでラスタ・オブジェクトの読み込み、書き込み、作成、解析を行えます。スクリプトでCreateRaster()、CreateTempRaster()、GetOutputRaster()を使用して新しいラスタ・オブジェクトを作成できます。

ラスタ・オブジェクトの読み込みは多くの関数やステートメントで行えます。

ラスタ・オブジェクトへの書き込みは、代入ステートメントや(13ページを参照)、ResampleRaster--()、CADToRasterAllSame()など一部の関数で行うことができます。いくつかの関数では、ラスタ・サブオブジェクトにアクセスできます。

SMLウインドウをクリアしてLITEDATA / SML / PAGE15.SMLスクリプトをロードします。スクリプトは、8ビット・グレー階調ラスタを0〜255の全データ範囲にスケーリングできるように設計されています(グレー階調画像ではしばしば、セル値がデータ範囲の中央部のどこかに集中しており極端な値がない場合があります)。次のスクリプトには、ラスタ・オブジェクトとサブオブジェクトの読み込み、書き込み、作成方法を示すためのステートメントが含まれています。

 ##

#図#
スケール・スクリプトによる処理前(左)と処理後(右)のBereaMSS/MSS4。

P.15(右)

ステップ

## File / Open(ファイル / 開く)を選択し、LITEDATA / SML / PAGE15.SMLを選択します。
## スクリプトを実行し、ラスタAにCB_TM / TM5を、ラスタBに新しいラスタ・オブジェクトを選択します。
## 表示処理を使用して入出力ラスタのセル値をチェックし、両者のセル値を比較します。

CreateTempRaster()とDeleteTempRaster()は、プロジェクト・ファイルに保存したくない中間オブジェクトに対する操作をユーザが行えるようにするためのものです。

P.16(上、左)

ベクタ・オブジェクト

ステップ

## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択し、スクリプトLITEDATA / SML / PAGE16.SMLを開きます。
## CB_DATA / CB_DLGのHYDROLOGYとROADSを入力に使用してスクリプトを実行します。

ベクタ関数は、Vector(ベクタ)およびVector Toolkit(ベクタ・ツールキット)関数リストにリストされます。

P.16(右)

ベクタ・オブジェクトの作成、読み込み、書き込み、操作をサポートするための関数は、リスト内で増え続けています。Vector(ベクタ)やVector Toolkit(ベクタ・ツールキット)カテゴリに含まれるベクタ関数の定義を捜してください。

簡単なスクリプトに、基本的な入出力関数やベクタ組み合わせの1つが示されています。

 ##

ベクタ抽出操作は、同様の関数によりサポートされます。サンプル・スクリプトCUSTOM / VECTOR / VECEXTR.SMLなどを参照してください。

また、SMLは、ベクタと他のタイプのオブジェクトとの間でより複雑な相互作用を行わせることもできます。VIEWSHED.SMLについては既に学習しました(4ページ)。CUSTOM / FOCAL / VECFOCAL.SMLの中には、ベクタ・オブジェクト内の点を使用してラスタ・オブジェクト内のセルを選択し、これらの各セルに対して順番にFocalMean()関数を適用する別の例があります。ベクタのx-y座標(x=V. point[i].Internal.x)がどのように地図座標[ObjectToMap(V,x,y,georefV,xVector,yVector)]に変換され、MapToObject (georefR, xVector, yVector, R, rCol, rLine)がどのように地図座標に対応するラスタ・セルを見つけているかをよく確認してください。

上記の短いスクリプトはVectorOR()関数を使用して出力ベクタ・オブジェクトを生成します。

P.17(上、左)

CADオブジェクトとTINオブジェクト

CADオブジェクトやTINオブジェクトの作成、読み込み、書き込み、操作をサポートするための関数は、リスト内で増え続けています。

LITEDATA / SML / PAGE17.SMLを開き、CADの入出力用の基本的な関数を確認してください。

GetInputTIN()やGetOutputTIN()を使用すると、入力や出力のTINオブジェクトを選択できます。TINToVectorContour()を使用するとベクタ・オブジェクト内に等高線要素を作成できます。TINToRaster()は標高ラスタを作成し、RasterToTINIterative()は標高ラスタ・オブジェクトからTINオブジェクトを作成します。

サンプル・スクリプト / CUSTOM / CONVERT / RTOTIN.SMLはRasterToTINIterative()用のパラメータをセットして関数をコールします。さまざまなパラメータ値を試して結果を比較することができます。

Custom / CADとCustom / TINメニューのスクリプトを確認してください。これらのスクリプトにより作成される出力オブジェクを確認し、スクリプトの動作を調べてください。

CADやTIN用の関数は、CAD、Conversion(変換)、TIN Function Groups(TIN関数グループ)内にリストされます。

P.17(右)

ステップ

## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択し、スクリプトPAGE17.SMLを開きます。
## スクリプトを実行します。
## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を使用してサンプル・スクリプトCUSTOM / CONVERT / RTOTIN.SMLを開きます。
## 入力にCB_DATA / CB_ELEV / DEM_8BITを、出力TINに新しいオブジェクトを使用してスクリプトを実行します。

DEM_8BITラスタ・オブジェクトに出力TINを重ねたもの。スクリプトRTOTIN.SMLの中でRasterToTINIterative()を適用した結果を示します。

P.18(上、左)

データベース・オブジェクト

ステップ

## サンプル・スクリプトLITEDATA / SML / DATABASE.SMLを開きます。
## 入力にSF_DATA / HAYWSOIL / HSOILSを使用してスクリプトを実行します。
## サンプル・スクリプトCUSTOM / DATABASE / CREATE.SMLを開きます。
## 入力にCB_DATA / HAYWSOIL / HSOILSを使用してスクリプトを実行します。

データベース関数は、Database(データベース)およびDatabase Editor(データベース・エディタ)関数グループの中にあります。

P.18(右)

データベース関数は、Database(データベース)およびDatabase Editor(データベース・エディタ)関数グループの中にあります。/ LITEDATA / SML / DATABASE.SMLサンプル・スクリプトの場合のようにテーブルとフィールドを明示的に参照して、スクリプトでデータベース・オブジェクトにアクセスすることもできますが、/ CUSTOM / DATABASE / CREATE.SMLに示した関数の方がこれよりはるかに有効です。

同様のスクリプト手法を使用してデータベース・フィールドにアクセスしたり、計算などの処理を行うスクリプト内でこれらを使用することができます。

Data Logger APPLIDAT( / CUSTOM / APPLIDAT / DATALOG.SML)は、複数のデータベース・テーブルに対話的にアクセスできるようにするスクリプトの例です(24ページを参照)。このスクリプトには、クラス構造、ユーザ独自のデータ入力形式、およびユーザが新しいレコードを作成、編集したり、複数の異なるテーブルに追加できるようにするためのユーザ定義手順が示されています。datalog(データ収集)スクリプトに示された手法をよく研究すると、完全に対話的なデータベース・テーブルへの同様なインタフェースを自分のスクリプトに含める方法がわかります。SMLでデータベース・オブジェクトの複雑な操作を実行する方法が知りたい場合は、datalog(データ収集)スクリプトを研究してください。

DATABASE.SMLは、SOILTYPEテーブルのACRESフィールドを明示的に参照します


P.19(上、左)

オブジェクトの変換とスクリプトのチェーン化

地理空間データのタイプを変換する機能を使用すると、処理や解析作業の柔軟性が非常に高くなります。TNTmipsにおける標準のデータ変換処理は、データ・タイプや機能のサポートにおいて業界をリードしています。多くの変換処理を、SMLの中で関数として使用できます。

#図#
ラスタ ベクタ CAD TIN
ラスタ
ベクタ
CAD
TIN
データ・タイプ変換関数

外部スクリプトとプログラム SMLでサポートされていない操作や変換をスクリプトで行う必要がある場合は、run()関数を使用してTNT処理や外部プログラムをコールすることができます。たとえば、現行バージョンのSMLにはベクタからCADへの変換を行う関数がありませんので、スクリプトで次のようなステートメンを使用してPrepare / Convert / Vector(準備 / 変換 / ベクタ)を実行することができます。

 ##

処理モジュール名(上記の例の"convobjs vectocad"など)を見つけるには、任意のテキスト・エディタを使用して(tntディレクトリの中の)TNTMIPS.MNUファイルを開きます。

また、他のSMLスクリプト、TNTsdkを使用して開発したユーザ独自のTNTモジュール、およびシステムがコール可能な任意の外部プログラムを実行することもできます。コマンド・チェーンは次の形式で作成します。

 ##

SMLは、ユーザが1つの外部プログラムを閉じるのを待ってから、スクリプト内の次のステートメントに進みます。

P.19(右)

ステップ

## テキスト・エディタ(Edit / Text File(編集 / テキスト・ファイル)など)を使用してTNTMIPS.MNUをチェックします。
## TNTMIPS.MNUから処理を選択し、次のような1行からなるスクリプトを作成します。
 RUN ("CONVOBJS VECTOCAD")

run()関数を使用すると多くのメタ・タスクを実行できます。スクリプトの最初の部分でファイルを作成し、TNTsdkを使用して開発したユーザ独自のモジュールを実行し、外部モジュールを閉じ、スクリプトの残りの部分で結果にアクセスします。

P.20(上、左)

SMLのCustom(カスタム)メニューとアイコン

ステップ

## Toolbars / Edit(ツールバー / 編集)を選択します。
## 上部パネルのGeneral(一般)ツールバーをハイライト表示にします。
## [Add SML...(SMLを追加...)]をクリックします。
## [Icon...(アイコン...)]をクリックしてアイコンを選択します。
## [OK]をクリックして終了します。

Custom(カスタム)メニュー・カスケードには、TNTインストール処理で作成された/CUSTOMサブディレクトリ内のスクリプトがリストされます。

P.20(右)

インストール時にTNT製品CDからサンプルのSMLスクリプトをインストールするように選択した場合、Custom(カスタム)メニュー・カスケードからこれらのSMLスクリプトにアクセスできます(TNTのメニューバーにCustom(カスタム)メニューが表示されない場合は、CDからセットアップ・プログラムを起動してInstall Sample SML Scripts(サンプルのSMLスクリプトをインストール)を選択します)。セットアップ・プログラムは、 /CUSTOMサブディレクトリを作成してサンプルの*.SMLスクリプトをこのディレクトリにコピーします。これ以後ユーザが/CUSTOMディレクトリに保存した新しいスクリプトもすべてCustom(カスタム)メニューで使用できます。

また、ユーザ独自のツールバーのアイコンにSMLスクリプトを割り当てることもできます。メイン・メニューバーからToolbar / Edit(ツールバー / 編集)を選択し、Toolbar Editor(ツールバー・エディタ)ウインドウを使用してツールバー、アイコン、SMLスクリプトを選択します。下図では、General(一般)ツールバーが選択されており、[Add SML...(SMLを追加...)]ボタンを使用して / LITEDATA / SML / VIEWSHED.SMLが選択され、[Icon...(アイコン...)]ボタンを使用してアイコンが選択されています。Label(ラベル)、Tooltip(ツールティップス)テキスト・ボックスを図のように編集して、スクリプト用のインタフェース・テキストを設定します。

Toolbar Editor(ツールバー・エディタ)を使用してGneral(一般)アイコンバーにVIEWSHEDアイコンを追加します。

スクロール・リストからGeneral Toolbar(一般ツールバー)を選択します。。[Add SML...(SMLを追加...)]をクリックし、選択処理を使用してVIEWSHED.SMLスクリプトを選択します。[Icon...(アイコン...)]ボタンをクリックしてライブラリから適当なツールバー・アイコンを選択します。図のようにLabel:(ラベル:)、Tooltip:(ツールティップス:)・ボックスを編集します。

P.21(上、左)

ユーザが定義した関数とプロシージャ

SMLでは、ユーザが定義した関数とプロシージャもサポートされます。もちろん、関数やプロシージャは、コールする前に次のように宣言しておく必要があります。

 ##

次の簡単な例では、2つの値のうち大きい方を捜します。SMLウインドウをクリアしてこの短いスクリプトを入力してください。

 ##

TNT製品CD-ROMのサンプルSMLスクリプトには、別の例も含まれています。

returnステートメントは、関数やプロシージャを終了するために使用されます。このステートメントは終わりの部分に置かれることが多いのですが、終了条件をテストするループ内に置かれることもあります。定義にある通りプロシージャは値を返しませんので、プロシージャ内では他の式を伴わない形でreturnが使用されます。これに対し、式は必ず値を返しますので、関数内のキーワードreturnは必ず式の次に置かれます。

外部プログラム。次のようなステートメントを使用するとスクリプトから外部プログラムをコールすることができます。

 ##

TNTsdkを使用して開発したユーザ独自のTNTモジュールや、システムがコマンド行からコール可能な任意の外部プログラムをコールすることができます。SMLは、外部プログラムが終了するのを待ってから、スクリプト内の次のステートメントに進みます。

P.21(右)

ステップ

## File / New(ファイル / 新規)を使用してSMLウインドウをクリアします。
## larger()関数と、このページにリストされたコードを入力してスクリプトを実行します。

サンプルのlarger(a,b)関数の結果:

P.22(上、左)

表示の中のSMLレイヤー

Group Controls(グループ・コントロール)ウインドウのAdd SML(SMLを追加)アイコン・ボタンはSML Layer(SMLレイヤー)ウインドウを開きます。

ステップ

## Display / Spatial Data(表示 / 空間データ)を選択します。
## Add SML(SMLを追加)と##をクリックします。
## SML Layer Controls(SMLレイヤー・コントロール)ウィンドウのScript(スクリプト)タブを選択し、File / Open / *.SML(ファイル / 開く / *.SML)を選択します。
## LITEDATA / SML / ARROW.SMLを選択します。
## [OK]をクリックしてSML Layer Controls(SMLレイヤー・コントロール)ウィンドウを閉じます。

#図#
ARROW.SMLは地図に使用される磁北極指示矢印を描画します。

P.22(右)

標準の表示処理(Display / Spatial Data(表示 / 空間データ))では、ラスタ、ベクタ、CAD、TINオブジェクトがレイヤーにできるのとまったく同様に、SMLスクリプトをレイヤーとして使用できます。SMLスクリプト・レイヤーは、特殊な整った線や目盛りなど、柔軟性の高い地図作成用描画関数を制御できます。スクリプト / LITEDATA / SML / NEATLINE.SMLを開き、このスクリプトで使用されている描画関数を確認してください。表示処理の中で、CB_DATA / CB_COMP / _8_BITをベース・レイヤーとして追加し、さらにNEATLINE.SMLをSMLレイヤーとして追加します。スクリプト内の線にコメント文字("#")を付けて描画機能のオン / オフを切り換えます。

別の例としてLITEDATA / SML / ARROW.SMLの中の北方向指示矢印用のスクリプトをチェックしてください。この矢印スクリプトは、地図投影上の北または磁気的な北のいずれを示す地図作成用表記としても使用できます。

SML Layer(SMLレイヤー)ウインドウのScript(スクリプト)タブには、スクリプトの編集、チェック、実行用の標準SMLインタフェースが含まれています。また、Coordinates(座標)タブでは、スクリプト・レイヤーを表示内の他のレイヤーのジオリファレンスに関係付けることができます。

P.23(上、左)

SMLとGeoFormula

GeoFormulaは、計算された表示レイヤーであり、1つまたは複数の入力オブジェクトを使用して表示用の結果を誘導します。GeoFormulaを使用すると、別の処理を実行して表示用の出力オブジェクトを準備しなくても、「その場で」オブジェクトに対してSML操作を行うことができます。GeoFormulaは、「仮想オブジェクト」を含む動的な表示レイヤーです。GeoFormulaレイヤーは、プロジェクト・ファイルに保存されるような出力オブジェクトを生成しません。その代わりGeoFormulaは、ユーザが作業を終了したときにすべてのシステム・リソース(ディスク領域やメモリなど)を解放するような表示レイヤーを生成します。

たとえば、ラスタ画像の赤と赤外線のバンドを組み合わせてTransformed Vegetation Index(TVI:変形植生指標)を生成することができます。もちろんTNTmipsには、TVI出力を他の用途に残しておきたい場合に、選択された入力オブジェクトからTVI出力ラスタを生成するような単純な処理も用意されていますが、単に結果のTVIを確認したいだけであり出力オブジェクトを残しておく必要がない場合は、GeoFormula表示レイヤーを使用すべきです。

GeoFormulaスクリプトは、再使用可能なファイルとして保存できます。TNT表示処理の中でGeoFormulaレイヤーを任意の数の他のレイヤーと組み合わせ、多数の地理空間オブジェクトを複雑に視覚化することができます。

GeoFormula機能は基本的には表示処理における動的な視覚化処理用のものです。また、個別のGeoFormula処理(Interpret / Raster / Combine / GeoFormula(解釈 / ラスタ / 組み合わせ / GeoFormula))を実行して、他で使用するための半永久的な出力オブジェクトを作成することもできます。

P.23(右)

GeoFormulasについては、『TNT入門』シリーズの別のパンフレットで説明しています。『TNT入門:地理空間フォーミュラの使用』を参照してください。

ステップ

## Display / Spatial Data(表示 / 空間データ)を選択します。
## Add Geoformula / Quick-Add Geoformula(Geoformulaを追加 / Geoformulaをクイック追加)をクリックします。
## LITEDATA / GEOFRMLA / BROV_UMN.GSFを選択します。
## 入力として / LITEDATA / CB_DATA / CB_TMからのTMバンドと、/ LITEDATA / CB_DATA / CB_SPOT / SPOT_PANの中のSPOT画像を選択します。

LITEDATA / GEOFAMLA / BROV_UMN.GSFには、高解像度のSPOT画像による低解像度のTM画像の動的な強調が示されています。

P.24(上、左)

APPLIDAT

ステップ

## Custom / APPLIDAT / Datalog(カスタム / APPLIDAT / データ収集)を選択します。
## ツールバーのData Logging(データ収集)アイコンをクリックします。
## Data Logging APPLIDAT(データ収集APPLIDAT)を調べます。
## 作業が終わったらExit(終了)ボタンをクリックします。

APPLIDATを起動すると、各SMLスクリプト・オブジェクトに対応するアイコンを含むユーザ独自のツールバーが開きます。

どのAPPLIDATでもユーザ独自の説明ファイルを使用できます。

説明ファイルは他のリソースと一緒になっているため、APPLIDATと別になることはありません。

メイン・ウインドウのData Logger APPLIDAT(データ収集APPLIDAT)には、ユーザに次の操作を促すHelpTipsの使用方法が示されています。

P.24(右)

SMLスクリプトは高性能なため、複雑なAPPLIDATを作成することができます。APPLIDAT(「APPLIcationにDATAを付けたもの」)には、機関や組織内の特別なユーザ・グループ用の既製品のアプリケーションを含めることができます。SMLを使用すると、わかりやすいインタフェースを持つAPPLIDATを記述できます。あなたの顧客はTNT製品に慣れている必要はありません(知っている必要さえありません)。APPLIDATを最初に使用する際には必要なすべてのヘルプが見つかったり、ある程度経過後もまた簡単に見つけることができます。

デスクトップ上のアイコンは、APPLIDATの中に含まれる、まとまった一連のSMLスクリプトを起動することができます。アイコンをクリックするとTNTが起動され、ユーザ独自のツールバー・メニューが開きます。ツールバー・メニューの各アイコン・ボタンは、いずれかのスクリプトを起動します。1つのAPPLIDATには、使用する地理データ・オブジェクトとスクリプト・オブジェクトの両方がまとめられているため、両者を一緒に自動的にロードすることができます。

これらの練習問題には、プッシュボタン、HelpTips、ポリゴン描画、その他の対話的機能を含むスクリプトが示されています。

HTMLフォーマットをサポートする任意のエディタを使用できますので、APPLIDAT用の説明ファイルを容易に作成したり修正することができます。したがって、Microsoft Wordなどのプログラムを使用して最新の説明情報を記述し、[名前を付けて保存...]機能を使用してファイルをHTMLフォーマットで保存することができます。新しいヘルプ・ファイルをAPPLIDATに対応付けるには、SMLスクリプト・エディタでAPPLIDATスクリプトを編集し、File(ファイル)メニューからAdd Text Object(テキスト・オブジェクトを追加)を選択します。HTMLファイルを選択すると、TNTはスクリプトの下のサブオブジェクトとしてそのファイルをコピーします。

P.25(上、左)

スクリプト・オブジェクトとツールバーのアイコン

APPLIDATスクリプトは、SMLファイルの拡張子を持つ独立のテキスト・ファイルとしては残されません。その代わり、SMLスクリプトのアクティブなコピーがスクリプト・オブジェクトとしてプロジェクト・ファイルに保存されます(File / Save As / RVC Object(ファイル / 名前を付けて保存 / RVCオブジェクト)を使用)。プロジェクト・ファイル内にスクリプト・オブジェクトが作成される際、TNTはこれを自動的にデフォルトのアイコン・サブオブジェクトに割り当てますので、ユーザはこれを編集したり変更して別のアイコンにすることができます。プロジェクト・ファイル内の各SMLスクリプト・オブジェクトには、オブジェクト名と説明が付いています。スクリプトがAPPLIDATのツールバー上のアイコンとして表現されている場合、オブジェクトの説明はツールティップとして表示されます。

TNTプロジェクト・ファイルには通常、.RVCという拡張子が付けられます。SMLスクリプト・オブジェクトと地理データ・オブジェクトを1つのAPPLIDATプロジェクト・ファイル内にまとめる場合は、プロジェクト・ファイルを.SMLの拡張子が付く名前に変更できます。したがって、SAMPLE.RVCとSAMPLE.SMLが全く同じTNTプロジェクト・ファイルである場合もあります。デスクトップ上の対応するアイコンをクリックすると、拡張子がSMLであるプロジェクト・ファイルを起動することができます。この操作でTNTが開き、プロジェクト・ファイル内の各スクリプト・オブジェクトに対応するアイコンで構成されたアイコン・ツールバーが表示されます。

APPLIDATプロジェクト・ファイルには、いくつかのタイプのオブジェクトが含まれています。たとえばBIOMASS2.RVCには、ラスタ(CIR_RASTER、FARM_DEM)、データベース(WELLS、TRACTORS)、スクリプト(PINMAP、VIEW3D)。テキスト(ABOUT)が含まれています。

TNTアイコンを編集するための機能はすべて、スクリプト・アイコンに使用できます。40個を超える既存のセットに含まれている何百ものアイコンの中からX Bitmapsアイコンと.ICOアイコンを選択してインポートしたり、エディタで新しいアイコンを作成することができます。TNTは256×256ピクセルまでの大きさのアイコンをサポートしますので非常に精細なアイコンを作成できます。

P.25(右)

ステップ

## SMLウィンドウでFile / Open / RVC Object(ファイル / 開く / RVCオブジェクト)を選択します。
## / LITEDATA / SML / SMLLAYER.RVC / ARROWを選択します。
## File / Edit Toolbar(ファイル / ツールバーを編集)アイコンを選択します。
## Select Bitmap Pattern(ビットマップ・パターンを選択)ウィンドウでSet(設定)ボタンをクリックし、リストからAdvisor set(アドバイザ・セット)を選択します。
## 図のような'gold'アイコンを選択し、[OK]をクリックします。
## Verify(確認)ダイアログボックスで[Yes(はい)]をクリックし、選択内容を確定します。

プロジェクト・ファイルに含まれる各スクリプト・オブジェクトには、対応するアイコン・サブオブジェクトがあります。添付されているセットから任意のアイコンを選択することもできますし、アイコン・エディタでユーザ独自のものを作成することもできます。

P.26(上、左)

HelpTips、データベース、GPS入力

ステップ

## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択します。
## TNTディレクトリから / CUSTOM / APPLIDAT / DATALOG.SML / DATALOGを選択します。
## Process / SML / Edit Script(処理 / SML / スクリプトを編集)を使用して別のSMLウィンドウを開きます。
## DATALOGスクリプトをスクロールして、修正したい機能を実装する部分を捜します。
## Edit(編集)メニューの選択肢Copy(コピー)とPaste(貼り付け)を使用してdatalogスクリプトの各部を新しいスクリプトにコピーします。

#図#
2つのSML処理を開き、マイクロイメージズ社のサンプル・スクリプトからコピーして自分のスクリプトに貼り付けます。

/ CUSTOM / APPLIDAT / BIOMASS2.SML / BIOMASSにはこの他にも多くのスクリプト作成技法が示されています。

P.26(右)

APPLIDATを開発する最も容易な方法は、TNT製品に添付されているサンプル・スクリプトを自分のニーズに合わせて修正する方法です。2つのSMLスクリプト編集ウィンドウを横に並べて開き、マイクロイメージズ社のサンプル・スクリプトからコードの各部をコピーして自分が開発中のスクリプトに貼り付けることができます。

/ CUSTOM / APPLIDAT / DATALOG.SML / DATALOGを開いてスクロールし、プッシュボタン、HelpTips、データベース、GPS入力、その他の対話的機能がどのように実装されているか調べてください。DATALOGというAPPLIDATには、複雑なスクリプトの使用例があり、多くの役に立つSML機能の使用方法が示されてます。

/ CUSTOM / APPLIDAT / BIOMASS2.SML / BIOMASSを開いてスクロールし、描画ツール、画像処理、ヒストグラム、三次元視覚化などがどのように実装されているか調べてください。これらのサンプル・スクリプトに示されているモデルを利用してください。

自分のAPPLIDATの開発モデルとしてマイクロイメージズ社のサンプル・スクリプトを使用してください。

P.27(上、左)

APPLIDATの開発と暗号化

サンプルのAPPLIDATに示されたSMLによる高度な手法をよく確認、研究してください。本書は、これらのすべての機能に関する例を示すことはできません。

HelpTip datalog
GPS入力 datalog
データベース・アクセス datalog
二次元表示 / 地図帳 datalog
ピンマップ・レイヤー datalog
描画ツール biomass
ヒストグラム biomass
三次元視覚化 biomass
画像処理 biomass

自分で作成するSMLスクリプトには特別な独占的価値がある場合もあるでしょう。したがって、自分のスクリプトを広く配布し、かつ開発に要した労力や専用のアルゴリズムも保護したいと考えるでしょう。パスワードや製品キーを使用すると、プロジェクト・ファイル内のスクリプト・オブジェクトを暗号化できます。暗号化すると、スクリプト・オブジェクトが無断で見られたり編集されるのをすべて防止できます。暗号化されたスクリプトは暗号化されていないスクリプトとまったく同様に動作しますが、暗号化されたスクリプトはTNTliteで実行できない点が異なります。

スクリプトの暗号化されたコピーをAPPLIDATプロジェクト・ファイル内に作成するには、Save As / encrypted(名前を付けて保存 / 暗号化)オプションを使用します。暗号化されたスクリプトをSMLウインドウで開くと、暗号化されていることを示すメッセージしか表示されません(編集できるように、暗号化されていないコピーも必ず残しておいてください)。

P.27(右)

ステップ

## File / Open / *.SML File(ファイル / 開く / *.SMLファイル)を選択し、LITEDATA / SML / BOXCAR.SMLを選択します。
## File / Save As / RVC Object(Encrypted)(ファイル / 保存 / RVCオブジェクト(暗号化))を選択します。
## 指示に従い新しいプロジェクト・ファイルとSMLオブジェクトを作成します。
## Encryption Options(暗号オプション)ウィンドウで暗号用のパスワードを選択します。
## 作業が終わったら、File / Open(ファイル / 開く)を使用して暗号化されたスクリプトを選択します。

配布の準備はできましたか?

自分のスクリプトとデータ・オブジェクトをすべて1つのAPPLIDATプロジェクト・ファイルに入れます。SMLの拡張子が付いた名前に変更し、デスクトップから起動してテストします。

ダイアログで、ハードウェア・キーやパスワードを使用して暗号化することができます。

1


33