Suite

La case à cocher devient décochée lorsque la carte se déplace


J'ai une table des matières qui est utilisée pour basculer la visibilité des calques. J'ai également une boîte de dialogue qui se remplit avec les calques visibles afin que l'utilisateur puisse choisir parmi les calques visibles sur quel calque il souhaite s'identifier. Ils utilisent une case à cocher pour ce faire. Cependant, lorsque la carte est déplacée ou qu'une entité est zoomée sur la case à cocher devient décochée. voici une capture d'écran.

Voici le code que j'utilise pour créer la case à cocher de la couche visible :

function buildLayerList() { require(["dojo/on", "dojo/dom", "dojo/_base/array"], function (on, dom, arrayUtils) { var mapLayer = map.layerIds; var myItems = [] ; arrayUtils.map(mapLayer, function (layerName) { var myLayer = map.getLayer(layerName); if (myLayer.id !== "NAIP2012" && myLayer.id !== "NAIP2009" && myLayer.id !== "NAIP2006" && myLayer.id !== "trLayer" && myLayer.id !== "Etiqueter les puits SEO par rendement réel" && myLayer.id !== "Etiqueter les puits SEO par MWBZ top") { if (myLayer.visibleLayers ) { //console.log(myLayer.id + " : " + "a vis Layers"); var items = arrayUtils.map(myLayer.layerInfos, function (info, index) { if (info.name === " Étiqueter les puits de référencement par profondeur" || info.name === "Étiqueter les puits de référencement par rendement réel" || info.name === "Étiqueter les puits de référencement par MWBZ top") { // console.log(info.name) ; } else { if (myLayer.visibleLayers.indexOf(info.id) > -1) { return "
"; } } }); myItems = myItems.concat(items); } } }); var ll = dom.byId("legendDiv"); ll.innerHTML = myItems.join("); document.getElementById("legendDiv").style.display = "block"; }); }

Selon la documentation de l'événement "update-end" de la couche, il se déclenche chaque fois que la couche termine la mise à jour. Chaque fois que l'utilisateur effectue un panoramique, un zoom avant ou arrière, cet événement sera déclenché.

Le problème est que le layerInfo.defaultVisibility que vous utilisez pour définir l'état de la case à cocher ne change pas lorsque vous modifiez la visibilité du calque. Il montre uniquement si le service de carte l'avait activé initialement. Lorsque vous effectuez un panoramique ou un zoom, la case à cocher est restituée et la case à cocher est définie sur l'état de la carte d'origine.

Si vous continuez à utiliser l'événement de fin de mise à jour de la couche pour actualiser les cases à cocher, vous aurez besoin d'un autre moyen de stocker si la case à cocher a été cochée ou non.


Solution:

dans le map.js, nous avons remplacé tous les

myLayer.on('update-end', buildLayerList); avec on(map, "update-end", buildLayerList);

puis dans le code ci-dessus, nous avons créé un tableau qui appelait l'identifiant de la case à cocher s'il était coché, rien n'était fait.

function buildLayerList() { require(["dojo/on", "dojo/dom", "dijit/form/CheckBox", "dojo/_base/array"], function (on, dom, CheckBox, arrayUtils) { var mapLayer = map.layerIds; var myItems = []; var selectedLayers = []; arrayUtils.map(mapLayer, function (layerName) { var myLayer = map.getLayer(layerName); if (myLayer.id !== "basinLayer" && myLayer.id !== "NAIP2012" && myLayer.id !== "NAIP2009" && myLayer.id !== "NAIP2006" && myLayer.id !== "trLayer" && myLayer.id !== "Étiqueter les puits de référencement par rendement réel" && myLayer.id !== "Label SEO wells by MWBZ top") { if (myLayer.visibleLayers) { var items = arrayUtils.map(myLayer.layerInfos, function (info, index) { if (document. getElementById(info.name + "CB")) { if (document.getElementById(info.name + "CB").checked) { selectedLayers.push(info.name); } } }); } } }); arrayUtils .map(mapLayer, function (layerName2) { var myLayer2 = map.getLayer(layerName2); if (myLayer2.id !== "basinLayer" && myLayer2.id !== "NAIP2012" && myLayer2.id !== "NAIP2009 " && maL ayer2.id !== "NAIP2006" && myLayer2.id !== "trLayer" && myLayer2.id !== "Etiqueter les puits SEO par rendement réel" && myLayer2.id !== "Etiqueter les puits SEO par MWBZ top") { if (myLayer2.visibleLayers) { var items = arrayUtils.map(myLayer2.layerInfos, function (info, index) { if (info.name === "Étiqueter les puits SEO par profondeur" || info.name === "Étiqueter les puits SEO par rendement réel" || info.name === "Étiqueter les puits SEO par MWBZ top") { } else { if (myLayer2.visibleLayers.indexOf(info.id) > -1) { var layerWasSelected ="; arrayUtils.map(selectedLayers, fonction (selectedLayerName ) { if (selectedLayerName === info.name) { layerWasSelected = 'checked'; } } ); return "
"; } } }); myItems = myItems.concat(items); } } }); var legendList = dom.byId("legendDiv"); legendList.innerHTML = myItems.join("); document.getElementById("legendDiv").style.display = "block"; document.getElementById("blTree").style.display = "block"; });

}


Voir la vidéo: Checkboxes en GOOGLE SHEETS - Como insertar casillas de verificación en una celda en Google Sheets (Octobre 2021).