37

ここにいくつかのポイントがあります:

  1. マップ上にいくつかのマーカーがあり、マップ以外の右側のパネルにそれに関連付けられたレコードがあります。これらは、マーカーのプロパティとして保存される数値IDを介して接続されます。
  2. すべてのマーカーは配列に格納されます。
  3. ユーザーがマップを拡大すると、表示されているマーカーのみに関連付けられているレコードが右側のパネルに表示されます。

では、現在のズームレベルで表示されているすべてのマーカーのリストを取得するにはどうすればよいですか?インターネットで検索しましたが、便利なものが見つかりませんでした。私が達成しようとしていることのいくつかはここで見つけることができます

4

6 に答える 6

58

Google Maps JavaScript API V3 では、次のようなものを使用できます。

let markers
let map
let bounds = map.getBounds()
markers.filter(m => m.isAdded).forEach(m => {
  if (bounds.contains(m.getPosition())) {
    // code for showing your object, associated with current marker
  }
})
于 2011-10-13T22:46:02.073 に答える
26

GMap2.getBounds()境界ボックスを見つけるために使用します。GLatLngBounds.containsLatLng()各マーカーをチェックして、それが表示されているかどうかを確認するために使用します。

于 2010-05-25T23:10:54.847 に答える
23

API V2 が必要だったことは承知していますが、V3 に対する @bruha の応答で見たものを修正する必要がありました。

var markers; // your markers
var map; // your map

for(var i = markers.length, bounds = map.getBounds(); i--;) {
    if( bounds.contains(markers[i].getPosition()) ){
        // code for showing your object
    }
}

このように配列を逆方向に進むと、マーカーの配列が高速に処理されます。さらに、ループに入る前に境界を変数に設定するため、ループを通過するたびにそれを要求する必要はなく、必要な唯一の要求です。 make は、特定のマーカーが境界内にある場合です。

編集:デクリメンターをだましました

編集: map.getBounds() は map.getBounds である必要があります

于 2012-02-01T00:29:34.393 に答える
0

私のコードスニペット

private boolean isAnyMarkerVisible(LatLng ll) {
    if(gMap != null && markersData != null) {
        final LatLngBounds latLongBounds = LatLngBounds.builder().include(ll).build();
        for (Store store : markersData) {
            if (latLongBounds.contains(store.getLatLng())) {
                return true;
            }
        }
    }
    return false;
}
于 2017-02-16T14:04:50.257 に答える