如何在当前缩放级别上获取所有可见标记

时间:2010-05-25 16:17:10

标签: google-maps google-maps-markers

以下是一些要点:

  1. 我在地图上有一些标记,并在地图上的右侧面板上有与之关联的记录。它们通过数字ID连接,数字ID存储为标记的属性。
  2. 所有标记都存储在一个数组中。
  3. 当用户放大地图时,右侧面板上应显示仅与可见标记关联的记录。
  4. 那么,如何获取当前缩放级别上所有可见标记的列表?我通过互联网搜索并没有找到有用的东西。我可以找到某种我想要实现的目标here

6 个答案:

答案 0 :(得分:47)

在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]
    }
}

答案 1 :(得分:24)

使用GMap2.getBounds()查找边界框。使用GLatLngBounds.containsLatLng()检查每个标记是否可见。

答案 2 :(得分:19)

我知道你想要API V2,但我必须纠正我在@brhaha对V3的回复中看到的一些内容,以防有人来寻找它:

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
    }
}

以这种方式向后遍历数组更快地通过标记数组,加上我们在进入循环之前将边界设置为变量,因此我们不是每次进行循环时都请求它,而是唯一的请求我们必须做的是,如果特定标记位于边界内。

编辑:骗了我的堕落者

编辑:map.getBounds()应该是map.getBounds

答案 3 :(得分:2)

如果仍然有人需要这个问题的答案,我在Codepen.io上有一个完整的工作模型

可以免费下载并根据需要进行调整。 只需将API密钥更改为您自己的即可。 (它们是免费的)

https://codepen.io/pailwriter/pen/bGEpeRv

这是在视口中获取标记的功能。

function showVisibleMarkers() {
    var bounds = map.getBounds(),
        count = 0;
                                   
    for (var i = 0; i < markers.length; i++) {
        var marker = markers[i],
            infoPanel = $('.info-' + (i+1) ); // array indexes start at zero, but not our class names :)
                                           
        if(bounds.contains(marker.getPosition())===true) {
            infoPanel.show();
            count++;
        }
        else {
            infoPanel.hide();
        }
    }
    
    $('#infos h2 span').html(count);
}

答案 4 :(得分:1)

这是一个简单的代码。试试这段代码。

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;
}

答案 5 :(得分: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;
}