「そうめん」で作る「情報視覚化」(2)
2009/02/23 20:28 - AS3.0
前回の続き。
「ビジュアライジング・データ」第3章に触発されて作った都道府県の面積を表示する日本地図について、今回はソースの解説です。
データ
- territory.csv (日本の東西南北端)
- locations.csv (都道府県座標)
- area.csv (都道府県面積)
これはさらっと流します。書籍サンプルと違って、私は csv にしました。
書籍サンプルでは、表示サイズ調整のために読み込んだデータの最大値と最小値を求めるということをしています。
私のサンプルでは表示サイズに該当するのは面積ですが、これはマイナス値は発生しません。 よって area.csv ではオフセット調整のための最大値・最小値の取得はおこなっていません。
一方、各都道府県の座標値は表示位置調整のために最大値・最小値を求める必要がありますが、日本の東西南北端の座標が取得できたので、この値をオフセットとし、location.csv にある座標値の調整をおこなうこととしました。
クラス(1) 「そうめん」に関係ないクラス
- Main.as (ドキュメントクラス)
- MainTread.as (主スレッドクラス)
- DotThread.as (表示する円を司るスレッドクラス)
- Tablize.as (csv を表にするクラス)
- DataManager.as (各種データを管理するクラス)
まずはスレッドに関係ない、下の二つのクラスから(「そうめん」における Main.as は説明する必要はないので省略)、ざっくりとした説明。
Tablize.as
csv ファイルの内容を二次元配列にする静的クラスです。
まず改行をセパレータとして一次配列化し、次に指定したセパレータ(デフォルトはカンマ)で二次目の配列化をおこなうパイプクラスですね。
最初のセパレータである改行ですが、私はウィンドウ使いなので CR + LF が改行になっています。
そのため ¥r¥n で split しているんですが、汎用性を考えると、どうした方がベストになるんですかね。
また、このクラスで生成されるのは Array ですが、本当は連想配列にした方が何かと便利なはず。
その場合、別途、配列定義クラス生成した方が良いんですかね。 それとも Dictonary 使えば良いんでしょうか。Dictonary の説明読んでもいまいち何ができるのか何が利点なんだかよく分かんないんですよね。 はたまた Array のままが実は良かったりするんでしょうか。
まあその辺りは今後の検討材料ってことで。
DataManager.as
Tablize で生成されたデータを取り込み、表示のためのオフセットの計算や、Dot から発せられるデータ表示命令をこなしたりと、このプログラムにおける調整役なので Mediator パターンを使っています。
かなりごった煮な作りで、お世辞にも美しいクラスとは言えませんな。名前もダサダサです。
で、いよいよ本番、ActionScript Thread Library によるコーディング部分の説明。
バッカじゃなかろかと思われた DotThread の説明もおこないますよ以下次回。