グーグルマップ
ちょいとGoogleマップでもやってみようかなぁってことで作ってみました。
こんな感じ。
http://moeten.info/maidcafe/?m=flashmap
せっかくなので、制作において、気づいた点の紹介です。
QRコードが重い
Flex用にQRコードが簡単に作成できるライブラリ「QRコード」があるのですが、なぜか、こちらを使用して動的にQRコードを作成すると、作成するたびにFlashが重くなり、マップのスクロールが遅くなっていったので、PHPなどを利用して、
カスタムウィンドウでリッチなウィンドウを表示
GoogleMapでアイコンをクリックした際に出るウィドウをカスタマイズすることがでます。
ちょっとリッチなウィンドウが作れるので知っておきたい。
指定方法は簡単でDisplayObjectのIDを指定するだけ。
var info:InfoWindowOptions = new InfoWindowOptions({ strokeStyle: { color: 0xff6aef }, fillStyle: { color: 0xffffff, alpha: 0.9 }, title:"title", width: 300, customWindow:myDisplayObject, //←DisplayObjectが指定できる cornerRadius: 12, padding: 10, hasCloseButton: true, hasTail: true, tailWidth: 20, tailHeight: 30, tailOffset: 12, tailAlign: InfoWindowOptions.ALIGN_LEFT, pointOffset: new Point(0, -40), hasShadow: true }); <mx:Canvas id="myDisplayObject"></mx:Canvas>
ただし、キャッシュが効くのか、動的なDisplayObjectを作成した場合、最初に作成したものが表示されるため、今回は見送り。
マーカーのイベントリスナーに引数を追加して個別管理
GoogleMapのアイコンクリックイベントで困るのが、marker.nameやmarker.idプロパティがないため、どのIDのアイコンをクリックしているのかを取得できないこと。
なので、イベントリスナーを追加する際に、識別用に引数を追加して渡す。
marker.addEventListener( MapMouseEvent.CLICK , onMarkerClick( i ) ); private function onMarkerClick( i:int ):Function{ return function ( e:MapMouseEvent ):void{ trace(i); } }
Googleマップの時だけではなく、イベントリスナーに引数を追加して渡したい時に便利なので知っておきたいテクニック。
ArrayCollectionで変数の変化を外部コンポーネントに知らせる
外部コンポーネントを使う際、変数の変化をキャッチするにはArrayではなくArrayCollectionを使う。
//shopWindow.mxml new ArrayCollection([{'shopname' : null}]); trace( dataset.getItemAt(0).shopname );//null //main.mxml shopWindow.dataset.setItemAt({'shopname':"hogehoge"},0); //shopWindow.mxml trace( dataset.getItemAt(0).shopname );//hogehoge
マップにフィルターはかけられない
ちょいとZoomした時にBlurエフェクトをかけようとしたのですが、セキュリティーエラーでうまくエフェクトを利用できませんでした。
やり方が他にもありそうですが、とりあえずは、気をつけておきたい部分。
参考になるページ
Google Maps API for Flash
Google Map を使ってみる。 markerとInfoWindow