Возникли проблемы со слоями 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>

person Akshay Khurana    schedule 03.12.2015    source источник


Ответы (1)


Не уверен, что вы уже поняли это, но в основном вам просто нужно избавиться от раздела «map.getLayer('water')».

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

Я не уверен, для чего вы это используете, так как вы можете сделать стиль невидимым прямо в редакторе студии Mapbox, но когда я изменяю свойство макета, я делаю это с помощью .click (функция) следующим образом:

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

Затем все, что вам нужно сделать, это добавить кнопку или любой другой элемент в ваш HTML-код с классом «className», и всякий раз, когда он нажимается, слой воды становится невидимым.

person J.Keefe    schedule 21.01.2016