這是通過創建不同風格的不同google.maps.StyledMapType對象,然後設置一個事件偵聽器來偵聽Map對象的'zoom_changed'事件來完成的。這應該給你一些想法:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Custom Styled Map</title>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
/***
SEE:
https://developers.google.com/maps/documentation/javascript/styling
ALSO, GOOGLES STYLED MAP WIZARD:
http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html
***/
function initialize() {
var gm = google.maps,
darkStylers = [
{stylers:[{invert_lightness:true}]}
],
lightStylers = [
{stylers:[{saturation:-100}]}
],
darkStyle = new gm.StyledMapType(darkStylers, {name: 'Dark Style'}),
lightStyle = new gm.StyledMapType(lightStylers, {name: 'Light Style'}),
mapOptions = {
zoom: 7,
mapTypeControl:false,
center: new gm.LatLng(32.8297,-96.6486),
mapTypeId: gm.MapTypeId.ROADMAP
},
map = new gm.Map(document.getElementById('map_canvas'), mapOptions);
//add two new MapTypes to the maps mapTypes
map.mapTypes.set('Dark_Map', darkStyle);
map.mapTypes.set('Light_Map', lightStyle);
//set our maps initial style
map.setMapTypeId('Dark_Map');
gm.event.addListener(map, 'zoom_changed', function() {
var zoom = this.getZoom();
if (zoom < 9) {
map.setMapTypeId('Dark_Map');
} else {
map.setMapTypeId('Light_Map');
}
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map_canvas" style="width:780px; height:600px; margin:10px auto;"></div>
</body>
</html>
謝謝你,我沒有想到以編程方式做它。我認爲只有一個屬性來設置重要性或類似的東西。但是你的解決方案當然是一個好主意! –
我試圖讓狀態標籤(administrative.province)在更高縮放級別可見,並且據我所知,這是不可能的,即使以編程方式切換樣式也是如此。我很想找到一種方法來控制某些元素(標籤)在特定縮放級別使用樣式器的可見性,但看起來這不是API的一部分。 ...我很樂意被證明是錯誤的! –
@Sam H,據我所知,沒有辦法通過默認的api在0,1和2的最小縮放級別切換它們,就像我看到的那樣。不知道爲什麼你會想要標籤,無論如何,你是在宇航員的視圖水平和標籤必須是如此之小,以適應彼此之間,你不能很好地閱讀他們。實際上你可以添加自己的標籤,也許可以玩一下:https://github.com/erunyon/ELabel,或者製作自己的自定義覆蓋圖 – astupidname