在Google Maps API v3中打开/关闭标记

时间:2010-04-29 00:21:42

标签: api google-maps map toggle google-maps-markers

我无法获取setMap(null);每个人似乎都建议工作的功能。

我认为这可能是我实施标记的方式的问题。

如果有人可以看一看并让我知道如果你看错了我会非常感激。

LINK:http://www.dougglover.com/samples/UOITMap/v2/

请注意:上面的旧链接,不会去任何地方。

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:-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对象在javascript文件顶部设置为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对象。