読者です 読者をやめる 読者になる 読者になる

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である。なぜなら、マーカが登録されたからだろう。

FirefoxFirebugでのエラー表示は、

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ミリ秒というのはおおよその数値なので、ほんとは別の方法で解決したいのだか、どうもうまく行っていない。

他に方法があればどなたか教えて欲しい。