为什么setMap(null)不起作用google maps api v3?

时间:2012-12-31 08:57:43

标签: google-maps google-maps-api-3 google-maps-markers

我正在使用google maps api 3.9。在app用户可以添加标记或删除标记。当用户点击地图时,将显示Infowindow。用户可以在其中输入名称,lat,long并单击保存图像,如下所示:

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

  point = new google.maps.Marker({
    position: event.latLng
    , map: map
    , icon: 'resource/image/mapIcons/point.png'
    , id: id
    , type:"point"
  });

  type = point.type;
  newPoint = true;
  existingPoint = false;
  markerObj = this;

  inputInfowindow.setContent("<table style='width:92%;' id='inputTable'>" +
                             "<tr> <td>point</td> </tr>" +
                             "<tr> <td><input class='infoInput' type='text' id='name' placeholder='name'/> </td> </tr>" +
                             "<tr> <td><input class='infoInput'type='text' id='lat' placeholder='latitude'/></td> </tr>" +
                             "<tr> <td><input class='infoInput'type='text' id='lon' placeholder='longitude'/></td> </tr>" +
                             "<tr><td><input type='image' src='resource/image/mapIcons/save.png' onclick='save()' class='saveImage' alt='save'/> </td></tr>");

  event1 = event.latLng;
  currentMarker = point;
  inputInfowindow.open(map,point);

});

标记保存在DB中。 当用户对删除按钮的陈词滥调时,将调用以下方法:

function deleteMarker(id,rev) {
  var marker  = markerObj;
  markerObj = undefined;
  var x = confirm("are you sure to delete marker?");
  if(x){
    deleteLocations(id,rev);//removes marker details from DB
    if(marker){
      console.log(marker);
      marker.setMap(null);
    }
  }
}

但是在marker.setMap(null);标记从地图中移除仍然在地图上。我用console.log(标记)检查;标记对象正常,控制台没有错误。经过大量的谷歌搜索,但没有结果。请帮忙。

5 个答案:

答案 0 :(得分:13)

来自文档 -

  

要从地图中移除叠加层,请调用叠加层的setMap()方法,   传递null。请注意,调用此方法不会删除   覆盖;只需从地图中删除叠加层。如果相反你   希望删除叠加层,您应该将其从地图中删除,并且   然后将叠加层本身设置为null。

所以在marker.setMap(null)之后你还应该写marker=null

<强> UPDATE1 -

function deleteMarker(id,rev) {
  var x = confirm("are you sure to delete marker?");
  if(x)
  {
    deleteLocations(id,rev);//removes marker details from DB
    if(markerObj)
    {
       console.log(markerObj);
       markerObj.setMap(null);
       markerObj=null;
    }
  }
}

更新2 -

这是一个有效的简单演示。查看代码并检查代码错误的位置。您的代码中可能存在一些可变范围问题。

WORKING DEMO

答案 1 :(得分:0)

marker.setMap(null)不删除对象,只隐藏它。要删除它,请执行marker = null;

答案 2 :(得分:0)

在地图点击事件中,您将 分配给markerObj。虽然 是指地图对象而非标记对象。

将其更改为

markerObj = point;

它应该按预期工作。

答案 3 :(得分:0)

我有类似的错误,我不确定我的解决方案是否适用于您的情况,但是..我设置了我的代码,以便当我的页面加载时,地图将填充来自我所指示的坐标的任何标记数据库。然后我允许用户向数据库添加更多点,然后将标记添加到用户在地图上的选定位置。

我没有意识到,无论何时在我的数据库中更改或创建坐标,我的代码都会重新添加标记到我地图上的所有坐标。因此,无论何时我创建了一个点,我都是手动向坐标添加标记,我的数据库正在为坐标添加标记。因此,当我认为我的代码被破坏时,真正发生的是我在同一位置删除了两个点中的一个。

所以我不确切知道你是如何从数据库中提取坐标和标记的,但是值得研究。

答案 4 :(得分:0)

我有同样的问题。您应该在markers[index].setMapp(null)之前调用这些方法:

map.setCenter(desMarker[index].getPosition());
desMarker[index].setPosition(null);
在通话后

markers[index].setMapp(null)