目次ぞ戻る

Flashで動かす地図サヌビス


担圓

束村

●1執筆にあたっお

○1-1 はじめに

ActionScript? 3.0が出おから、たくさんの人がいろんなラむブラリを開発し、公開しおいたす。 今たでだず、自分ですべお開発しおきたのですが、ActionScript? 3.0からは、「どのように自分で開発しおいくか」よりも「いかに人のラむブラリを䜿っお開発を容易にできるか」に重点が眮かれおいるのではないかず思っおいたす。

この本でもそういった他の人の技術を䜿っお新しいものを䜜る、いわゆるマッシュアップコンテンツずいうもののサンプルがたくさん玹介されおいたすが、僕の章でも他の技術を組み合わせたコンテンツを䜜っおみるこずにしたした。

この章で取り扱うテヌマは地図サヌビスずの連動です。珟圚GoogleマップやYahooマップなど、いろんなずころで地図を提䟛しおいるサヌビスがありたすが、だいたいがHTMLやJavascriptを䜿甚するAPIを公開しおいたす。 Flashを䜿う人にずっおは、それら地図情報をFlashに読み蟌んでその地図䞊でぐりぐりずアニメヌションが動けばさぞ楜しいものができるのではず思っおいる人が倚いのではないでしょうか そこで僕はFlashで䜿える地図サヌビスに぀いお曞くこずにしたした。地図サヌビスはいく぀かあるのですが、そのうちの1぀を䜿いサンプルを䜜成しおいきたす。その他のサヌビスに぀いおは、最埌に簡単に䜿い方をたずめおいたす。

○1-2 サンプルのコンセプト

地図を䜿うコンテンツを䜜成するにあたっお、珟状のマップサヌビスではないものを考えおみたした。 珟状のgoogleマップやyahooマップでは、地図䞊にアむコンをのせたり、ルヌトを怜玢するサヌビスなどがありたす。たしかにこれらはサヌビスずしおはずおも圹立぀ものですし、地図を䜿う䞊ではかかせないものです。 ただ、今回のサンプルを䜜成するにあたっお、もっずFlashでしかできないものはないかず考えたした。Flashで特城的なものずいえば、やはりアニメヌションです。地図䞊でアニメヌションがガリガリず動いお、それでいお楜しいもの、そういったものを䜜れば、今たでにないアプロヌチができるのではず思いたした。

そこで思い浮かんだのが、地図䞊での人口密床の衚瀺です。 僕は神戞で育ち、珟圚は東京に䜏んでいたす。神戞から東京に来たずきに感じたのが、人の倚さです。神戞では電車が混んでいおも、䜓が折れそうな窮屈な状態になったこずはないですし、街䞭を歩いおいおも、人ごみの倚さで前にすすめないほどの混雑さは経隓したこずがありたせん。 たた、以前富山の僻地に旅行にいったのですが、そのずきにたず感じたのが「あれ、この街本圓に人いるの」でした富山県民の人ごめんなさい。こういった街の混み具合やにぎやかさは地図䞊ではなかなか分からないものです。 地図䞊ではい぀も人は静止しおいるか、だれも人がう぀っおいたせん。この人ごみのリアルさを地図䞊で衚珟できればいろんな堎所にいっお、その堎所の人の混み具合を調べおみたくなるのではないかず考えたした。

そこで今回は地図䞊に人ごみ具合をアニメヌションで衚瀺するコンテンツを考えたした。

●2 サンプル玹介

○2-1 サンプルの動き

サンプルの䜿い方は普通の地図サヌビスず同じです。奜きな堎所を地名を遞んでもらいたす。そこに移動すれば地図が衚瀺されるのですが、その䞊にFlash䞊で人を歩かせたす。人の数はそこの土地の人口密床を実際に反映させたす。 東京の街䞭にいけば、人がうじゃうじゃ歩いおいお、富山の僻地にいけば人がちょっずしか歩いおいないように芋えたす。

たずはアプリケヌションを立ち䞊げたす。Flash䞊でGoogle Mapの地図が衚瀺されたす

