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

时间:2015-03-05 17:48:32

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

当用户将小黄人拖到屏幕上时,它会转换为全屏街景。这很好。但是,它还会使用我的地图标记来填充屏幕。这很糟糕。

解决这个问题的困难方法是让我遍历地图上可能存在的每个标记,存储在街景开始之前可见的标记,然后在街景视图完成时恢复它们。但我无法在API文档中的任何位置找到街景启动事件。

更好更容易的解决方案是设置一些选项,例如“在街景中不显示我的标记。”

编辑:设法找到监控街景状态的方法。 How to detect enter and exit streetView in Google Maps 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);
      }
    }
  });

1 个答案:

答案 0 :(得分:2)

在您发布的答案中使用听众,查看街景何时处于活动状态,并setAllMap(null);隐藏标记。离开街景时,请setAllMap(map);再次显示标记。

修改(来自Google地图文档):

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