2013-08-03 22 views
2

我正嘗試在Goolge Maps API v3中使用地圖造型器創建一個樣式化的地圖。一切工作正常,除了我找不到在特定縮放級別添加元素樣式的方法。樣式化地圖:如何控制特定縮放級別元素的可見性?

例如,我只想讓road.highway以更高的縮放級別顯示,否則整個地圖就會與高速公路混雜在一起。我試圖使用weight屬性,但即使在高縮放級別下,這也會使高速公路變得更薄。

有沒有辦法可以做到這一點,如果是這樣,請問我可以怎麼做?

非常感謝提前!

回答

1

這是通過創建不同風格的不同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> 
+0

謝謝你,我沒有想到以編程方式做它。我認爲只有一個屬性來設置重要性或類似的東西。但是你的解決方案當然是一個好主意! –

+0

我試圖讓狀態標籤(administrative.province)在更高縮放級別可見,並且據我所知,這是不可能的,即使以編程方式切換樣式也是如此。我很想找到一種方法來控制某些元素(標籤)在特定縮放級別使用樣式器的可見性,但看起來這不是API的一部分。 ...我很樂意被證明是錯誤的! –

+0

@Sam H,據我所知,沒有辦法通過默認的api在0,1和2的最小縮放級別切換它們,就像我看到的那樣。不知道爲什麼你會想要標籤,無論如何,你是在宇航員的視圖水平和標籤必須是如此之小,以適應彼此之間,你不能很好地閱讀他們。實際上你可以添加自己的標籤,也許可以玩一下:https://github.com/erunyon/ELabel,或者製作自己的自定義覆蓋圖 – astupidname

相關問題