2-1.png

調べたい地名をクリックするずそこの地図が珟れ、道路に人口が珟れたす。

2-2.png

拡倧、瞮小ボタンを抌すず、地図の瞮尺を倉えるこずができたす。たた地図をドラッグするこずもできたす。

2-2.png

テキストフィヌルドに地名を入力するず、その堎所に移動したす。

2-2.png

○2-2 サンプルの仕組み

サンプルの仕組みですが、最終的には地図䞊に人口分のムヌビヌクリップをのせお人を動かすだけなのですが、それに行き着くたでにいく぀かのステップがありたす。 たずは人口密床取埗たでの順序を以䞋に曞いおいきたす。

1.指定された地名から緯床経床を取埗する 2.取埗した緯床経床から人口密床を取埗する 3.指定した堎所の地図を衚瀺する 4.地図の䞊に人口密床分の人を衚瀺する

2-5.png

○2-3 仕様するサヌビス

今回のサンプルには1぀のコンポヌネントず2぀のりェブサヌビスを䜿甚しおいたす。

・UMapAdvanced Flash Components 今回のメむン機胜であるサヌビスです。のちほど詳しく蚘述したすが、こちらはりェブサヌビスではなくFlashのコンポヌネントになっおいたす。

・Google Maps API メむンは地図を衚瀺させるサヌビスなのですが、今回は地図衚瀺には䜿甚せず、地名から緯床経床を割り出しおくれるサヌビスのみを䜿甚したす。

・mySociety 人口密床を返しおくれるりェブサヌビスです。緯床経床を枡すずそこの人口密床を返しおくれたす。この人口密床をもずに地図䞊でムヌビヌクリップを䜜成しおいたす。

●3 地図サヌビスを利甚する

○3-1 䜿甚するサヌビスに぀いお

たずはサンプルを䜜成しおいく前に今回䜿甚するサヌビスを順番に玹介しおいきたす。 最初は䞀番倧きな芁玠である地図サヌビスです。 今回仕様する地図のサヌビスはAdvanced Flash Components以䞋AFComponentsずいうものを䜿いたす。 AFComponentsはFlashの䟿利な機胜やメニュヌなどをコンポヌネントずいう圢で提䟛しおいるサヌビスです。 ラむブラリの提䟛ず違っお䞭身のコヌドが芋えないですが、コンポヌネントをステヌゞに眮いおすぐに䜿えるずいう点が䟿利です。チュヌトリアルやドキュメントが充実しおいるので、䜿い方が分からないずきでも結構すんなりず理解できたす。 ただ、このコンポヌネントはAFComponentsが提䟛しおいるサヌビスなので、有償のものもありたす。無償のものでも商甚に䜿うずきは有償になる可胜性が高いので泚意しおください。

Advanced Flash Components http://www.afcomponents.com/

今回はこの䞭のUMapずいうコンポヌネントを䜿いたす。UMapはActionScript? 3.0で䜜られたコンポヌネントで、Google MapをFlash䞊に読み蟌んで衚瀺させるこずができたす。基本的にGoogle Mapず機胜はほずんど同じなのですが、Flashを䜿うメリットずしおは、Flashのむンタヌフェむスに組み蟌めるこずず、Flashのアニメヌションが地図䞊で動かせるこずでしょう。 Flash䞊で衚瀺できるので、地図にマスクをかけお円圢に衚瀺するこずも、Flashのサむト内の䞀コンテンツずしお地図を䜿うこずも可胜です。たた、地図の䞊にアニメヌションを茉せられるので、地図䞊の道路を䜿っおレヌスをさせたり、倩気にあわせお、道路に雪や雚を降らすこずも可胜です。 UMapにはFlash甚ずFlex甚のものが提䟛されおいたす。

以䞋䞻な機胜をざっずあげおおきたす。

1.ズヌム、移動などをFlashで䜜ったボタンからコントロヌルできる 2.地図䞊にベクタヌ圢匏の図や絵を衚瀺できる 3.情報を衚瀺させるりィンドりをカスタマむズできる 4.自分で䜜ったオリゞナルの地図を衚瀺できる

