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
コメント
コメントを投稿