以下にいくつかのポイントを示します。
では、現在のズームレベルで表示されているすべてのマーカーのリストを取得する方法は?インターネットで検索しましたが、有用なものが見つかりませんでした。私が達成しようとしているもののいくつかの種類が見つかりました ここ
GMap2.getBounds()
を使用して、境界ボックスを見つけます。 GLatLngBounds.containsLatLng()
を使用して各マーカーをチェックし、表示されるかどうかを確認します。
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]
}
}
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である必要があります
簡単なコードです。このコードを試してください。
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;
}
私のコードスニペット
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;
}