1

http://cm.qfox.nl/の Google Maps V3 API ClusterManager を使用して地図上のマーカーをまとめようとしていますが、元の Web サイトと同じエラーがコードで発生しています - エラーページが初めて読み込まれたとき、または再読み込みされたとき:

Uncaught TypeError: Cannot call method 'fromLatLngToPoint' of undefined ClusterManager_v3.js:586
ClusterManager.latlngToPoint ClusterManager_v3.js:586
ClusterManager._getMarkerBounds ClusterManager_v3.js:645
ClusterManager._cacheMarkerIcon ClusterManager_v3.js:580
ClusterManager.update ClusterManager_v3.js:345
(anonymous function) ClusterManager_v3.js:91

初期ロード後は正常に動作するため、タイミングの問題が原因であると確信しています。たとえば、マップまたはマーカーが使用前に初期化されていないなどです。残念ながら、Javascript は私の最初の言語ではないため、すべてが初期化されるのを待つ方法がわかりません。どんな助けや指針も大歓迎です。Web サイトのソースは、私が使用しているコードとほぼ同じです。

アップデート:

行の変更が見つかった場合:

cm._requestUpdate(50);

cm._requestUpdate(250);

エラーを防止しました。150 に変更すると、エラーが 3/10 回発生しました。これが修正であるかどうかは完全にはわかりませんが、他の誰かがより良い解決策を持っているか、私のことを知りたい場合に備えて、これを投稿したままにしておくかもしれません.

4

1 に答える 1

0

Projectionメソッドを使用するには、初期化する必要があります。マップ"projection_changed"は、作成されるときにイベントをトリガーProjectionします。その後のみ、使用できますmap.getProjection()。したがって、私の提案は、"projection_changed"イベントのリスナーを追加し、ClusterManager呼び出されたときに初期化することです。

google.maps.event.addListenerOnce(map, 'projection_changed', function(){
     var cm = window.cm = new ClusterManager(
        map,
        {
            objClusterIcon: new google.maps.MarkerImage('markers/cluster.png', false, false, false, new google.maps.Size(20,20)),
            objClusterImageSize: new google.maps.Size(20,20)
        }
    );

    // now json contains a list of marker positions. lets add them.
    for (var i = 0; i < json.length; ++i) {

       .....
    }
    cm._requestUpdate(50);
});
于 2012-04-09T19:58:51.833 に答える