2015-12-03 3 views
0

Итак, я пытаюсь получить слой стиля из загруженного стиля в mapbox GL, но он сохраняет возвращаемые неопределенные элементы. Я в конце своего ума.Проблемы с картами 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, но когда я изменить макет собственности, я делаю это с .click (функция), как так:

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

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

Смежные вопросы