2015-11-17 1 views
2

Je dois modifier l'application existante, où le contrôle des couches de feuillets est utilisé. J'ai besoin d'afficher l'une des couches de base lorsque la carte est lancée. Y at-il un moyen, comment appeler une fonction du contrôle des calques du script JS - quelque chose comme control.select (1) ....? Sinon, comment ajouter une couche de tuiles de la même manière que le contrôle - quand j'ajoute une nouvelle L.TileLayer pendant map init, elle n'est pas écrasée par le changement manuel de la sélection des couches?Comment modifier la couche de base à l'aide du contrôle des couches JS et des feuillets

Répondre

1

Vous pouvez essayer d'émuler un utilisateur en cliquant sur le contrôle des couches de la brochure, mais il existe un moyen beaucoup plus simple de réaliser ce que vous avez initialement décrit. Normalement, en ajoutant simplement une couche à la carte (par exemple myTileLayer.addTo(map)), si cette couche fait partie du base layers or overlays of the Layers Control, ce dernier mettra automatiquement à jour son état (si vous avez ajouté un calque de base, les boutons radio seront sélectionnés en conséquence; pour une superposition, la case à cocher correspondante sera cochée). Maintenant je ne suis pas sûr d'avoir bien compris votre dernière partie ("quand j'ajoute une nouvelle L.TileLayer au moment de l'initialisation de la carte, elle n'est pas écrasée par le changement de sélection du contrôle manuel des couches").

Si vous voulez dire que vous avez un comportement inattendu parce que le calque que vous avez ajouté n'est pas modifié par le contrôle des calques, cela peut être dû au fait que vous n'utilisez pas un calque de mosaïque. n'utilisez pas new L.TileLayer, mais réutilisez l'une des couches de base ou des superpositions.

Par exemple:

var baselayers = { 
    "Tile Layer 1": L.tileLayer(/* ... */), 
    "Tile Layer 2": L.tileLayer(/* ... */), 
    "Tile Layer 3": L.tileLayer(/* ... */) 
}; 

var overlays = {}; 

L.control.layers(baselayers, overlays).addTo(map); 

baseLayers["Tile Layer 1"].addTo(map); 
+0

Merci, c'est plus/moins ce que je l'ai découvert et essayé de décrire dans ma réponse ci-dessus - mais vous l'avez écrit de façon beaucoup mieux ;) – user3523426

0

Je trouve cela après avoir creusé dans le code de notice:

1) trouver la couche que vous voulez afficher dans la structure de contrôle _layers 2) appeler map.addLayer (_layers [your_layer_index] .layer) 3) trouver votre couche dans la structure de contrôle _form 4) mettre son attribut coché à vrai

2

Il y a plusieurs façons de gérer ce problème.

1) Vous pouvez sélectionner la deuxième couche de base en cliquant sur l'entrée radio dans le contrôle de couche. Cela peut se faire programatically comme celui-ci (non recommandé):

var layerControlElement = document.getElementsByClassName('leaflet-control-layers')[0]; 
layerControlElement.getElementsByTagName('input')[1].click(); 

2) il suffit de changer l'ordre de baseLayers passé dans L.Control.Layers lors de l'initialisation.

3) Adresser L.Control.Layers pour qu'il accepte une nouvelle option {"selectedBaseLayerIndex": 1}

+0

Merci, j'ai essayé cette approche "clic", mais je n'ai pas pu trouver l'objet approprié pour l'événement click. C'est une bonne idée. – user3523426