イナヅマTVログ

Flex, Google Maps API for Flash で作った地図が表示されない!大変だぁ〜

| 0件のコメント

Flash Builder 4 で Google Maps API for Flashで作ったGoogle Mapが表示されない、表示されるまでにとても時間がかかるトラブルに遭遇。
AIR アプリケーションを作ろうとしています。

【制作環境】
Flex SDK 4.5.0.17689
Google Maps API for Flash 1.20 (map_flex_1_20.swc)

表示される
UIComponentに直接addChildすると表示されます。

private function initApplecation():void
{
	var uic:UIComponent; = new UIComponent();
	addElement(_uic);
	var map:Map = makeMap();
	uic.addChild(map);
}
private function makeMap():Map
{
	var map:Map = _map = new Map();
	map.language = 'ja';
	map.key = "YOUR MAP KEY";
	map.url = "YOUR DOMAIN";
	map.sensor = 'false';
	map.setSize(new Point(600, 300));
	map.addEventListener(MapEvent.MAP_READY, onReady);
	map.addEventListener(MapEvent.MAP_INITIALIZE_FAILED, onFaile);
	return map;
}
private function onFaile(event:MapEvent):void
{
	trace(event);
}
private function onReady(event:MapEvent):void
{
	trace(event);
}

UIComponentにDisplayObjectContainer(MovieClipやSprite)をaddChildしてそれにMapをaddChildすると表示できません。

表示できない
MovieClipへaddChild

private function initApplecation():void
{
	var uic:UIComponent; = new UIComponent();
	addElement(_uic);
	var map:Map = makeMap();
 
	var mc:MovieClip = new MovieClip();
	uic.addChild(mc);
	mc.addChild(map)
}

表示できない
SpriteへaddChild

private function initApplecation():void
{
	var uic:UIComponent; = new UIComponent();
	addElement(_uic);
	var map:Map = makeMap();
 
	var sp:Sprite =  new Sprite();
	uic.addChild(sp);
	sp.addChild(map);
}

Google のサンプルコード例です。

<maps:Map xmlns:maps="com.google.maps.*" id="map" mapevent_mapready="onMapReady(event)" width="100%" height="100%" 
    url="http://code.google.com/apis/maps/" key="your_api_key"/>

以下のように解説されています。

簡単な例ですが、次の点に注意してください:

  1. 最初に <mx:Application> を宣言し、Flex アプリケーションに必要なコードのすべてを収容します。この <mx:Application> オブジェクト内で、xm 名前空間を宣言し、標準の Flex コンポーネントを参照します。
  2. Map オブジェクトを <mx:Application> の子として宣言し、maps 名前空間を定義して com.google.maps.* からコードを参照します。id、mapevent_mapready ハンドラ、API の key などのパラメータも定義します。これらのパラメータについては後で説明します
  3. 子の <mx:Script> オブジェクト内で ActionScript コードを定義します。
  4. その ActionScript コードで、mapevent_mapready イベントの受け取り時に地図を中心に配置します。

なにかこちらのやり方が間違っているのかもしれません。
MXMLには馴染めないせいもあって、宣言だけしたあとは全てActionScript(Class)へ記述する制作手法をとっているのですが、それがまずいのかもしれません。

ちなみにサブウインドウにも表示できませんでした。

private function initApplecation():void
{
	var map:Map = makeMap();
 
	var window:NativeWindow =  new makeWindow();
	window.stage.addChild(map);
}
private function makeWindow():NativeWindow
{
	var option:NativeWindowInitOptions = new NativeWindowInitOptions();
	option.resizable = false;
	option.systemChrome = NativeWindowSystemChrome.NONE;
	option.transparent = false;
	option.type = NativeWindowType.LIGHTWEIGHT;
 
	 var window:NativeWindow = new NativeWindow(option);
	window.width = 600;
	window.height = 300;
	window.x = 0;
	window.y = 0;
	window.alwaysInFront = true;
 
	window.activate();
	return window;
}

*表示されない場合も MapEvent.MAP_READY は発生します。
コンソールには Google Maps API for Flash のログが表示されています。

コメントを残す

必須欄は * がついています


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください