Google Maps API基本地图可以用作自定义地图图层上方的叠加层吗?

时间:2014-10-21 13:02:52

标签: google-maps-api-3

是否可以将Google Maps API基本地图数据用作位于上方自定义地图图层的叠加层?

我想创建一个地图,使用谷歌的基础水和陆地/地形作为底层,然后在上面定位一个自定义数据层(红色多边形区域代表我的数据),然后最终定位谷歌地图的街道/边界/城市标签都在一切之上。

enter image description here

这可能吗?我尝试将Google地图图层(仅打开街道/边界/城市)推送到overlayMapTypes数组,但它似乎强制所有Google地图图层都放在所有内容之上,而我的自定义图层数据(第二层)是不再可见。

1 个答案:

答案 0 :(得分:7)

以下是自定义切片图层作为中间图层的示例:

<script type="text/javascript">
function initMap() {
    // Map with everything off but boundaries
    var myOptions = {
        zoom: 2,
        center: new google.maps.LatLng(0, 0),
        styles: [
            {
                featureType: 'poi',
                stylers: [
                    { visibility: 'off' }
                ]
            },
            {
                featureType: 'road',
                stylers: [
                    { visibility: 'off' }
                ]
            },
            {
                featureType: 'transit',
                stylers: [
                    { visibility: 'off' }
                ]
            },
            {
                featureType: 'landscape',
                stylers: [
                    { visibility: 'off' }
                ]
            },
            {
                elementType: 'labels',
                stylers: [
                    { visibility: 'off' }
                ]
            }
        ]
    };

    var map = new google.maps.Map(document.getElementById("map"), myOptions);

    // Middle layer
    var tileLayer = new google.maps.ImageMapType({
        getTileUrl: "tiles URL here",
        tileSize: new google.maps.Size(256, 256),
        isPng: true
    });

    map.overlayMapTypes.push(tileLayer);

    // Top layer with everything off but roads
    var roadsLayer = [
        {
            featureType: 'all',
            stylers: [
                { visibility: 'off' }
            ]
        },
        {
            featureType: 'road',
            stylers: [
                { visibility: 'on' }
            ]
        }
    ];

    var roadsType = new google.maps.StyledMapType(roadsLayer, { name: 'roads' });
    map.overlayMapTypes.push(roadsType);
}