【问题标题】:Custom Google Maps Layers via API?通过 API 自定义谷歌地图图层?
【发布时间】:2012-12-04 08:21:14
【问题描述】:

这是关于 Google Maps API v3:

当您在自定义 Google 地图中绘制各种 PolylinesPolygonsMapLabels 或任何其他叠加元素时,它会将它们绘制在 mapPane 上。是否可以以某种方式创建多个自定义层,您可以在其上绘制 Overlay 对象,然后轻松启用/禁用(显示/隐藏)这些层?

我在这里看到有关层的文档:https://developers.google.com/maps/documentation/javascript/layers

但没有关于自定义层。

【问题讨论】:

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


    【解决方案1】:

    您可以创建一个自定义 OverlayView 来做到这一点:

    var LayerOverlay = function () {
      this.overlays = [];
    }
    LayerOverlay.prototype = new google.maps.OverlayView();
    LayerOverlay.prototype.addOverlay = function (overlay) {
      this.overlays.push(overlay);
    };
    LayerOverlay.prototype.updateOverlays = function () {
      for (var i = 0; i < this.overlays.length; i++) {
        this.overlays[i].setMap(this.getMap());
      }
    };
    LayerOverlay.prototype.draw = function () {};
    LayerOverlay.prototype.onAdd = LayerOverlay.prototype.updateOverlays;
    LayerOverlay.prototype.onRemove = LayerOverlay.prototype.updateOverlays;
    

    然后,一旦将叠加层添加到 LayerOverlay,您就可以仅使用一个 setMap 来显示或隐藏它们:

    var layer1 = new LayerOverlay();
    layer1.addOverlay(createMarker());
    layer1.addOverlay(createMarker());
    layer1.addOverlay(createMarker());
    
    // hide all markers
    layer1.setMap(null);
    
    // show all markers
    layer1.setMap(map);
    

    【讨论】:

    • 非常有趣...谷歌地图就是这样在街道/地形/卫星等事物之间切换的方式吗?
    • 内部谷歌地图代码被混淆,很难分辨。
    • 谢谢。除了 API 参考之外,OverlayView 上还有其他文档吗?有其他例子吗?我很好奇是否还有其他我没有想到的方法可以使用它。
    • 嗨,Alexandre,你的例子效果很好,只是我还需要在构造函数中添加this.setMap(map)。这是必要的,否则运行 layer1.setMap(null) 没有做任何事情,因为 LayerOverlay 尚未分配给地图(但仍然奇怪地出现在地图上)。感谢您的帮助。
    • 我认为这是因为您使用map 属性创建标记。没有它,默认情况下不会显示任何标记。
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多