单击时以编程方式关闭 Google 地图 POI

novus22

我正在使用带有风格化地图的 Google Maps API,并且在我的网站上有一个选项可以显示或隐藏兴趣点。默认情况下,POI 处于打开状态。当用户单击“隐藏”按钮时,我希望地图关闭 POI,但保留其余的主题样式设置。

我知道 Map.setOptions 函数,但是当我这样使用它时:

map.setOptions({styles: [
  {
   "featureType": "poi",
   "stylers": [
    { "visibility": "off" }
  ]
}
]});

它会覆盖所有现有主题的设置,恢复到默认的谷歌地图外观,但关闭 POI。有没有办法只关闭 POI 并保持当前主题?

地理编码

地图是一个 MVC 对象,它的所有“选项”都有 setter 和 getter。

这对我有用(但它涉及知道隐藏 POI 的条目是数组中的第一个):

// Apply new JSON when the user chooses to hide/show features.
document.getElementById('hide-poi').addEventListener('click', function() {
  var styles = map.get("styles");
  styles.splice(0, 0, {
    featureType: 'poi',
    stylers: [{
      visibility: 'off'
    }]
  });
  map.set("styles", styles);
});
document.getElementById('show-poi').addEventListener('click', function() {
  var styles = map.get("styles");
  styles = styles.slice(1);
  map.set("styles", styles);
});

概念证明小提琴

隐藏:隐藏的兴趣点显示:显示兴趣点

代码片段:

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: -33.86,
      lng: 151.209
    },
    zoom: 13,
    mapTypeControl: false,
    styles: nightMode
  });

  // Add controls to the map, allowing users to hide/show features.
  var styleControl = document.getElementById('style-selector-control');
  map.controls[google.maps.ControlPosition.TOP_LEFT].push(styleControl);

  // Apply new JSON when the user chooses to hide/show features.
  document.getElementById('hide-poi').addEventListener('click', function() {
    var styles = map.get("styles");
    styles.splice(0, 0, {
      featureType: 'poi',
      stylers: [{
        visibility: 'off'
      }]
    });
    map.set("styles", styles);
  });
  document.getElementById('show-poi').addEventListener('click', function() {
    var styles = map.get("styles");
    styles = styles.slice(1);
    map.set("styles", styles);
  });
}
var map;
var nightMode = [{
    featureType: 'poi',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#d59563'
    }]
  },
  {
    elementType: 'geometry',
    stylers: [{
      color: '#242f3e'
    }]
  },
  {
    elementType: 'labels.text.stroke',
    stylers: [{
      color: '#242f3e'
    }]
  },
  {
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#746855'
    }]
  },
  {
    featureType: 'administrative.locality',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#d59563'
    }]
  },
  {
    featureType: 'poi.park',
    elementType: 'geometry',
    stylers: [{
      color: '#263c3f'
    }]
  },
  {
    featureType: 'poi.park',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#6b9a76'
    }]
  },
  {
    featureType: 'road',
    elementType: 'geometry',
    stylers: [{
      color: '#38414e'
    }]
  },
  {
    featureType: 'road',
    elementType: 'geometry.stroke',
    stylers: [{
      color: '#212a37'
    }]
  },
  {
    featureType: 'road',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#9ca5b3'
    }]
  },
  {
    featureType: 'road.highway',
    elementType: 'geometry',
    stylers: [{
      color: '#746855'
    }]
  },
  {
    featureType: 'road.highway',
    elementType: 'geometry.stroke',
    stylers: [{
      color: '#1f2835'
    }]
  },
  {
    featureType: 'road.highway',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#f3d19c'
    }]
  },
  {
    featureType: 'transit',
    elementType: 'geometry',
    stylers: [{
      color: '#2f3948'
    }]
  },
  {
    featureType: 'transit.station',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#d59563'
    }]
  },
  {
    featureType: 'water',
    elementType: 'geometry',
    stylers: [{
      color: '#17263c'
    }]
  },
  {
    featureType: 'water',
    elementType: 'labels.text.fill',
    stylers: [{
      color: '#515c6d'
    }]
  },
  {
    featureType: 'water',
    elementType: 'labels.text.stroke',
    stylers: [{
      color: '#17263c'
    }]
  }
];
/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */

#map {
  height: 100%;
}


/* Optional: Makes the sample page fill the window. */

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

.map-control {
  background-color: #fff;
  border: 1px solid #ccc;
  box-shadow: 0 2px 2px rgba(33, 33, 33, 0.4);
  font-family: 'Roboto', 'sans-serif';
  margin: 10px;
  padding-right: 5px;
  /* Hide the control initially, to prevent it from appearing
     before the map loads. */
  display: none;
}


