我想在街景中隐藏地图标记.(谷歌地图v3)



当用户将小黄人拖到屏幕上时,它将转换为全屏街道视图。这很好。然而,它也在屏幕上乱丢了我的地图标记。这太糟糕了。

对我来说,解决这个问题的困难方法是循环浏览地图上的每一个可能的标记,存储在街景开始之前可见的标记,然后在街景完成后恢复它们。但是我在API文档中找不到街道视图启动事件。

更好更简单的解决方案是设置一些选项,比如"在街景中不要显示我的标记"

编辑:设法找到了一种监控街景状态的方法。如何在谷歌地图API v3 中检测进出街景

然而,我仍然想知道是否有办法。。。在街景中不显示标记。

最终编辑:我包括"解决方案"。这是我最后写的一个简化版本,因为每个层都涉及整个应用程序中的各个模块,所以它们并不像图中那样简单处理。最终解决方案:

// Add listener for when we go into street view.
  google.maps.event.addListener(map.getStreetView(), 'visible_changed', function() {
    var setAllMap = function (mapObjects, state) {
      for (var i = 0, len = mapObjects.length; i < len; i++) {
        mapObjects[i].setMap(state);
      }
    };
    // If street view was just activated
    if (this.getVisible()) {
      // hide everything
      setAllMap(LayerOne, null);
      setAllMap(LayerTwo, null);
      setAllMap(LayerThree, null);
    // If we're leaving street view
    } else {
      // show the marker layers that were on
      setAllMap(LayerTwo, true);
      setAllMap(LayerThree, true);
      // If visibility state was true
      if (LayerOne.getVisible()) {
        setAllMap(LayerOne, true);
      }
      if (LayerTwo.getVisible()) {
        setAllMap(LayerTwo, true);
      }
      if (LayerThree.getVisible()) {
        setAllMap(LayerThree, true);
      }
    }
  });

使用您发布的答案中的侦听器,查看街景何时处于活动状态,并执行setAllMap(null);以隐藏标记。当它离开街道视图时,执行setAllMap(map);以再次显示标记。

编辑(来自谷歌地图文档):

function setAllMap(map) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(map);
  }
}

最新更新