Home > Archives > 2011-03

2011-03

StringUtilクラスを掘り下げてみる


福岡てら子 6 「再挑戦!やるぞProgression!」に、お邪魔してきました。』で紹介したProgressionのjp.nium.utilsクラスのエントリが、意外と好評だったので、調子に乗って続けてみたいと思います。

今回は福岡てら子のエントリでもサラッと触れた、StringUtilクラスを掘り下げてみます。

StringUtilクラス

このクラスは文字列の操作に特化したクラスです。

toProperType

これを使うと、対象の文字列を、適切な型のオブジェクトに変換してくれます。

//対象の文字列を、適切な型のオブジェクトに変換の例
trace(StringUtil.toProperType("123456",true));

これを実行すると、123456という文字列を123456というNumber型に変換してくれます。

第二引数は数値化を優先するかどうかの設定になります。今回の場合だと、trueに設定しなくても中の処理(parseFloat)によって、Number型に変換してくれます。

repeat

これを使うと、対象の文字列を、第二引数に指定した回数だけ繰り返します。

trace(StringUtil.repeat(“東京てら子”,3));

これを実行すると、「東京てら子東京てら子東京てら子」と3回繰り返された状態でtraceされます。

ignoreBreak

これを使うと、対象の文字列内の改行タグを削除してくれます。

var s:String = "東京てら子\n大阪てら子\n福岡てら子";
trace(StringUtil.ignoreBreak(s));

これを実行すると、「東京てら子大阪てら子福岡てら子」と会場タグが削除されてtraceされます。

toUpperCaseFirstLetter

これを使うと、対象の文字列の先頭文字のみ大文字に。残りは小文字に変換してくれます。

var s:String = "tokyoteraco";
trace(StringUtil.toUpperCaseFirstLetter(s));

これを実行すると、Tokyoteracoとtraceされます。

collectBreak

これを使うと、対象の文字列内の改行タグを変更することが出来ます。

var s:String = "東京てら子\n大阪てら子\n福岡てら子";
trace(StringUtil.collectBreak(s,"\r\n"));

これを実行すると、文字列内の改行タグが、\nから\r\nに変更されます。

clip

これを使うと、対象の文字列が、第二引数で指定した長さに収まるように、中央部分を削除してくれます。

var s:String = "東京てら子,大阪てら子,福岡てら子";
trace(StringUtil.clip(s,5));

これを実行すると、東…子とtraceされます。

東京てら子14 『Google API』~GoogleMap API for FlashとExifデータ~


東京てら子14 『Google API』に参加された皆様、お疲れ様でした。

ネタを何にしようか考えたんですが、その前の週に福岡に遊びに行く予定もあったので、かなりベタですが、福岡で撮影した写真をGoogleMap上にマッピングしようかな? と。

後日、一つ一つ撮影した場所の緯度・経度の値を調べて、それをGoogleMapに反映させるのは面倒だなぁと思ったので、Exifデータを使ったマッピングを今回試してみることにしました。

Exifとは?

Exchangeable image file format(エクスチェンジャブル・イメージ・ファイル・フォーマット)は、富士フイルムが開発し、当時の日本電子工業振興協会 (JEIDA)で規格化された画像メタデータのフォーマット。デジタルカメラの画像用に使われる。略称はExif(イグジフもしくはエグジフ)。

カメラの機種や撮影時の条件情報を画像に埋め込んでいて、ビューワやフォトレタッチソフト等で応用する事ができる。Exif2.2ではExif Printという規格を組み込んでおり、撮影時の条件情報を元に自動的に最適化を行って、的確な状態でプリント出力を可能にしている。(Wikipediaより引用)

このようにExifデータには、写真撮影時の各種情報(GPS情報など)が記録されています。

今回僕は、デジカメではなくiPhone3GSのGPS機能をONにして、iPhoneのデフォルトのカメラでいろいろ撮影してきました。

Exifデータを確認するには、Firefoxのアドオンなどいろいろありますが、画像ファイルを選択→右クリック→プロパティ→詳細からも見ることが出来ます。

Exifデータの確認

この中にGPSデータとして、緯度・経度・高度の情報も保存されています。

GPSデータを取り出す

次にExifデータからGPS情報を取り出すことになるのですが、AS3用にいくつかライブラリが公開されています。

今回はExifInfoを使用することにしました。

