以下是一些要点:
那么,如何获取当前缩放级别上所有可见标记的列表?我通过互联网搜索并没有找到有用的东西。我可以找到某种我想要实现的目标here
答案 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;
}