Gav*_*vin 1 javascript kml toggle kmz google-maps-api-3
我正在开发一个带有Google地图应用程序的网页.目前,我有一个功能搜索栏和地图,显示三个KML/KMZ图层.我需要能够在每个层之间切换,要么显示其中一个,要么显示其中两个,要么全部三个.Google地球中有类似的功能,但我需要在Google地图中使用它.我怎样才能做到这一点?
这是我的地图和搜索栏的代码:
<script type="text/javascript">
var geocoder;
var map;
var marker;
function initialize() {
geocoder = new google.maps.Geocoder ();
var latlng = new google.maps.LatLng (40.43, -74.00);
var myOptions = {
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
marker = new google.maps.Marker({map:map});
var ctaLayer = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/NY_Radar_data.kmz');
ctaLayer.setMap(map);
var ctaLayer = new google.maps.KmlLayer('http://www.nyc.gov/html/dot/downloads/misc/cityracks.kml');
ctaLayer.setMap(map);
var ctaLayer = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/OKX_Radar_data%20(1).kmz');
ctaLayer.setMap(map);
}
function codeAddress () {
var address = document.getElementById ("address").value;
geocoder.geocode ( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results [0].geometry.location);
marker.setPosition(results [0].geometry.location);
map.setZoom(14);
}
else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
Hei*_*ang 10
它只是setMap(null)隐藏一个,setMap(map)显示.我保留一个全局数组变量layers,以跟踪要切换的图层:
var layers = [];
layers[0] = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/NY_Radar_data.kmz',
{preserveViewport: true});
layers[1] = new google.maps.KmlLayer('http://www.nyc.gov/html/dot/downloads/misc/cityracks.kml',
{preserveViewport: true});
layers[2] = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/OKX_Radar_data%20(1).kmz',
{preserveViewport: true});
Run Code Online (Sandbox Code Playgroud)
在切换图层时,preserveViewport选项可以阻止地图跳转.
这是切换的功能:
function toggleLayer(i) {
if(layers[i].getMap() === null) {
layers[i].setMap(map);
}
else {
layers[i].setMap(null);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意它使用的是全局变量.最后是HTML,您可以使用复选框或按钮,甚至是单选按钮,首先只设置一个活动层,并在更新收音机时启用正确的层.
Large weather <input type="checkbox" id="layer0" onclick="toggleLayer(0)" checked>
<input type="button" id="layer1" onclick="toggleLayer(1)" value="Racks">
Small weather <input type="checkbox" id="layer2" onclick="toggleLayer(2)" checked>
Run Code Online (Sandbox Code Playgroud)
整个演示在这里,地图左上角的控件:http://jsbin.com/irahef/edit#preview