ExifInfoのサイトにはサンプルコードが掲載されているので、詳細なコードはそちらを見て頂くとして、必要な箇所のみ掲載します。

private function onComplete(e:Event):void 
{
	//今回はGPSデータのみ使用するので、他は未使用
	if (loader.exif.ifds.gps)
	displayIFD(loader.exif.ifds.gps);	
}

private function displayIFD(ifd:IFD):void {
	trace(" --- " + ifd.level + " --- ");
	trace("緯度 : " + ifd["GPSLatitude"]);
	trace("経度 : " + ifd["GPSLongitude"]);
}

こんな感じにしてあげると、緯度と経度が取得出来ます。

60進法から10進法へ変換

この際、気をつけることが出てきます。

先の手順で取得した緯度と経度の値は、60進法になっています。

緯度
33,35.38,0
経度
130,25.19,0

この表記は、33度35分30.8秒と130度25分19.0秒ということになります。

しかし、この値をGoogleMapに渡しても、GoogleMapではきちんと表示してくれません。

60進法を10進法に変換する必要が出てきます。

「60進法 10進法 変換」とかのキーワードでググれば、変換方法はいろいろ出てきますが、今回は大体の位置が合っていればいいかな? という感じなので、一番簡単な変換方法を用いました。

度 + (分 / 60) + (秒 / 60 / 60)

この公式を使って、先のExifInfoを使って取得した緯度と経度の値を10進法に変換し、GoogleMapで使用しています。

Map3D

今回、GoogleMapのMapクラスではなく、Map3Dクラスを使用してみました。

Map3Dクラスを使うだけで、いつもと違ったGoogleMap(3D表現)を簡単に楽しむことが出来ます。

福岡で撮影した写真を3Dマッピング

↑画像はクリックすると、拡大表示します

このようにExifデータを使ってあげると、「Yahooドームの緯度・経度は…」といった具合に調べなくても、簡単にマッピング出来るようになるのがいいですね。

Exifデータ、今回ちょっと調べて使ってみたんですが、他にもいろいろ面白そうなことが出来そうです!

福岡てら子 6 「再挑戦!やるぞProgression!」に、お邪魔してきました。


3月19日(土)に開催された、福岡てら子 6 「再挑戦!やるぞProgression!」に、小旅行を兼ねてお邪魔してきました。

テーマがProgressionだったので、『ハマるポイント&使うと便利なクラス』というお題で、少しお話させて頂きました。

ハマるポイント

Progressionを始めると、「あれっ…」って思うことが出てきます。

addChildの違い

Flash(AS3)で表示オブジェクトに追加したい場合は、以下のように書きます。

addChild(hoge);

この感覚のままProgressionに行ってしまうと、ページ遷移した際に、オブジェクトを表示したり非表示にする際に、ちょっと困ったことになります。

Progressionでは、ページ遷移の際の表示オブジェクトの管理は主にコマンド内で行うのですが、Progression3とProgression4で書式が異なるので注意が必要です。

//Progression3の場合
new AddChild(progression.container,hoge) 

//Progression4の場合
new AddChild(container,hoge) 

stageへの参照

Flashでstageの幅とか高さを取得したい場合は、以下のようなコードを書きます。