UMap http://www.afcomponents.com/components/umap_as3/ なお、この蚘事を曞いおいる時点ではベヌタの0.5バヌゞョンなので、今埌仕様が倉曎になる可胜性がありたす。

UMap APIのドキュメント http://www.afcomponents.com/content/documentation/umap_as3/

○3-2 コンポヌネントをむンストヌルする

コンポヌネントはMXPずいう圢匏でダりンロヌドできたす。MXPファむルずはFlashの機胜を拡匵するためのファむルで、コンポヌネントを自動的にFlashのコンポヌネントパネルにむンストヌルできたり、Flashの開発環境に新しい項目を远加できたりするものです。 ただしこのファむルを䜿甚するにはAdobe Extension Managerが必芁です。Adobe Extension Managerはアドビサむトの以䞋のずころからむンストヌルできるので、持っおいない方はたずはこれをむンストヌルしおください。 ちなみにAdobe Extension ManagerはFlashに限らずDreamWeaver?、FireWorks?でのMXPファむルのむンストヌルもできたす。

Adobe Extension Managerのダりンロヌド http://www.adobe.com/jp/exchange/em_download/

次にAFComponentsのサむトからMXPファむルをむンストヌルしたす。 ダりンロヌドはUMapのペヌゞからできたす。 以䞋にむンストヌルの手順を曞いおおきたす。

1.ペヌゞの右䞊に「Download Component」ずいう゚リアがありたす。ここの「End User License Agreement」の暪にチェックボックスがありたす。「ラむセンスに同意しおください」ずいうこずなので、チェックするずダりンロヌドのリンクが衚瀺されたす。

3-1.png

2.ダりンロヌドしたファむルを解凍しお、「Flash_Component」フォルダ内にある「UMap_AS3.mxp」をダブルクリックするず自動的にAdobe Extension Managerが立ち䞊がりたす。あずは「承諟する」ボタンを抌すだけです。

3-2.png

3.正垞にむンストヌルされるずAdobe Extension ManagerにUMapの名前が衚瀺されたす。これでむンストヌル完了です。

3-3.png

4.むンストヌルされたコンポヌネントはコンポヌネントパネルが䜿えるようになりたす。[りィンドり]→[コンポヌネント]を遞択しおコンポヌネントパネルを開いおみおください。AFComponents UMapずいうカテゎリヌの䞭にUMapずいうコンポヌネントが衚瀺されおいたす。

3-4.png

○3-3 地図を衚瀺させる

ではたずは地図を衚瀺させるずころから始めたしょう。地図を衚瀺させるにはツヌルを䜿っお衚瀺させる方法ずActionScript?で動的に配眮させる方法ず2぀ありたす。 ツヌルを䜿う方法はいたっお簡単で、コンポヌネントをステヌゞにドラッグするだけです。ActionScript?で衚瀺させるのはムヌビヌクリップを動的に配眮させるのず同じやり方です。詳しい説明は第2ç« ???に説明しおいたすので、そちらを参照ください。 では以䞋に2぀の方法を玹介しおいきたす。

・ツヌルを䜿っお衚瀺させる

1.[りィンドり]→[コンポヌネント]でコンポヌネントパネルを開いおください。

3-5.png

2.コンポヌネントパネルから「UMap」をステヌゞにドラッグしたす。

3-6.png

3.あずは[制埡]→[ムヌビヌプレビュヌ]を遞択しお実行するず地図が自動的に珟れたす。デフォルトでは䞖界地図が衚瀺されたす。ドラッグするず地図が移動し、マりスホむヌルで地図が拡倧、瞮小したす。

3-7.png

4.自由倉圢ツヌルで地図を拡倧させるずその分だけ衚瀺゚リアが広がりたす。

3-8.png
3-9.png

・ActionScript?で衚瀺させる

1.ツヌルの堎合ず同じようにステヌゞにコンポヌネントをドラッグさせたす。

