我想在街景中隐藏地图标记。 (Google 地图 v3)
I want to hide map markers while in street view. (Google maps v3)
当用户将小黄人拖到屏幕上时,它会转换为全屏街景。这很好。但是,它也用我的地图标记在屏幕上乱扔垃圾。这很糟糕。
解决这个问题的困难方法是循环遍历地图上所有可能的标记,存储在启动街景视图之前可见的标记,然后在街景视图完成后恢复它们。但是我在 API 文档中的任何地方都找不到街景启动事件。
更好更简单的解决方案是设置一些选项,例如 "Don't show my markers while in street view."
编辑:设法找到监控街景状态的方法。
不过,我还是想知道是否有办法...在街景视图中不显示标记。
最终编辑:
我包括 'solution'。这是我最终编写的内容的简化版本,因为每个层都涉及整个应用程序中的各种模块,因此它们的处理并不像显示的那样简单。
最终解决方案:
// 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);
以再次显示标记。
编辑(来自 Google 地图文档):
function setAllMap(map) {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(map);
}
}
当用户将小黄人拖到屏幕上时,它会转换为全屏街景。这很好。但是,它也用我的地图标记在屏幕上乱扔垃圾。这很糟糕。
解决这个问题的困难方法是循环遍历地图上所有可能的标记,存储在启动街景视图之前可见的标记,然后在街景视图完成后恢复它们。但是我在 API 文档中的任何地方都找不到街景启动事件。
更好更简单的解决方案是设置一些选项,例如 "Don't show my markers while in street view."
编辑:设法找到监控街景状态的方法。
不过,我还是想知道是否有办法...在街景视图中不显示标记。
最终编辑: 我包括 'solution'。这是我最终编写的内容的简化版本,因为每个层都涉及整个应用程序中的各种模块,因此它们的处理并不像显示的那样简单。 最终解决方案:
// 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);
以再次显示标记。
编辑(来自 Google 地图文档):
function setAllMap(map) {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(map);
}
}