trace("幅 : " + stage.stageWidth);
trace("高さ : " + (stage.stageHeight);

Progressionでは、こんな感じです。

//CastSpriteの場合
trace("幅 : " + CastDocument.stage.stageWidth);
trace("高さ : " + CastDocument.stage.stageHeight);

//SceneObjectの場合
trace("幅 : " + container.stage.stageWidth);
trace("高さ : " + container.stage.stageHeight);

ステージの情報を取得する場合の詳しいことは、カヤックさんのブログでも紹介されています。

使うと便利なクラス

使うと便利なクラスを幾つか紹介させて頂きました。

Loggerクラス

separate

コマンド内でちょっとtraceしたいなって場合、このクラスの存在を知るまでは以下のように記述していました。

//コマンド内でちょっとtrace
addCommand(
    function():void{
        trace("------------------------");
        trace("hoge");
        trace("------------------------");
    }
);

こんな感じにして、出力パネルでtrace結果を見やすくしていました。

しかし、Loggerクラスを使うと、こんなことしなくてOKなんです。

//Loggerクラスを使ってコマンド内でちょっとtrace
addCommand(
    function():void{
        Logger.separate();
        trace("hoge");
        Logger.separate();
    }
);

このように記述しても同じ結果を得ることが出来ます。

br

separateを使うと、出力パネルに改行+区切り線を自動的に入れることが出来るんですが、brを使うと改行のみ入れることが出来ます。

//Loggerクラスを使ってコマンド内でちょっとtrace(改行のみ)
addCommand(
    function():void{
        Logger.br();
        trace("hoge");
        Logger.br();
    }
);

jp.nium.utilsクラス

このパッケージにも便利なクラスがいろいろあります。

今回はその中のArrayUtilクラスについて掘り下げてみます。

intersect

これを使うと、二つの配列を比較し、共通しているものを返してくれます。

var a:Array = ["東京てら子","大阪てら子","福岡てら子"];
var b:Array = ["東京てら子","大阪てら子","福岡てら子"];

trace(ArrayUtil.intersect(a,b));

これを実行すると、東京てら子、大阪てら子、福岡てら子がtraceされます。(共通したものがない場合は、何もtraceされません)

subtract

これを使うと、二つの配列を比較し、要素が同じなら何もしない。異なっている場合は、(二つの配列内で共通している要素を除き)第一引数で指定した配列内の要素が返ってきます。

var a:Array = ["東京てら子","大阪てら子","福岡てら子"];
var b:Array = ["東京てら子","あああああ","いいいいい"];

trace(ArrayUtil.subtract(a,b));

これを実行すると、大阪てら子,福岡てら子がtraceされます。

compress

これを使うと、対象の配列内のnullやundefinedを配列内から破棄し、圧縮した配列を返してくれます。

var a:Array = ["東京てら子",null,undefined,"","大阪てら子","福岡てら子"];

trace(ArrayUtil.compress(a));

これを実行すると、東京てら子、大阪てら子、福岡てら子がtraceされます。

getItemIndex

これを使うと、対象の配列内で、検索したい対象のインデックス値を返してくれます。

var a:Array = ["東京てら子","大阪てら子","福岡てら子"];

trace(ArrayUtil.getItemIndex(a,"東京てら子"));

これを実行すると、0がtraceされます。

validateItems

これを使うと、対象の配列内の要素全てが、指定したクラスとデータ型が一致するかどうかを判断してくれます。

var a:Array = ["東京てら子","大阪てら子","福岡てら子"];

trace(ArrayUtil.validateItems(a,String));

これを実行すると、trueがtraceされます。

equals

これを使うと、比較対象の配列の要素が全て一致するかどうかを判断してくれます。

var a:Array = ["東京てら子","大阪てら子","福岡てら子"];
var b:Array = ["東京てら子","あああああ","いいいいい"];

trace(ArrayUtil.equals(a,b));

これを実行すると、falseがtraceされます。

toArray

これを使うと、対象の配列を新しい配列に再配置してくれます。

var a:Array = ["東京てら子","大阪てら子","福岡てら子"];

trace(ArrayUtil.toArray(a));

これを実行すると、東京てら子、大阪てら子、福岡てら子がtraceされます。

toString

これを使うと、対象の配列のString表現を返してくれます。

var a:Array = ["東京てら子",null,undefined,"",0x00FF00,"大阪てら子","福岡てら子"];

trace(ArrayUtil.toString(a));

これを実行すると、[“東京てら子”, {}, {}, “”, 65280, “大阪てら子”, “福岡てら子”]がtraceされます。

StringUtilのignoreBreak

これは勉強会の最中で「改行タグを全部削除したい場合、何かいい方法はありますか?」という質問があったので、紹介させてもらったヤツです。

ignoreBreakを使うと、文字列内の改行タグを全部削除してくれます。

var s:String = "東京てら子\n大阪てら子\n福岡てら子";

trace(StringUtil.ignoreBreak(s));

これを実行すると、東京てら子、大阪てら子、福岡てら子と改行タグが削除された状態でtraceされます。

他にもいろいろ便利なクラスがあるんですが、また別の機会にでも…

東京てら子 Vol.14 『Google API』


東京てら子 Vol.14 『Google API』

東京てら子Vol.14を、3月27日(日)に開催します。

今回のテーマは『Google API』。Googleさんが提供しているAPIとFlashを絡めて遊んじゃおう! という感じです。

詳細&参加表明はこちらからどうぞ!

Home > Archives > 2011-03

Search
Feeds
Meta

flashDevelopスポンサー

Return to page top