如何隐藏或显示 Google 地图图层?

Posted

技术标签:

【中文标题】如何隐藏或显示 Google 地图图层?【英文标题】:How to hide or display a Google Maps Layer? 【发布时间】:2012-05-06 07:03:39 【问题描述】:

我准备了一个简化的测试用例和截图。

我想我遗漏了一点点,只有几行代码。

我的 javascript Google 地图中有 2 个叠加层(weather and clouds),并希望在单击相应复选框时隐藏或显示它们:

这是测试用例,只需将其粘贴到 .html 文件中即可运行:

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
    h1,p  
        text-align: center; 
    

    #map  
        width: 700px; 
        height: 400px; 
        margin-left: auto; 
        margin-right: auto; 
        background-color: #CCCCFF; 
    
</style>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&language=de&libraries=weather"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">

$(function() 
    findCity('Berlin');

    $('#weather_box,#clouds_box').click(function()
        alert('How to hide/show layers? Checked: ' + $(this).is(':checked'));
    );
);

function createMap(center) 
    var opts = 
        zoom: 6,
        center: center,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    ;
    return new google.maps.Map(document.getElementById('map'), opts);


function findCity(city) 
    var gc = new google.maps.Geocoder();
    gc.geocode(address: city, function(results, status) 
        if (status == google.maps.GeocoderStatus.OK) 
            var pos = results[0].geometry.location;
            var map = createMap(pos);
            var marker = new google.maps.Marker(
                map: map, 
                title: city,
                position: pos,
                animation: google.maps.Animation.DROP
            );
            var weatherLayer = new google.maps.weather.WeatherLayer(
                temperatureUnits: google.maps.weather.TemperatureUnit.CELSIUS
            );
            weatherLayer.setMap(map);
            //var cloudLayer = new google.maps.weather.CloudLayer();
            //cloudLayer.setMap(map);
        
    );

</script>
</head>
<body>
<h1>Berlin</h1>
<p>Show:
<label><input type="checkbox" id="weather_box" checked>weather</label>
<label><input type="checkbox" id="clouds_box">clouds</label>
</p>
<div id="map"></div>
</body>
</html>

更新:谢谢,这是一个适合所有人的工作版本

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
    h1,p  
        text-align: center; 
    

    #map  
        width: 700px; 
        height: 400px; 
        margin-left: auto; 
        margin-right: auto; 
        background-color: #CCCCFF; 
    
</style>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&language=de&libraries=weather"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">

var map;
var WeatherLayer;
var CloudsLayer;

$(function() 
    findCity('Berlin');

);

function createMap(center) 
    var opts = 
        zoom: 6,
        center: center,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    ;
    return new google.maps.Map(document.getElementById('map'), opts);


function findCity(city) 
    var gc = new google.maps.Geocoder();
    gc.geocode(address: city, function(results, status) 
        if (status == google.maps.GeocoderStatus.OK) 
            var pos = results[0].geometry.location;
            map = createMap(pos);
            var marker = new google.maps.Marker(
                map: map, 
                title: city,
                position: pos,
                animation: google.maps.Animation.DROP
            );
            weatherLayer = new google.maps.weather.WeatherLayer(
                temperatureUnits: google.maps.weather.TemperatureUnit.CELSIUS
            );
            weatherLayer.setMap(map);
            cloudsLayer = new google.maps.weather.CloudLayer();
            //cloudsLayer.setMap(map);

            $('#weather_box').click(function()
                weatherLayer.setMap($(this).is(':checked') ? map : null);
            );

            $('#clouds_box').click(function()
                cloudsLayer.setMap($(this).is(':checked') ? map : null);
            );

            $('#weather_box,#clouds_box').removeAttr('disabled');
        
    );

</script>
</head>
<body>
<h1>Berlin</h1>
<p>Show:
<label><input type="checkbox" id="weather_box" disabled="true" checked>weather</label>
<label><input type="checkbox" id="clouds_box" disabled="true">clouds</label>
</p>
<div id="map"></div>
</body>
</html>

【问题讨论】:

【参考方案1】:

您可以使用setMap 方法隐藏/显示图层:

if ($(this).is(':checked'))
    weatherLayer.setMap(map); // show
else
    weatherLayer.setMap(null); // hide

查看工作示例:http://jsfiddle.net/EeVUr/2/(删除了第二个复选框,因为您现在只有一层。但您可以轻松创建两个不同的层并切换它们。)

【讨论】:

以上是关于如何隐藏或显示 Google 地图图层?的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义图层添加到 Google 地图

Google 地图 - KML 图层未出现在地图上

向Google地图添加路况图层会产生额外费用吗?

如何在 Android 中使用 Google 地图按类别隐藏/显示标记组?

如何在谷歌地图中显示集群时隐藏标记

Google 图层与 gwt-openlayers 出现错误