Suite

Sélection de calque dans Openlayers 3


J'essaie de développer un moyen robuste de générer une interface utilisateur incorporant des contrôles de couche de carte tels qu'un sélecteur de couche de base. J'ai lu plusieurs articles dont celui-ci récent mais je ne parviens toujours pas à modifier la visibilité des calques et semble toujours renvoyer une erreur "layer.setVisible n'est pas une fonction". Une fois que j'aurai une méthode fiable, je développerai d'autres contrôles pour le style des calques, etc.

J'ai suivi plusieurs tutoriels et généré une arborescence de calques avec des contrôles d'opacité par exemple, mais même si tous mes calques sont en groupes, l'arborescence de calques génère plusieurs calques "indéfinis" que je ne peux pas localiser. D'où la raison pour laquelle je voudrais construire cela à partir de zéro, afin que je puisse comprendre comment inclure ou exclure des couches et m'assurer que l'interface utilisateur est liée à l'objet cartographique.

Je connais le LayerSwitcher de Matt Walker, mais encore une fois, il ne fait pas vraiment ce que je veux et j'ai du mal à comprendre correctement le processus de « marquage des calques ». Ci-dessous un exemple de mon code :

function getBaseGroup() { var couches = map.getLayers(); var len = couches.getLength(), l; for (var i = 0; i < len; i++) { l = layer.item(i); var lt = l.get('titre'); // vérifier les couches au sein des groupes if (lt == 'Base Layers') { // Titre du groupe if (l.getLayers) { var innerLayers = l.getLayers().getArray(); var base = []; for (var j = 0; j < innerLayers.length; j++) { base.push(innerLayers[j]['B']); } base de retour ; } } } } function showBase() { var this_ = this; var sel = $('#baseMapLayer'); var couches = getBaseGroup(); layer.forEach(function (layer) { sel.append($("

Il est difficile de découvrir ce qui ne va pas tant que nous n'avons pas tout votre travail. map.getLayers() restitue toutes les couches existantes sur la carte et celles-ci peuvent être des couches générées en interne par ol3 pour les interactions, etc. Je mettrais des couches, je suis intéressé, dans un tableau ou une ol.collection et j'utiliserais cet objet ensuite. Vous pouvez toujours définir un attribut supplémentaire lors de l'initialisation de votre objet calques. Par exemple:

var baseLayer = new ol.layer.Tile({ DISPLAY_IN_SWITCHER:true visible : false, preload : Infinity, source : new ol.source.BingMaps({ key : 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewSokl}Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewSOK'Ak-dzM4wSqtlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS) )); }

et puis vous pouvez filtrer les couches qui existent uniquement dans votre mélangeur. ainsi:

var allLayrs = map.getLayers(); layer.forEach(function (layer) { if (layer.get('DISPLAY_IN_SWITCHER')===true){ console.log("cette couche est répertoriée dans mon arbre",layer); } });


Voir la vidéo: Openlayers 6 Tutorial #6 - Layer Switcher (Octobre 2021).