【问题标题】:How to put Google Map labels on top?如何将谷歌地图标签放在顶部?
【发布时间】:2014-08-04 17:57:20
【问题描述】:

我正在使用谷歌地图中的折线。基本上我正在尝试使用折线在多条道路上画一条线。

现在这些折线正在阻挡(在顶部)道路标签。我已经更改了不透明度级别以便更好地查看,但我真的希望 Google 地图标签位于顶部。

我研究了样式图,但还没有找到任何合适的解决方案。有没有办法做到这一点?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    图块(包含地面、标签、街道等)以单个图像而不是层的形式提供,因此无法在图块中显示的特定特征之间放置任何内容。

    但可能有办法。

    假设您有 2 个(同步)地图、1 个完整地图和 1 个仅显示标签的地图。

    当您将带有标签的地图放在另一张地图的顶部时,它将能够获得所需的效果(这并不意味着我会建议它,我只是想避免说“不可能”)

    Demo:http://jsfiddle.net/geocodezip/tq5zmre3/

    代码 sn-p:

    // Setup the default map
    latlng = [-6.2087634, 106.84559899999999];
    latlng = new google.maps.LatLng(23.062521089244896, -68.78645340625002);
    
    map = new google.maps.Map(document.getElementById('map'), {
      disableDefaultUI: true,
      styles: [{
        "elementType": "labels",
        "stylers": [{
          "visibility": "off"
        }]
      }],
    
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    map2 = new google.maps.Map(document.getElementById('map2'), {
      mapTypeControl: false,
      backgroundColor: 'hsla(0, 0%, 0%, 0)',
      zoom: 5,
      styles: [{
        "stylers": [{
          "visibility": "off"
        }]
      }, {
        "elementType": "labels",
        "stylers": [{
          "visibility": "on"
        }]
      }],
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    map.bindTo('center', map2, 'center');
    map.bindTo('zoom', map2, 'zoom');
    
    
    
    new google.maps.Polygon({
      paths: [
        new google.maps.LatLng(15.774252, -80.190262),
        new google.maps.LatLng(18.466465, -66.118292),
        new google.maps.LatLng(32.321384, -64.75737),
        new google.maps.LatLng(25.774252, -80.190262)
      ],
      strokeColor: '#FF0000',
      strokeOpacity: 0.8,
      strokeWeight: 2,
      fillColor: '#FF0000',
      fillOpacity: 1,
      map: map
    });
    html,
    body {
      margin: 0;
      padding: 0;
      height: 100%;
    }
    
    .map {
      width: 100%;
      height: 100%;
      background: transparent !important;
    }
    <script src="http://maps.google.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
    <div id="map" class="map"></div>
    <div id="map2" class="map" style="top:-100%;"></div>

    【讨论】:

    • 这种方法的主要缺点是 1) 请求加倍(两个地图)和 2) 同步地图行为/事件(缩放、单击、滚动等)?还有其他人吗?
    【解决方案2】:

    有一种更简洁的方法可以使用单个地图和 StyledMapType 实现此目的。

    // Create an overlay to display map labels only
    var labelsMapType = new google.maps.StyledMapType([{
        // Hide all map features by default
        stylers: [{
            visibility: 'off'
        }]
    }, {
        // then turn the label feature on
        elementType: 'labels',
        stylers: [{
            visibility: 'on'
        }]
    }], {
        name: 'Labels'
    });
    
    // Add to the map's overlay collection
    map.overlayMapTypes.push(labelsMapType);
    

    【讨论】:

    • 感谢亚当的回答,它看起来很有希望,但它对我不起作用
    • 这确实有效。您还需要调整结果层的 z-index - 例如map.getDiv().firstChild.firstChild.firstChild.firstChild.firstChild.style.zIndex = 150 根据stackoverflow.com/a/19461885/284164
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多