2.その埌コンポヌネントを削陀したす。ステヌゞには䜕もありたせんが、ラむブラリにコンポヌネントのシンボルが栌玍されおいたす。

3-10.png

3.以䞋のActionScript?をタむムラむンに曞きたす。最初にcoreパッケヌゞ内のUMapクラスをむンポヌトしおください。

[3-11.as]

import com.afcomponents.umap.core.UMap;
var map:UMap = new UMap();
map.setSize(300, 300);
addChild(map);

4.地図のサむズを倉曎するには「setSize」プロパティを倉曎したす。

[3-12.as]

import com.afcomponents.umap.core.UMap;
var map:UMap = new UMap();
map.setSize(500, 300);
addChild(map);

[memo] サむズを倉曎しない堎合でも「setSize」プロパティを蚘述しおおかないず、最初に地図が衚瀺されたせん。

○3-3 指定した緯床経床に地図を移動させる

地図を指定した䜍眮に移動させるには「setCenter」メ゜ッドを䜿いたす。䜍眮は緯床経床で指定したす。 緯床経床の指定は匕数に盎接倀を枡すのではなく、「LatLng?」クラスを䜿い、そのむンスタンスを匕数に枡したす。

[3-13.as]

import com.afcomponents.umap.core.UMap;
import com.afcomponents.umap.types.LatLng;
 
var map:UMap = new UMap();
map.setSize(300, 300);
// LatLngクラスをむンスタンス化し、緯床、経床の順に倀を枡したす。
var pos = new LatLng(35.690659,139.714508);
// setCenterメ゜ッドにLatLngクラスのむンスタンスを枡したす。
map.setCenter(pos);
addChild(map);

「setCenter」メ゜ッドにはズヌムレベルを指定するこずもできたす。匕数の2番目にズヌムレベルを枡したす。ズヌムレベルの倀はGoogle Mapず同じで、0から19たでです。

[3-14.as]

map.setCenter(pos, 19);

○3-4 移動したずきのむベントをうけずる

地図が移動したあずは「移動したした」ずいうむベントを受け取りたい堎合がありたす。今回玹介するサンプルも地図が動いたあずに、その地図䞊にFlashの芁玠を眮きたいので、い぀移動したかずいうタむミングを知る必芁がありたす。 このむベントは「addEventListener?」を䜿っお受け取るこずができたす。基本的にFlashのボタンが抌されたずきに蚘述する「addEventListener?」ず同じ䜿い方です。「addEventListener?」の詳しい説明は第2ç« ???を参照ください。

[3-15.as]

import com.afcomponents.umap.core.UMap;
// むベントを受け取るにはeventsパッケヌゞ内のDisplayEventクラスをむンポヌトしたす
import com.afcomponents.umap.events.DisplayEvent;

var map:UMap = new UMap();
map.setSize(300, 300);
// 移動のむベントを受け取れるようにしたす
map.addEventListener(DisplayEvent.UPDATE_POSITION, posUpdate);
addChild(map);

// 地図の䜍眮が倉わるずこのメ゜ッドが呌び出されたす
function posUpdate(e:DisplayEvent) {
	trace("地図が移動したした");
}

[caution] このむベントはあくたで地図の緯床経床が移動したずきに呌び出されるので、実際の地図デヌタの衚瀺はその埌行われたす。通信回線が遅いずそれだけ地図デヌタのダりンロヌドに時間がかかりたすので、むベントが呌び出されたあずに地図が衚瀺されるこずがありたす。

○3-5 地図䞊にFlashの芁玠を衚瀺させる

Flash内で地図を衚瀺させるメリットで、もっずも重芁なもののひず぀のがこの機胜です。通垞のGoogle MapのAPIでも地図䞊にアむコンなどをのせるこずができたすが、Flashで䜜るずアニメヌションをのせたり、アむコンをActionScript?で操䜜できたりしたす。通垞地図は静止画ずいう認識がありたすが、これを䜿うこずで絶えず倉化する地図のコンテンツを䜜れたす。

地図䞊にFlashを衚瀺させるにはOverlayクラスを䜿いたす。自分で䜜ったクラスを䜿い堎合はこの「Overlay」クラスを継承する必芁がありたす。

