version3で変わったこと
GoogleMapsAPI version3というのがあるらしい。
http://sites.google.com/site/gmapsapi3/developers によると、
2009年 5月 27日、Google I/O イベントにてGoogle Maps API JavaScript版のversion 3が発表されました。 Google Maps API version3は、既にあるGoogle Maps API version 2によく似ています。 しかし、version3 の仕組みの下では多くの変更があり、特にAndoroidベースの携帯やiPhoneのようなブラウザ上で読み込みが早くなるように設計されています。
とのこと。また、
Google Maps version3 は 改良されたMVCフレームワーク を採用しています。 MVCオブジェクト(例:mapオブジェクト)の多くの状態変化は、settersとgetters に詳しく決められた形式で渡されます。 さらにMVCオブジェクトの全ての状態変化は、そのオブジェクトのプロパティが保存され、さらにイベントハンドラは特定の書式も全ての変化を監視します。
ということで、根本から書き直されたものであるということらしい。
使ってみると地図の初期化も非同期に行われているみたい。
なので、地図が初期化されている前提で処理を書いていると、地図の初期化処理と平行して実行されてしまってエラーになる。
tilesloaded イベントを使うと、地図が準備できた段階に処理を行わせることができるけど、地図の画像の読み込み完了毎に発生するので結構な頻度で実行されてしまう。
これを回避する為に処理が完了した時点でremoveListenerしているのだが、
どうなんだろうか、、、。
var gmap = new google.maps.Map(mapElem,{ center: new google.maps.LatLng(35,135), zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP }); var mapinit = google.maps.event.addListener(gmap,'tilesloaded',function(){ // ここになにか処理 google.maps.event.removeListener(mapinit); // 今後この処理を無効化する });