web-dev-qa-db-ja.com

現在のズームレベルですべての表示マーカーを取得する方法

以下にいくつかのポイントを示します。

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

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

31
nefo_x

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

25
Wai Yip Tung

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

var markers; // your markers
var map; // your map
for (var i=0; i<markers.length; i++){
    if( map.getBounds().contains(markers[i].getPosition()) ){
        // code for showing your object, associated with markers[i]
    }
}
48
bruha

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である必要があります

20
borbulon

簡単なコードです。このコードを試してください。

private boolean CheckVisibility(Marker marker)
{
    if(googleMap != null)
    {
        //This is the current user-viewable region of the map
        LatLngBounds latLongBounds = googleMap.getProjection().getVisibleRegion().latLngBounds;

            if(latLongBounds.contains(marker.getPosition()))
                   //If the item is within the the bounds of the screen
                  return true;
            else
                  //If the marker is off screen
                  return false;
    }
    return false;
}
1
Jignesh Goyani

私のコードスニペット

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;
}
0
Lukas Hanacek