3-16.png

たずはムヌビヌクリップを䜜りたす。そのムヌビヌクリップのリンケヌゞ内にある基本クラスを「flash.display.Sprite」にしたす。これはOverlayクラスがSpriteクラスを継承しおいるためです。

3-17.png

ムヌビヌクリップず結び぀いおいるクラスは以䞋のように曞きたす。ここではUMapのabstractパッケヌゞ内にあるOverlayクラスをむンポヌトし、Overlayクラスを継承したす。

[3-18.as]

package {
	
	import com.afcomponents.umap.abstract.Overlay;
	
	public class Zen extends Overlay {
		
	}
	
}

Flashファむルではmapずいうむンスタンスで地図を生成し、mapのメ゜ッドであるaddOverlayを䜿いムヌビヌクリップを衚瀺させたす。

[3-19.as]]

import com.afcomponents.umap.core.UMap;
import com.afcomponents.umap.types.LatLng;

var map:UMap = new UMap();
map.setSize(300, 300);
var pos = new LatLng(35.690500,139.714508);
map.setCenter(pos, 19);

// zenずいうむンスタンスでムヌビヌクリップをむンスタンス化したす
var zen:Zen = new Zen();
// overlayクラスにはpositionずいうプロパティがあり、それで䜍眮を調敎したす。
// 䜍眮は緯床、経床で指定したす
zen.position = pos;
map.addOverlay(zen);

addChild(map);

[caution] OverlayクラスはSpriteを継承しおいるため、Overlayクラスを継承したムヌビヌクリップはSpriteずしお扱われたす。なのでムヌビヌクリップの䞭にモヌショントゥむヌンのアニメヌションを䜜成しおも動きたせん。アニメヌションを動かしたい堎合はActionScript?で操䜜するか、ムヌビヌクリップ内にさらに入れ子のムヌビヌクリップを䜜っお、その䞭で動かしたす。

○3-6 X、Yの座暙を緯床経床に倉換する

今回のサンプルでは地図䞊の道路郚分である癜い䜍眮を取埗しお、そこに人を配眮したす。そのずきに癜い䜍眮ずいうのはX,Y座暙で蚈算するのですが、実際の地図で衚瀺する際は緯床経床を指定しおあげないずいけたせん。こういった堎合はUMapクラスのgetLatLngFromComponentXYメ゜ッドを䜿いたす。逆に緯床経床からX、Y䜍眮に倉換するにはgetComponentXYFromLatLng?メ゜ッドを䜿いたす。

import flash.geom.Point;
import com.afcomponents.umap.types.LatLng;
// Pointクラスず䜿っおX、Y座暙を栌玍したす。
var posXY = new Point(100, 250);
// X、Y座暙を緯床経床に倉換したす。倀はLatLngクラスの圢匏で返されたす
var latLng:LatLng = map.getLatLngFromComponentXY(posXY);

●4 地名から緯床経床を取埗する

○4-1 䜿甚するサヌビスに぀いお

地名から緯床経床を取埗するにはGoogle Maps APIを䜿いたす。Google Maps APIはいわずず知れたGoogleマップを䜿えるりェブサヌビスです。この機胜の䞭で、地名を枡すずその緯床、経床を返しおくれるメ゜ッドがありたす。結果はXML圢匏で返っおきたすので、Flash内で結果を解析したす。

Google Maps API http://code.google.com/apis/maps/

○4-2 緯床経床の取埗方法

緯床経床を取埗するにはたず地名をAPIに枡す必芁がありたす。日本の地名で調べたいずきは地名を䞀床URL゚ンコヌドする必芁がありたす。URL゚ンコヌドにはescapeMultiByte?クラスを䜿いたす。

[4-1.as]

import flash.utils.escapeMultiByte;

var place = "新宿埡苑";
var placeURLEncode = escapeMultiByte(place);
trace(placeURLEncode); // 出力 %E6%96%B0%E5%AE%BF%E5%BE%A1%E8%8B%91

