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

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

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

谢谢

【问题讨论】:

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


【解决方案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;
            }
          }
          

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多