IDL基礎講習会
Harris Geospatial株式会社

2020/9/29

本日の講義内容• プログラミング言語IDLの紹介– IDLについて– 統合開発環境「IDLワークベンチ」について– IDLの操作における基本・応用知識の紹介– 用語説明: プロシージャ/関数/引数/キーワード• プログラムを作成するための基礎知識– IDLを使用した描画について– プログラムの作り方とTIPS• 発展内容の紹介– Pythonとの連携– オブジェクト指向プログラミングとdemo

L3HARRIS

Proprietary Information

IDLとは Interactive Data Languageの略でデータの解析と可視化に優れた、科学的プログラミング言語です。
 IDLワークベンチ（統合開発環境）搭載しています。
 多数のファイル形式の読み込み/書き込みルーチンを持ちます。
 データの解析・可視化の数多くのルーチンを持ちます。
 配列指向型言語です。
 現在は宇宙開発分野の他、大気科学、太陽物理学、エンジニアリングの研究開発、医用画像処理など様々な分野で、80を超える国の科学者や開発者により利用されています。

IDLによるさまざまな描画機能の例
L3HARRIS

Proprietary Information

IDLワークベンチの概要
 IDLの統合開発環境
 プロジェクト管理 ソースコードエディタ
 コンパイル機能
 デバッグ機能
 コンソールウィンドウから対話型解析

IDLワークベンチ

L3HARRIS

Proprietary Information

コンテンツアシスト機能
 IDLワークベンチのコンソールやエディタにマウスカーソルを置いて、Ctrl +Space で候補となる変数、制御構文、プロシージャ、関数をポップアップできます。
 MacOSでは別のキーボードショートカットが割り当てられており、事前にその割り当てを無効または別のものに変更する必要があります。
 LinuxではShift + Ctrl + Spaceで同様の動作となります。
 選択をマウスクリックするか、カーソルをあわせEnterで補完されます。

定義済み変数や候補となるプロシージャ、関数がアシストされます
L3HARRIS

IF文やFOR文などの制御構文についてもアシストされます
Proprietary Information

基本知識: 変数と配列
変数の宣言は不要で、型は動的に定義されます。（大文字/小文字の区別なし）
IDL> a = 1
IDL> HELP, aA

INT=1

配列の添え字は0始まりで、範囲外を指定するとエラーになります。
IDL> x = [4, 8, 15, 16, 23, 42]
IDL> HELP, xX
INT= Array[6]IDL> print, x[0]4IDL> print, x[6]% Attempt to subscript X with <INT(6)> is out of range.
% Execution halted at: $MAIN$
L3HARRIS

Proprietary Information

応用知識: LIST型とHASH型
 IDL8.0からはLISTやHASHという複合データ型が追加されました。
 構造体やポインタを使用しないで処理できるケースが増えました。

IDL> lst = list()
IDL> lst.add, "apple"
IDL> lst.add, !pi
IDL> lst.add, indgen(10)IDL> help, lst
LST LIST <ID=7 NELEMENTS=3>

IDL> colors = hash()
IDL> colors["red"] = [255,0,0]
IDL> colors["green"] = [0,255,0]
IDL> colors["blue"] = [0,0,255]
IDL> help, colors
COLORS
HASH <ID=13 NELEMENTS=3>
IDL> print, colors["red"]
255
00

LIST: 型の混在を許容した配列です
HASH: LISTの要素を添え字ではなく、Key-Valueの対応関係で管理します
L3HARRIS

Proprietary Information

用語説明: 関数とプロシージャ
大きな違いは戻り値の有無です。
IDLには様々な関数やプロシージャがデフォルトで用意されています。
関数 : 戻り値 = 関数名(パラメータ1 , パラメータ2 , … … , パラメータ𝑛 )# 例: 空のBYTE型の配列を返す関数, BYTARRIDL> barr = BYTARR(10)IDL> help, barr
BARR
BYTE
= Array[10]プロシージャ : プロシージャ名, パラメータ1 , パラメータ2 , … … , パラメータ𝑛# 例: JPEG形式のデータを読み込み変数にセットするプロシージャ, READ_JPEG
IDL> file = "C:¥Program Files¥Harris¥ENVI55¥IDL87¥examples¥data¥rose.jpg"
IDL> READ_JPEG, file, data
% Loaded DLM: JPEG.
IDL> help, data
DATA
BYTE
= Array[3, 227, 149]
L3HARRIS

Proprietary Information

用語説明:引数とキーワード
 関数やプロシージャには0個以上のパラメータが設定できます。
 必須のパラメータを引数といいます。
 省略可能なパラメータをキーワードといいます。