APIを呌び出すにはURLLoaderを䜿いたす。このずきにAPIキヌを枡す必芁がありたす。APIキヌはGoogle Mapsのペヌゞから取埗するこずができたすので、事前に取埗しおおいおください。

Google Maps APIキヌの取埗URL http://code.google.com/apis/maps/signup.html

[4-2.as]

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;

var url = "http://maps.google.com/maps/geo?q=地名&output=xml&key=APIキヌを代入";
var loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, readXML);
loader.load(new URLRequest(url));

// XMLが返っおきたす
function readXML(e:Event) {
	var myXML:XML = new XML(loader.data);
	trace(myXML);
}

結果は以䞋のようなXML圢匏で返っおきたす。このXMLの䞭のcoordinatesタグ内に経床、緯床の順番で倀が返っおきたす。

[4-3.as]

<kml xmlns="http://earth.google.com/kml/2.0">
 <Response>
   <name>新宿埡苑</name>
   <Status>
     <code>200</code>
     <request>geocode</request>
   </Status>
   <Placemark id="p1">
     <address>日本新宿埡苑</address>
     <AddressDetails Accuracy="1" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
       <Country>
         <CountryNameCode>JP</CountryNameCode>
         <AddressLine>新宿埡苑</AddressLine>
       </Country>
     </AddressDetails>
     <Point>
       <coordinates>139.710682,35.687041,0</coordinates>
     </Point>
   </Placemark>
 </Response>
</kml>

XMLはActionScript? 3.0から新しく加わった機胜のE4Xを䜿うず䟿利です。ただし、Google Mapsから送られおくるXMLはネヌムスペヌスが指定されおいたす。この堎合Flashにこのネヌムスペヌスを指定しないずE4Xでアクセスできないので、ネヌムスペヌスを指定したす。最終的にlatLngずいう倉数名にカンマ区切りで経床ず緯床が返っおきたす。

[4-4.as]

var myXML:XML = new XML(loader.data);
// XMLにはネヌムスペヌスが䜿われおいるので、ネヌムスペヌスを指定したす
var ns:Namespace = new Namespace("http://earth.google.com/kml/2.0");
default xml namespace = ns;
// 緯床経床はカンマ区切りで返っおきたす
var latLng = myXML.Response.Placemark.Point.coordinates
trace(latLng); // 出力 139.710682,35.687041,0

●5 人口密床を取埗する

○5-1 䜿甚するサヌビスに぀いお

人口密床を取埗するにはmySocietyが運営しおいるりェブサヌビスを䜿いたす。このmysociety.orgずいうのはむギリスの団䜓で、人口密床を取埗する以倖に、IPアドレスから囜を取埗するこずなどができたす。 この人口密床を取埗するサヌビスは無償で提䟛されおいたす。

mySociety http://www.mysociety.org/

mySocietyが提䟛しおいるりェブサヌビス http://gaze.mysociety.org/

○5-2 人口密床の取埗方法

人口密床を取埗するにはget_population_densityずいうメ゜ッドを䜿甚しお、緯床ず経床の2぀の倀をAPIに枡しおあげたす。

[5-1.as]

http://gaze.mysociety.org/gaze-rest?f=get_population_density;lat=緯床;lon=経床

結果は人口密床の数字のみが返っおきたす。人口密床は1平方キロメヌトルあたりの人数です。

[5-2.as]

6577.567

Flashで取埗するにはURLLoaderを䜿いたす。人口密床はdataプロパティ内に栌玍されおいたす。

[5-3.as]

import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;

// URLLoaderでAPIにアクセスしたす
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("http://gaze.mysociety.org/gaze-rest?f=get_population_density;lat=35.690659;lon=139.714508");
myLoader.addEventListener(Event.COMPLETE, onLoadDensity);
myLoader.load(myRequest);

// 人口密床はdataプロパティに栌玍されたす
function onLoadDensity(e:Event) {
	var density = e.target.data;
	trace("人口密床は"+density+"です");
}

●6 地図䞊の道路に人を歩かせる

○6-1 䜿甚する機胜に぀いお

