2

MarkerManager v3 と Google マップを使用して、多くのマーカーを表示しています。すべてが完璧に機能するようになりましたが、markermanager が表示しているマーカーのみを表示する方法が見つからないようです。ズームで表示されるマーカーの数を返すメソッド getMarkerCount は認識していますが、dragend-event のポイントを含むテーブルを更新するには、ID、タイトルなどのマーカーからの情報が必要です。

私は試した

    google.maps.event.addListener(map, "dragend", function() {
        for(var i = gMarkers.length, bounds = map.getBounds(); i--;) {
            if( bounds.contains(gMarkers[i].getPosition()) ){
                console.log(gMarkers[i].getVisible());
            }
        }
    });

このメソッドは、現在のズーム レベルでは表示されていなくても、すべてのマーカーを返しますか? どうすればこれを達成できるか考えていますか?

より正確には、私のテスト サイトhttp://frankmyhre.dk/mapping/test.phpを参照してください。テーブルには、マップ上の境界内に表示されているマーカー (赤いアイコン) が反映されている必要があります。

4

1 に答える 1

1

私の解決策は「迅速で汚い」と考えています。プラグインを使えばできると思います。

とにかく、結果はあなたが要求したものだと思います。私が示すコードは初期化の中にあります。1 つの追加機能と zoom_changed と dragend の置き換え

google.maps.event.addListener(map, "zoom_changed",function() {
  var zoom = map.getZoom();
  $('#zoom').text(zoom);
  $('#marker_count').text(mgr.getMarkerCount(zoom));
  timer = setTimeout(visibleMarkersInTable, 400);
});
google.maps.event.addListener(map, "dragend", function() {
  timer = setTimeout(visibleMarkersInTable, 400);
});
var timer; 
function visibleMarkersInTable () {
  clearTimeout(timer);  // make sure you don't check, while the user is panning or zooming.; so this blocks a lot of temporary checks
  $('table tbody').empty();
  for (i in gMarkers) {
    var markerVisible = gMarkers[i].map ? true : false;
    if(markerVisible) {
      // mind you, the marker might be on the map, but just outside of the boundaries.
      // so let's check those
      if (map.getBounds().contains(gMarkers[i].getPosition()) ) {
        $('table tbody').append('<tr id="' + gMarkers[i].id + '"><td>' + gMarkers[i].title + '</td><td>' + gMarkers[i].getPosition().lat() + '</td><td>' + gMarkers[i].getPosition().lng() + '</td></tr>');
      }
    }
  }
}

setTimeout の 400 ミリ秒の遅延を自由に変更してください。あなたに合ったものに設定してください。特に何百ものマーカーがある場合。これがどれほど遅くなるかわかりません。

于 2015-07-02T14:27:38.017 に答える