IDL> x = BINDGEN(100)
IDL> p1 = plot(x)IDL> p2 = plot(x, COLOR='red', THICK=3)

COLORなどは必須ではありません。
これらはキーワードに該当します。

IDL> pe = plot()% PLOT: Incorrect number of arguments.
% Execution halted at: $MAIN$
PLOT関数は描画対象である引数が必須です。
引数を設定しないとエラーになります。
L3HARRIS

Proprietary Information

補足知識: IDLの描画機能の発展
ダイレクトグラフィック
 IDLに元々備わっている機能で、単純な可視化を高速で行うことができます。
 IDL8.0以前に作成され使い続けられているコード中では、ダイレクトグラフィックスを使用した描画処理がよく見られます。
 ダイレクトグラフィックスの場合には線の色や種類といった属性情報を更新するために再描画が必要です。
 プロシージャとして定義されています。

関数型グラフィックス IDL8.0から搭載された新しい表示機能です。
 高速かつ綺麗な描画が可能です。
 対話的に処理を行え、結果をオブジェクトとして扱えるので、属性変更や注釈の追記などが簡単にできるというメリットがあります。

L3HARRIS

Proprietary Information

補足知識: IDLの描画機能の発展
D = FINDGEN(100)ダイレクトグラフィック

PLOT, D, TITLE='Simple Plot'

関数型グラフィック

i = PLOT(D, TITLE='Simple Plot')

L3HARRIS

Proprietary Information

IDLによるデータの描画
X = FINDGEN(100)/10
pj0 = PLOT(X, BESELJ(X, 0), XTITLE='X', YTITLE='$J_n(x)$')pj1 = PLOT(X, BESELJ(X, 1), /OVERPLOT)

このままでは線の区別がしにくいため、見やすくなるようにプロパティを変更していきます。

L3HARRISProprietary Information

IDLによるデータの描画
pj0.title = "J Bessel Function"
pj1.color = "red"pj1.LINESTYLE = 3 ; dash_dot
plegend = legend(target=[pj0,pj1], position=[0.8,0.8], /SHADOW)IDLの描画機能のサンプルは以下で紹介されています
https://www.harrisgeospatial.com/docs/visualize.html
L3HARRIS

Proprietary Information

NetCDF形式ファイルの読込と表示
IDL> file = "C:¥Program Files¥Harris¥ENVI55¥IDL87¥examples¥data¥sample.nc"

IDL> NCDF_GET, file, 'image', result
Reading image: BYTE(768,512) . . .
IDL> HELP, result
RESULT
HASH<ID=44サンプルに使用したNetCDFはimageという要素を持ちます

NELEMENTS=2>

IDL> PRINT, result['image']
dim_names: y ...
value: 135 135 132 145 165 170 140 122 ...
dim_sizes:
768
512
attributes: HASH <ID=13 NELEMENTS=2>
IDL> PRINT, result['image', 'attributes']
TITLE: New York City
var_name: image

IDL> img = result['image', 'value']
IDL> i = image(img)
L3HARRIS

Proprietary Information

プロシージャ/関数作成の流れ①空のファイルを作成します

L3HARRIS②新規のファイルが作成されます

Proprietary Information

プロシージャ/関数作成の流れ

PRO <プロシージャ名>のようにプロシージャは定義します

FUNCTION <関数名>のように関数は定義します③作成したプログラムを保存します
ファイル名は プロシージャ名または関数名.pro とします
L3HARRIS

Proprietary Information

プロシージャ/関数作成の流れ④コンパイルボタンを押下しますプロシージャの実行
IDL> test

testプロシージャが実行され作図処理が走ります

関数の実行
IDL> data = testfunc()
IDL> help, data
DATA
FLOAT
L3HARRIS= Array[100, 100]

testfunc関数の戻り値が変数dataに設定されます

Proprietary Information

パラメータ/引数のあるプロシージャ/関数の例
pro jpgu_sample
COMPILE_OPT idl2
; call procedure
test_procedure, 1, 2, KEY=3; call function
ret = test_function(4, 5, KEY=6)
print, 'ret : ', retend

PRO test_procedure, prm1, prm2, KEY=prm3
COMPILE_OPT idl2
PRINT, '*** test_procedure ***'PRINT, 'prm1 = ', prm1
PRINT, 'prm2 = ', prm2
IF KEYWORD_SET(prm3) THEN PRINT, 'prm3 = ', prm3
PRINT, ''END