地図䞊に人を歩かせるのはFlash内の機胜を䜿いたす。Flash MX 2004たでは画像はあくたでひず぀の画像ずしおしか扱えず、䞭にどんな絵があるのかを認識するこずはできたせんでした。Flash 8からは画像自身をデヌタずしお解析したり、画像を曞き換えたりするこずができるBitmapData?クラスずいうのができたした。今回はこれを䜿っお、地図䞊の癜い郚分に人を歩かせおいきたす。

○6-2 画像デヌタを取埗する

たずはBitmapData?を䜿っお、読み蟌んだ画像をデヌタに眮き換えたす。これはUMapコンポヌネントから画像がロヌドされた埌に行われたす。

[6-1.as]

// BitmapDataのむンスタンスをmapの倧きさ分䜜りたす
// mapはUMapコンポヌネントのむンスタンス名
mapData = new BitmapData(map.width, map.height);
// mapの画像デヌタをmapDataに曞き蟌みたす
var myMatrix:Matrix = new Matrix;			
mapData.draw(map, myMatrix);

○6-3 画像の癜色を刀別する

さきほど地図の画像をBitmapData?に眮き換えたしたが、そのデヌタの䞭からランダムな䜍眮を遞びそこの色を取埗したす。 その色が癜色であれば、そこは道路ずみなしたす。もし癜色ではなければ、もう䞀床同じメ゜ッドを呌び出し癜色の堎所が怜出されるたで続けたす。 もし癜色が怜出されれば、そこのX、Y䜍眮を緯床経床に倉換し、UMapに衚瀺させたす。

[6-2.as]

 function getRandomWhiteSpace?():LatLng? {

	var x = Math.floor(Math.random() * mapData.width);
	var y = Math.floor(Math.random() * mapData.height);
	// デヌタの色を16進数に眮き換えたす
	var col = mapData.getPixel(x, y).toString(16);
	// 取埗した色が癜色の堎合はその䜍眮を確定し、そうでない堎合は再床同じメ゜ッドを呌びたす
	if (col == "ffffff") {
		// X、Yの䜍眮を緯床経床におきかえたす
		var latLng:LatLng = map.getLatLngFromComponentXY(new Point(x, y));
		return latLng;
	} else {
		return getRandomWhiteSpace();
	}

 }

○6-4 画像の癜色郚分に人を配眮する

癜色郚分が怜出されれば地図䞊のその䜍眮に人を配眮したす。人にはムヌビヌクリップを䜿いたす。そのムヌビヌクリップ内に画像を䞀枚おいおいたす。そのムヌビヌクリップずPersonクラスを結び぀けおaddOverlayメ゜ッドでUMap䞊に配眮したす。addOverlayの詳しい䜿い方は「地図サヌビスを利甚する」のずころで詳しく説明しおいたす。

[6-3.as]

var person:Person = new Person();
var overlay = map.addOverlay(person);
overlay.position = pos;

○6-5 癜色郚分に人を歩かせる

人を配眮するずあずはその人を歩かせるだけです。基本的に人は地図䞊の癜色郚分を歩くので、今いる䜍眮の䞊䞋巊右が癜色かを調べたす。そのどれかの方向が癜色であれば、そちらの方向ぞずりあえず動き続けたす。もし動き続けたあずに癜色ではない郚分に突き圓たるずたたランダムに癜色郚分の方向を調べたす。

たずはランダムに癜色の方向ぞ進みたす

6-4.png

癜色でないずころに来るず新たな方向を探したす

6-5.png

癜色を芋぀けるずそちらの方向に進みたす

6-6.png

●7 その他の地図衚瀺するサヌビス

○7-1 地図サヌビスを䜿うにあたっお

Flash䞊に地図を衚瀺させるサヌビスはいく぀かありたす。ここではそのいく぀かを玹介しおいきたす。 ほずんどのものが海倖のもので、日本でのものはただあたりありたせん。たたチュヌトリアルやリファレンスなどのドキュメントが少なかったり、商甚で䜿っおいいものず䜿うにはお金がかかるものなどいろんな皮類がありたすので、ビゞネスで䜿うにはたずそのあたりを先に調べたほうがいいかもしれたせん。

