0

编辑: 问题=“有没有办法循环遍历数组并检查每个位置(长/纬度)是否直接落在当前视口内”(未能在视口内获取所有标记)

背景

我有一系列位置(纬度、经度、id)。

我想要:

  • 在 Google 地图上,使用位置数组来显示标记。
  • 用户可以滚动/缩放地图。
  • 在地图下方有一个按钮,因此当用户决定一个区域时,他可以单击该按钮,代码将返回包含在视口/地图边界内的 id(来自位置数组)

谷歌有一个 .contains ,所以我想你可能会使用类似的东西

map.getBounds().contains并以某种方式引用每个 marker.getPosition()

但我想知道是否有办法循环遍历数组并检查每个位置(长/纬度)是否直接落在当前视口内

4

2 回答 2

2

你的意思是这样的(未经测试),地图是 google.maps.Map 对象,需要在范围内。标记数组是标记数组。

for (var i=0; i< markersArray.length; i++) {
   if (map.getBounds().contains(markersArray[i].getPosition())) {
      // the marker is in view
   } else {
      // the marker is not in view
   } 
}
于 2013-03-12T13:59:53.247 回答
0

http://jsfiddle.net/UA2g2/1/

感谢 geocodezip,你给了我关于如何通过遍历数组来解决它的想法。我不知道这是否是最有效的方法,但是我整理了一些似乎可以满足我要求的代码-如果您检查上面的 jsfiddle 并查看控制台,您可以看到它记录了视口中的时间和点.

$(document).ready(function(){

  var myOptions = {
  center: new google.maps.LatLng(51, -2),
  zoom: 9,
  mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  var storeArray = new Array(["51.38254", "-2.362804", "ID1"], ["51.235249", "-2.297804","ID2"], ["51.086126", "-2.910767","ID3"]);

  google.maps.event.addListener(map, 'idle', function() {

      for (i = 0; i < storeArray.length; i++) {  
            marker = new google.maps.Marker({
            position: new google.maps.LatLng(storeArray[i][0], storeArray[i][1]),
            map: map
         });
      }

      for (var i=0; i<storeArray.length; i++) {
          if (map.getBounds().contains(new google.maps.LatLng(storeArray[i][0], storeArray[i][1]))) {
              console.log("marker: " + storeArray[i][2]);
            }
        } 

  });


});
于 2013-03-13T19:04:51.733 回答