在Google Maps API v3中切换标记的开/关状态

3
我在使用setMap(null)函数时遇到了麻烦,这个函数似乎是大家推荐的。我认为可能是我实现标记的方式有问题。如果有人能看一下并让我知道是否有问题,我将不胜感激。
链接:http://www.dougglover.com/samples/UOITMap/v2/ 请注意:上面的旧链接已经失效。
2个回答

15

不要使用setMap(null)来切换地图上的标记!因此,API提供了setVisible方法,这是执行该任务的适当方法。


-2
基本问题在于,如果您想让它工作,您必须确定markersTest对象应该包含什么。您似乎无法决定markersTest中的元素是标记还是数组,这些数组告诉您标记将放置在哪里。
从您的JavaScript文件中引用,以下是在选中/清除复选框时执行的两个函数:
15  function addTestMarkers(){
16      for(var i in markersTest) {
17          var location = new google.maps.LatLng(markersTest[i][1], markersTest[i][2]);
18          marker = new google.maps.Marker({
19              position: location,
20              map: map
21          });
22      }
23  }
24  
25  // Removes the overlays from the map, but keeps them in the array
26  function clearOverlays() {
27      if (markersTest) {
28          for (i in markersTest) {
29              markersTest[i].setMap(null);
30          }
31      }
32  }

为了使addTestMarkers正常工作,markersTest对象需要保存标记应该放置的位置的描述。为了使clearOverlays正常工作,markersTest对象需要保存标记。
这是我的建议:将markersTest对象更改为markerDestinations,并在javascript文件的顶部初始化markersTest,如下所示:
markersTest = {};

然后,修改addTestMarkers为:

function addTestMarkers() {
    for(var i in markerDestinations) {
        var location = new google.maps.LatLng(markersDestinations[i][1], markersDestinations[i][2]);
        markersTest[i] = new google.maps.Marker({
            position: location,
            map: map
        });
    }
}

关键变化是使addTestMarkers实际将标记放入markersTest对象中。

好的,所以不要像初始化对象一样初始化数组,使用我的数组创建用于显示目的的对象属性,如果我正确理解了你的意思。我会采纳你的建议并研究它。说实话,我这周(星期一)才开始看API,尽管遇到了一些难题,但我觉得我已经很好地适应了新版本,而不是选择当前更完整的版本2。总之,再次感谢,我会按照你的建议来改变地图。 - Douglas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接