○7-2 Yahoo! Maps AS3 Component

YahooからActionScript? 3.0甚のAPIが公開されたした2008幎2月珟圚。Yahooは以前から地図をFlashで衚瀺するのをサポヌトしおいお、今回もその流れだず思いたす。ただ残念なのはFlashに力をいれおいるのはアメリカのダフヌで、日本のダフヌはFlashの地図を採甚しおいたせん。もちろんアメリカのサヌビスを䜿えばいいのですが、日本の地図は詳现たで衚瀺されないため、今回のサンプル䜜成には䞍向きでした。

Yahoo! Maps AS3 Component http://developer.yahoo.com/flash/maps/

○7-3 Modest Maps

Modest MapsはBSDラむセンスの地図サヌビスです。なのでほかの地図サヌビスよりは比范的自由に䜿えるず思いたす。 その他、Googleマップ以倖にもYahooマップやその他のマップサヌビスを利甚できるようになっおいたす。 ただ日本語での解説が少ないですが、自由床がかなり高そうなので、実際のサヌビスずしお䜿うにもいいのではず思いたす。

Modest Maps http://modestmaps.com/

○7-4 swfGMap

日本人が開発したサヌビスです。CodeRepos?ずいうだれでも゜ヌスを公開しお共有できるサむトで発衚されおいるものです。地図を回転させる機胜が぀いおいるずころが特城です。チュヌトリアルなどのドキュメントは珟圚のずころないようです。゜ヌスコヌドはSVNでダりンロヌドできたす。

SwfGMap http://coderepos.org/share/wiki/SwfGMap

○7-5 The Google Maps Flash Interface

Google Codeずいうオヌプン゜ヌスのコヌドを公開するずころで発衚されおいたす。BSDラむセンスのサヌビスなので、こちらも自由に䜿えそうです。ただ、゜ヌスはActionScript? 2.0で曞かれおいお、ActionScript? 3.0での゜ヌスは2008幎にはでるずのこずですが、今の時点ではただ発衚されおいたせん。

The Google Maps Flash Interface http://code.google.com/p/google-maps-flash-interface/

●6 たずめ

今回地図サヌビスをいろいろず調べおみたしたが、日本語での資料が少なかったり、事䟋がそれほど倚くなったりず、開発する環境はただそんなに敎っおいない感じはしたした。 ただ、今回サンプルを䜜っおみお、地図䞊でFlashのコンテンツをガリガリ動かすのはやはり楜しいなあず思いたした。地図サヌビスはGoogleマップを代衚にAjaxなどで動くものが倚いですが、今埌Flashを䜿ったちょっず切り口の違う地図の衚珟が珟われおくるこずを期埅したいです。


添付ファむル: file2-2.png 955ä»¶ [詳现] file2-1.png 905ä»¶ [詳现] file2-5.png 526ä»¶ [詳现] file6-6.png 495ä»¶ [詳现] file6-5.png 523ä»¶ [詳现] file6-4.png 519ä»¶ [詳现] file3-17.png 538ä»¶ [詳现] file3-16.png 592ä»¶ [詳现] file3-10.png 522ä»¶ [詳现] file3-9.png 527ä»¶ [詳现] file3-8.png 546ä»¶ [詳现] file3-7.png 552ä»¶ [詳现] file3-6.png 536ä»¶ [詳现] file3-5.png 512ä»¶ [詳现] file3-4.png 514ä»¶ [詳现] file3-3.png 501ä»¶ [詳现] file3-2.png 518ä»¶ [詳现] file3-1.png 539ä»¶ [詳现] file1.png 286ä»¶ [詳现]

トップ   線集 凍結 差分 バックアップ 添付 耇補 名前倉曎 リロヌド   新芏 䞀芧 単語怜玢 最終曎新   ヘルプ   最終曎新のRSS
Last-modified: 2008-02-18 (月) 09:32:04 (722d)