Google MapでOverlayBaseを使ってカスタムオーバーレイを作る
Google Mapで,独自のカスタムオーバーレイを作成するにはcom.google.maps.overlays.OverlayBaseを使えばいい。
ただ,OverlayBaseを単にnew・extendsしただけではランタイムエラーが出て使えない。このクラスはJavaでいうところのAbstractクラスのような構造になっているようで,下記のメソッドは最低限実装しなければならないようだ。
・getDefaultPane()
・positionOverlay()
例えば,地図のすぐ上のレイヤーに半透明のオーバーレイを表示するというミニマムなコードはこのようになる。
ただ,OverlayBaseを単にnew・extendsしただけではランタイムエラーが出て使えない。このクラスはJavaでいうところのAbstractクラスのような構造になっているようで,下記のメソッドは最低限実装しなければならないようだ。
・getDefaultPane()
・positionOverlay()
例えば,地図のすぐ上のレイヤーに半透明のオーバーレイを表示するというミニマムなコードはこのようになる。
package { import com.google.maps.MapEvent; import com.google.maps.interfaces.IMap; import com.google.maps.interfaces.IPane; import com.google.maps.overlays.OverlayBase; //カスタムオーバーレイクラス public class CustomOverlay extends OverlayBase { //関連づけられた地図 var map:IMap; //コンストラクタ public function CustomOverlay() { super(); addEventListener(MapEvent.OVERLAY_ADDED, onOverlayAdded); function onOverlayAdded():void { update(); //このオーバーレイ追加と同時に更新処理 } } //更新処理メソッド public function update():void { var w:Number = map.getDisplayObject().width; var h:Number = map.getDisplayObject().height; graphics.clear(); graphics.beginFill(0x000000, 0.5); //半透明の黒で graphics.drawRect(0, 0, w, h); //マップの幅高さの領域を塗る graphics.endFill(); } //必須実装メソッド public override function getDefaultPane(map:IMap):IPane { //後で使うために取っとく this.map = map; //地図のすぐ上のレイヤー(idx=0)にこのオーバーレイのペインを作成 return map.getPaneManager().createPane(0); } //必須実装メソッド public override function positionOverlay(zoomChanged:Boolean):void { //あえて何も実装無し。実装なしにすると,オーバーレイはマップの動きに追随して移動する } } //END class } //END package
コメント
コメントを投稿