FUNCTION test_function, prm1, prm2, KEY=prm3
COMPILE_OPT idl2
PRINT, '*** test_function ***'PRINT, 'prm1 = ', prm1
IF KEYWORD_SET(prm3) THEN PRINT, 'prm3 = ', prm3
PRINT, ''RETURN, prm2 + 1
END

L3HARRIS

Proprietary Information

デバッグツールの活用
デバッグツール機能

コンパイルボタン

テキストエディタで選択されているプログラムコードをコンパイルします。

実行ボタンテキストエディタで選択されているプログラムコードを実行します。

再開ボタン

ブレークポイント、あるいはエラー発生で一時停止したプログラムを再開します。

停止ボタン

実行されているプログラムを停止します。

ステップインプログラムをステップ実行します。ソースコードの関数やプロシージャ上でクリックするとその処理内にステップインします。ショートカットはF5キーです。

ステップオーバー

プログラムをステップ実行します。ソースコードの関数やプロシージャ上でクリックするとその処理を実行し次の行に移動します。（関数やプロシージャを1行とみなし、その処理内には入りません）。ショートカットはF6キーです。

ステップアウト

実行している関数やプロシージャを抜けます。（リターンします）。ショー
トカットはF8キーです。

L3HARRIS

Proprietary Information

ブレークポイントの設定
 デバッグ作業でプログラム実行中に意図的に一時停止させます。
 エディタのコード行横の余白をダブルクリックします。
 設定されると赤い点が表示されます。
 もう一度ダブルクリックすると、解除されます。
 設定されたブレークポイントの一覧は「ブレークポイントウィンドウ」
で管理され、ここからまとめて削除することも可能です。

 停止中に変数にカーソルを合わせると設定値が確認できます。
 停止中にコンソールを通して設定値の確認や変更ができます。

IDL> print, y[1]0.841471
L3HARRIS

Proprietary Information

プロシージャ・関数作成のTIPS
 変数ウィンドウで現在定義されている変数が確認できます。
 ひとつのファイルに複数のプロシージャ・関数が定義されている場合には、アウトラインウィンドウを使用すると管理が容易になります。
 コンソールから.reset_sessionを実行すると、メモリがクリアされ変数が消えます。動作検証の前には、これを行うことが推奨されます。

L3HARRIS

Proprietary Information

プロシージャ・関数作成のTIPS
 プロシージャや関数の最初にはコンパイルのオプションを明記します。
 COMPILE_OPT IDL2は厳密なプログラミングのために推奨されます。
 整数変数はデフォルトでは16bitですが、これを32bitで定義されます。
 標準では丸括弧でも配列の要素にアクセスできますが、これが禁止されます。
 文法が厳密になり、関数との区別を明確にできます。

コンパイルは通りますが実行した際に「Aという関数が未定義」というエラーになります。
IDL2のコンパイルオプションで配列への丸括弧アクセスが禁止されているためです。

L3HARRIS

Proprietary Information

Pythonとの連携
 IDL8.5以降からはPythonとの連携機能(Python Bridge)が導入されました。
 https://www.harrisgeospatial.com/docs/Python.html; import libraries
ds = Python.Import('sklearn.datasets')svm = Python.Import('sklearn.svm')# import libraries
import sklearn.datasets as ds
import sklearn.svm as svm; load datas
iris = ds.load_iris()
data = iris['data']
target = iris['target']# load datas
iris = ds.load_iris()
data = iris.data
target = iris.target; make classiffier
clf = svm.SVC()
clf = clf.fit(data, target)# make classiffier
clf = svm.SVC()
clf = clf.fit(data, target)# make sample and classify
test_data = [[ 7.0, 3.0, 5.0, 1.0]]
print(clf.predict(test_data)); make sample and classify
test_data = [[ 7.0, 3.0, 5.0, 1.0]]
test_data = reform(test_data, 4, 1)
print, clf.predict(test_data)

https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html
L3HARRIS

Proprietary Information

GUIプログラミングとdemo
 IDLはGUIプログラミングに対応しています。
 IDLを使用してアプリケーション開発を行うことができます。
 コンソールからdemoと入力すると、IDLのデモプログラムが起動します。
 参照元コードの情報もツールから確認することができます。

Data Visualizing > Plotting > Time Series Demo
L3HARRIS

Proprietary Information

質疑応答
全体を通して、何か質問はありますか

L3HARRIS

Proprietary Information

お問い合わせHarris Geospatial株式会社
技術サポート03-6801-6147（東京）06-6441-0019（大阪）support_jp@L3Harris.com
L3HARRIS

Proprietary Information