如何隐藏或显示 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 地图图层?的主要内容,如果未能解决你的问题,请参考以下文章