Google Maps API v3 - 如何清除叠加层?

Posted

技术标签:

【中文标题】Google Maps API v3 - 如何清除叠加层?【英文标题】:Google Maps API v3 - How to clear overlays? 【发布时间】:2011-02-26 05:55:03 【问题描述】:

在 Google Maps API v2 中,我使用 map.clearOverlays() 删除标记并重新绘制它们。

如何使用 Google Maps API v3 做到这一点?

谢谢

【问题讨论】:

Google Maps API v3: How to remove all markers? 的可能重复项 确实,因为它是链接到已接受答案的帖子。 【参考方案1】:

overlayMapTypes 对象带来了明确的方法:

map.overlayMapTypes.clear()

而 map 是您的 Google 地图对象。

如果您的 API 版本中找不到该方法,您可以求助于clear 的以下来源:

clear = function() 
    for (; this.get("length");) this.pop()
;

【讨论】:

【参考方案2】:

请参阅here 了解有关您可以使用的各种选项的详细信息,但您现在必须遍历标记并单独删除它们。您的代码应如下所示:

var markers = [];

function clearOverlays() 
 while(markers.length)  markers.pop().setMap(null); 
  markers.length = 0;


markers.push(marker);
google.maps.event.addListener(marker,"click",function());

【讨论】:

此答案已被标记为删除,因为它是一个仅链接的答案。您能否扩展此答案,以便它提供问题的答案,而无需读者点击链接的网页?【参考方案3】:

这个怎么样?我不想使用 .setMap(null),因为我不知道再次启动 polyShape 的更好方法。

polyShape = new google.maps.Polygon(
    
        strokeColor     : '#000000',
        strokeOpacity   : 0.3,
        strokeWeight    : 1,
        fillColor       : "#000000",
        fillOpacity     : 0.26,
        geodesic        : true
    );

然后..遍历路径以将其删除。

var path = new google.maps.MVCArray;

/**
 * Delete all points inside Map
 */
function clearMap()

    //clear markers
    for (var i = 0; i < markers.length; i++)
    
        markers[i].setMap(null);

    
    markers = [];

    //clear polygon, still finding more elegant way
    while (polyShape.getPath().length)
    
        path.removeAt(0);
    

【讨论】:

【参考方案4】:

我找到了另一个解决方案,效果很好 它将删除地图上存在的所有叠加层

gmap.overlayMapTypes.setAt( 0, null);

虽然 gmap 是您的地图对象

【讨论】:

【参考方案5】:

这个不错:

http://apitricks.blogspot.com/2010/02/clearoverlays-in-v3.html

链接失效时的文章:

clearOverlays() in V3

API v3 中没有 clearOverlays()。已经提出了一些做法。我认为这是迄今为止最简单的。

在创建时将所有叠加层推送到一个数组中(像往常一样)。以下代码将清除地图和数组:

while(overlays[0])

  overlays.pop().setMap(null);

数组的

pop() 方法删除数组的最后一个元素,并返回该元素。只要数组中有元素,'while' 就会保持这种情况。当 overlays[0] 不再存在时,任务完成,代码将继续。

【讨论】:

非常好的解决方案!在我先将 pop()èd 折线保存到临时对象中之前,我在实现您的函数时遇到了问题: var arrayTemp = overlayArrayPolylineUpload.pop(); arrayTemp.setMap(null);【参考方案6】:

您可以在此处找到 Google 提供的一个很好的示例: http://code.google.com/p/gmaps-samples-v3/source/browse/trunk/clear-all-overlays/clear-all-overlays.html

基本上这个想法是删除

标记 多边形 和折线分开

【讨论】:

【参考方案7】:

您可以查看 Google 地图文档,因为它显示了简单的 deleteOverLays 方法 http://code.google.com/apis/maps/documentation/javascript/overlays.html

// Deletes all markers in the array by removing references to them
function deleteOverlays() 
  if (markersArray) 
    for (i in markersArray) 
      markersArray[i].setMap(null);
    
    markersArray.length = 0;
  

【讨论】:

从地图中移除是隐藏,而不是删除。标记仍然存在,但是您摆脱了保存它们的数组。您必须 setMap(null) 然后将标记本身设置为 null。 code.google.com/apis/maps/documentation/javascript/…

以上是关于Google Maps API v3 - 如何清除叠加层?的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Api v3 - 如何删除集群图标?

Google Maps V3:仅在视口中显示标记 - 清除标记问题

如何更改 Google Maps API V3 中的图标颜色?

Google Maps API v3:如何动态更改标记图标?

Google Maps v3 - 防止 API 加载 Roboto 字体

如何使用 Google Maps API v3 突出显示地址?