/* Display the control once it is inside the map. */

#map .map-control {
  display: block;
}

.selector-control {
  font-size: 14px;
  line-height: 30px;
  vertical-align: baseline;
}
<div id="style-selector-control" class="map-control">
  <input type="radio" name="show-hide" id="hide-poi" class="selector-control">
  <label for="hide-poi">Hide</label>
  <input type="radio" name="show-hide" id="show-poi" class="selector-control" checked="checked">
  <label for="show-poi">Show</label>
</div>
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap">
</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为Google地图上的多个形状创建addListener单击事件

来自分类Dev

单击Google地图标记时运行脚本

来自分类Dev

如何以编程方式在Google地图中移动一点

来自分类Dev

谷歌地图-单击地图时关闭信息窗口

来自分类Dev

可以在Google地图上隐藏POI吗?

来自分类Dev

我们可以通过编程方式缓存Google地图吗?

来自分类Dev

在Google地图上仅显示一个Poi

来自分类Dev

以编程方式在Google地图上添加“在Google Maps上查看”自定义按钮

来自分类Dev

Google地图上的控制键+单击事件

来自分类Dev

Android:放大时Google地图未更新

来自分类Dev

在Google地图上绘制折线时禁用POI

来自分类Dev

提取Google地图时遇到问题

来自分类Dev

在滚动Google地图时获取地图中心点

来自分类Dev

无法获取Selenium Python以在Google地图上单击“提交”按钮

来自分类Dev

如何关闭Google地图中的地图?

来自分类Dev

为Google地图上的多个形状创建addListener单击事件

来自分类Dev

实现Google地图片段时出错

来自分类Dev

如何以编程方式在Google地图中移动一点

来自分类Dev

Android Google地图位置项单击以开始新活动

来自分类Dev

我们可以以编程方式缓存Google地图吗?

来自分类Dev

如何使用PHP以编程方式在Google网站管理员工具中提交站点地图?

来自分类Dev

信息窗口不会自动关闭(Google地图)

来自分类Dev

Google地图:以编程方式在地图上设置视角

来自分类Dev

使用自己的地图,例如Google地图。访客单击地图上的景点时收集并处理数据

来自分类Dev

如何单击从 JavaScript 嵌入的 Google 地图中的图钉?

来自分类Dev

单击另一个标记时,Google 地图会关闭信息窗口

来自分类Dev

单击 Google 地图标记运行 PHP 代码

来自分类Dev

在 Google 散点图上单击显示 Google 地图信息窗口

来自分类Dev

单击时获取相同的 Google 地图标记 ID

Related 相关文章

  1. 1

    为Google地图上的多个形状创建addListener单击事件

  2. 2

    单击Google地图标记时运行脚本

  3. 3

    如何以编程方式在Google地图中移动一点

  4. 4

    谷歌地图-单击地图时关闭信息窗口

  5. 5

    可以在Google地图上隐藏POI吗?

  6. 6

    我们可以通过编程方式缓存Google地图吗?

  7. 7

    在Google地图上仅显示一个Poi

  8. 8

    以编程方式在Google地图上添加“在Google Maps上查看”自定义按钮

  9. 9

    Google地图上的控制键+单击事件

  10. 10

    Android:放大时Google地图未更新

  11. 11

    在Google地图上绘制折线时禁用POI

  12. 12

    提取Google地图时遇到问题

  13. 13

    在滚动Google地图时获取地图中心点

  14. 14

    无法获取Selenium Python以在Google地图上单击“提交”按钮

  15. 15

    如何关闭Google地图中的地图?

  16. 16

    为Google地图上的多个形状创建addListener单击事件

  17. 17

    实现Google地图片段时出错

  18. 18

    如何以编程方式在Google地图中移动一点

  19. 19

    Android Google地图位置项单击以开始新活动

  20. 20

    我们可以以编程方式缓存Google地图吗?

  21. 21

    如何使用PHP以编程方式在Google网站管理员工具中提交站点地图?

  22. 22

    信息窗口不会自动关闭(Google地图)

  23. 23

    Google地图:以编程方式在地图上设置视角

  24. 24

    使用自己的地图,例如Google地图。访客单击地图上的景点时收集并处理数据

  25. 25

    如何单击从 JavaScript 嵌入的 Google 地图中的图钉?

  26. 26

    单击另一个标记时,Google 地图会关闭信息窗口

  27. 27

    单击 Google 地图标记运行 PHP 代码

  28. 28

    在 Google 散点图上单击显示 Google 地图信息窗口

  29. 29

    单击时获取相同的 Google 地图标记 ID

热门标签

归档