【问题标题】:Google Maps - get values from location array based on the map's current viewpoint谷歌地图 - 根据地图的当前视点从位置数组中获取值
【发布时间】:2013-03-14 03:04:51
【问题描述】:

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

背景

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

我想:

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

Google 有一个 .contains,所以我猜你可能会将它与类似的东西一起使用

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

但我想知道是否有一种方法可以遍历数组并检查每个位置(经度/纬度)是否直接落在当前视口内

【问题讨论】:

  • 您的具体问题是什么?您是否希望收到关于您提出的点列表的答案,或者您的问题是:是否有办法循环遍历数组并检查每个位置(经度/纬度)是否直接落在当前视口内
  • 是的,理想情况下,如果我可以检查数组中的所有位置,并返回当前视口内的位置

标签: javascript google-maps


【解决方案1】:

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

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

【讨论】:

  • 感谢 geocodezip。我想你错过了一个结束')'但我会尝试一下 - 正如你所说,我可能需要做一个标记。
  • 修复了缺失的“)”。仍未测试。
  • 您可以使用现有的数组,但如果您想对标记进行操作(如果它在视图中),则需要对其进行引用。如果您只需要 id,您可以通过处理现有数组来获得它,您只需为每个条目创建一个 google.maps.LatLng 以在我的答案中的 if 语句中进行测试。
【解决方案2】:

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

  });


});

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多