GMakerManagerを使用してのpanTo() or setCenter() and openInfoWindowHtml()
某サイトで、いままでGMap2#addOverlay()で追加していたGMaker(以下:マーカ)をGMakerManagerを使用して登録するようにしてみた。
というのは、GMakerManagerを使用すると表示部周辺(で最少、最大ズーム範囲内)のマーカだけを追加することになるらしく、これは多くのマーカを登録する場合には処理速度の向上、GoogleMapsAPIの負荷軽減などが望めるのだろうと思ったからだ。
そのため、表示範囲外のマーカはまだ登録されておらず、そのマーカを地図外部のリンクなどから表示させ吹き出し表示をする場合、吹き出し表示がエラーになる。
<script type="text/javascript"> //<![CDATA[ .... var theMap = new GMap2(....); var theMaker = new GMaker(....); .... function to(title) { if (theMap) { theMap.panTo(theMaker.getPoint()); theMaker.openInfoWindowHtml(title); } } .... //]]> </script> .... <a href="javascript:to('テスト');">テスト</a> ....
ちなみに表示近辺のものや、一度エラーになったが現在それが表示されている場合、つまり二度目はOKである。なぜなら、マーカが登録されたからだろう。
this.fc is not a function main.js (line 1407) p.prototype.Ja=function(a,b,c){var d=b?[new Ed(null,b)]:null;this.fc(a,d,c)};
となっていた。
http://groups.google.co.jp/group/Google-Maps-API/browse_thread/thread/8857dab0bdec645c
によるとやはり、GMakerManagerが追加処理するまでdelayを追加しておく必要ありと読めるので、以下のように変更した。
<script type="text/javascript"> //<![CDATA[ .... var theMap = new GMap2(....); var theMaker = new GMaker(....); .... function to(title) { if (theMap) { theMap.panTo(theMaker.getPoint()); window.setTimeout(function() { theMaker.openInfoWindowHtml(title); }, 3000); } } .... //]]> </script> .... <a href="javascript:to('テスト');">テスト</a> ...
3000ミリ秒というのはおおよその数値なので、ほんとは別の方法で解決したいのだか、どうもうまく行っていない。
他に方法があればどなたか教えて欲しい。