FLASHでGoogleMapを表示する

今回は,GoogleMapをFLASHで表示する方法を載せていきたいと思います。
と,意気込んで色々調べていたら,

Google Maps API for Flashがどうやら廃止になってしまうようです。
だいぶ前に発表があったんですね...全然知りませんでした。
後3年間ぐらいはサポートが入るようなので,今すぐってことでは無いようですが...。

Google側はなんやかんや言っていて,
JavaScriptの Google Maps API v3 の利用を推奨するとのことだそうです。

いきなりのこれで少しやる気が削がれてしまいましたが,一応コードを載せておきます。

ライブラリ利用なのでコード自体はさほど難しくありませんが,
いつもよりコメントを多めに入れました。自分が理解するためです。

まずはじめにAPIキーの取得と環境設定が必要です。

「APIキーの取得」
1. http://code.google.com/intl/ja/apis/maps/signup.htmlのページ下部より取得
2. 次ページ上部にKeyが記載されています。

「環境設定」
1. http://maps.googleapis.com/maps/flash/release/sdk.zipをDL(直リンクです)

2. zipファイルを解凍後,libフォルダ内の「map_flex_1_20.swc」を
C:\Program Files\Adobe\Adobe Flash CS3\ja\Configuration\Componentsに「Google」フォルダを作成して,追加する。

3. FLASHを起動させ,「ウインドウ」→「コンポーネント」パネルを開き,GoogleMapsLibraryが追加されていることを確認する。

4. 新規flaファイルを作成し,ステージにGoogleMapsLibraryをドラッグ。ライブラリにGoogleMapsLibraryが追加される。

5. 設定終了。(ステージ上のボックスは消去してもよい。)

package {
import flash.display.*;
import flash.geom.Point;

import com.google.maps.LatLng;
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapMouseEvent;
import com.google.maps.MapType;
import com.google.maps.controls.*;
import com.google.maps.overlays.Marker;
import com.google.maps.overlays.MarkerOptions;
import com.google.maps.InfoWindowOptions;

public class Main extends Sprite {

//API_KEYの設定
private const API_KEY:String ="取得したキー";

private var _map:Map;

public function Main() {
// constructor code

//google maps api for flashライブラリの基本,Mapクラス
_map = new Map();

//keyプロパティに自分のAPI_KEYを設定
_map.key = API_KEY;

//GPS機能の有無
_map.sensor = "false";

//setSizeで地図の大きさを指定
_map.setSize(new Point(stage.stageWidth, stage.stageHeight));

//MapEvent
_map.addEventListener(MapEvent.MAP_READY,MapReady);
addChild(_map);
}

//地図のパラメータ設定
private function MapReady(e:MapEvent):void{
//setCenter(緯度経度,ズーム,地図のタイプ)で表示する地図の設定をする
_map.setCenter(new LatLng(35.658517,139.701334),15,MapType.NORMAL_MAP_TYPE);
setControls();
//地図をクリックしたときのイベントを追加
_map.addEventListener(MapMouseEvent.CLICK, MapClick);
}

//地図をクリックしたときのイベント
private function MapClick(e:MapMouseEvent):void{
//クリックした場所の緯度経度を取得
var latlng:LatLng = e.latLng;
//マーカーの生成
var marker:Marker = new Marker(latlng, new MarkerOptions({fillStyle: {color: 0x999999}}));
_map.addOverlay(marker);
//マーカークリックとダブルクリック時のイベント
marker.addEventListener(MapMouseEvent.CLICK, MarkerClick);
marker.addEventListener(MapMouseEvent.DOUBLE_CLICK, MarkerDoubleClick);
}

//マーカーをクリックしたときのイベント
private function MarkerClick(e:MapMouseEvent):void{
//クリックしたターゲットを変数に入れる
var marker:Marker = e.currentTarget as Marker;
//getLatLngメソッドでターゲットの経度緯度を取得して,変数に入れる。
var latlng:LatLng = marker.getLatLng();
//InfoWindowOptionsのcontentプロパティでウインドウに緯度経度を表示
marker.openInfoWindow(new InfoWindowOptions
({content:"緯度:" + latlng.lat() + "\n" + "経度:" + latlng.lng()}));  //"\n"で改行
}

//マーカーをダブルクリックしたときのイベント
private function MarkerDoubleClick(e:MapMouseEvent):void{

var marker:Marker = e.currentTarget as Marker;
//マーカーのイベント削除
marker.removeEventListener(MapMouseEvent.CLICK, MarkerClick);
marker.removeEventListener(MapMouseEvent.DOUBLE_CLICK, MarkerDoubleClick);
//ウインドウを閉じる
marker.closeInfoWindow();
//マーカーを消す
_map.removeOverlay(marker);
}

//コントロールの追加
private function setControls():void{
//パン
_map.addControl(new PositionControl());
//ズーム
_map.addControl(new ZoomControl());
//マップタイプ
_map.addControl(new MapTypeControl());
//スケール表示
_map.addControl(new ScaleControl());
//全体図表示
_map.addControl(new OverviewMapControl());
}

}
}

 

本当はジオコーディングとか3DMapとかも試そうかと思ったんですが,
Google Maps API for Flash廃止とか言われると,モチベーションが..。
なので今回はここまで。