2015-12-03 73 views
0

所以,我試圖從加載的樣式圖mapbox GL中獲取一個樣式圖層,但它一直返回未定義的元素。我在智慧的最後。在mapbox GL層遇到問題

我試圖讓下層水層存儲在圖層變量,所以我可以改變它的屬性。例如,它的可見性。

下面的代碼:

var layers=map.getLayer('water'); 
changeinnerHTML(featuresWindow, JSON.stringify(layers, null, 1)); 

PS - 我經過多年的返回編碼。我只是再次拂過我的js。

PPS:這裏是整個代碼,如果你不在意:

<script> 
     //Mapbox Access Token 
     mapboxgl.accessToken = 'pk.eyJ1IjoiYWtzaGF5a2h1cmFuYSIsImEiOiJjaWY3dXdkN3MxMzZ3czZsempwbWc0MnRoIn0.y7jHQWK5lONsJ_6u3EJSTg'; 
     // Select html objects that constantly change into javascript variables. Henceforth known as elementVar 
     var featuresWindow = document.getElementById('features'); 
     // GLOBAL FUNCTIONS : Functions that are used repeatedly 
     // Function to change inner HTML of div, span etc elements 
     function changeinnerHTML(elementVar, newvalue) { 
      elementVar.innerHTML = newvalue; 
      return null; 
     } 
     // Function to change colours. 
     function switchColor(myColor, layer) { 
      map.setPaintProperty(layer, 'fill-color', myColor); 
     } 
     // Intialise map 
     if (!mapboxgl.supported()) { 
     alert('Your browser does not support Mapbox GL!'); 
     } else { 
     var map = new mapboxgl.Map({ 
      container: 'map', // container id 
      style: 'mapbox://styles/akshaykhurana/cihlwytjz001kb4kqu0b62xq7', //stylesheet location 
      minZoom: 9, //minimum zoom value 
      maxZoom: 16, //maximum zoom value 
      interactive: true 
     }); 
     } 
     // Get some layers man. 
     var layers=map.getLayer(); 
     changeinnerHTML(featuresWindow, JSON.stringify(layers, null, 1)); 
     // Push information to sidebar on mouse hover 
     map.on('click', function(e) { 
     map.featuresAt(e.point, { 
      radius: 5 
     }, function(err, features) { 
      if (err) throw err; 
      changeinnerHTML(featuresWindow1, JSON.stringify(features, null, 2)); 
     }); 
     }); 

    </script> 

回答

1

不知道,如果你已經想通了這一點還沒有,但基本上你只需要擺脫的「map.getLayer(‘水’)」部分。

var layers = 'water'; 
map.setLayoutProperty(layers, 'visibility', 'none'); 

我不知道你用的是什麼此爲,因爲你可以設置樣式是在Mapbox工作室編輯無形的權利,但是當我改變佈局屬性,我有。點擊做到這一點(功能),像這樣:

$('.className').click(function(e) { 
    e.preventDefault(); 
    var layers = 'water'; 
    map.setLayoutProperty(layers, 'visibility', 'none'); 
}); 

然後,所有你需要做的就是添加一個按鈕或其他任何物品與類「的className」,每當被點擊,水層將成爲無形的HTML。