Google地图 - 根据地图的当前视点从位置数组中获取值

时间:2013-03-12 13:39:55

标签: javascript google-maps

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

背景

我有一个位置数组(lat,long,id)。

我想:

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

谷歌有一个.contains,所以我猜你可能会使用像

这样的东西

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

  });


});