Mais

A caixa de seleção fica desmarcada quando o mapa se move

A caixa de seleção fica desmarcada quando o mapa se move


Eu tenho um índice que é usado para alternar a visibilidade das camadas. Também tenho uma caixa de diálogo que preenche as camadas visíveis para que o usuário possa escolher entre as camadas visíveis em qual camada gostaria de se identificar. Eles usam uma caixa de seleção para fazer isso. No entanto, quando o mapa é deslocado ou um elemento é ampliado para a caixa de seleção fica desmarcada. Aqui está uma captura de tela.

Aqui está o código que estou usando para criar a caixa de seleção da camada visível:

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! == "Rotular poços de SEO por rendimento real" && myLayer.id! == "Rotular poços de SEO por MWBZ top") {if (myLayer.visibleLayers ) {//console.log(myLayer.id + ":" + "has vis Layers"); var items = arrayUtils.map (myLayer.layerInfos, function (info, index) {if (info.name === " Rotular poços de SEO por profundidade "|| info.name ===" Rotular poços de SEO por rendimento real "|| info.name ===" Rotular poços de SEO por 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 = "bloquear"; }); }

De acordo com a documentação do evento "update-end" da camada, ele dispara toda vez que a camada termina a atualização. Cada vez que o usuário faz uma panorâmica, aumenta ou diminui o zoom, este evento será acionado.

O problema é que o layerInfo.defaultVisibility que você usa para definir o estado da caixa de seleção não muda quando você altera a visibilidade da camada. Mostra apenas se o serviço de mapas o tinha ativado inicialmente. Ao aplicar panorâmica ou zoom, a caixa de seleção é renderizada novamente e a caixa de seleção é definida para o estado original do mapa.

Se você vai continuar usando o evento de fim de atualização da camada para atualizar as caixas de seleção, precisará de outra maneira de armazenar se a caixa de seleção foi marcada ou não.


solução:

no map.js substituímos todos os

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

então, no código acima, criamos um array que chamava o id da caixa de seleção, se estivesse marcada, então nada foi feito.

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! == "Rotular poços de SEO por rendimento real "&& myLayer.id! ==" Rotular poços de SEO por 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"). verificado) {selectedLayers.push (info.name);}}});}}}); arrayUtils .map (mapLayer, function (layerName2) {var myLayer2 = map.getLayer (layerName2); if (myLayer2.id! == "basinLayer" && myLayer2.id! == "NAIP2012" && myLayer2.id! == "NAIP2009 "&& myL ayer2.id! == "NAIP2006" && myLayer2.id! == "trLayer" && myLayer2.id! == "Rotular poços de SEO por rendimento real" && myLayer2.id! == "Rotular poços de SEO por MWBZ top") {if (myLayer2.visibleLayers) {var items = arrayUtils.map (myLayer2.layerInfos, function (info, index) {if (info.name === "Rotular poços de SEO por profundidade" || info.name === "Rotular os poços de SEO de acordo com o rendimento real" || info.name === "Rotular poços de SEO por MWBZ top") {} else {if (myLayer2.visibleLayers.indexOf (info.id)> -1) {var layerWasSelected = "; arrayUtils.map (selectedLayers, function (selectedLayerName ) {if (selectedLayerName === info.name) {layerWasSelected = 'checks';}}); return "
";}}}); myItems = myItems.concat (items);}}}); var legendList = dom.byId (" legendDiv "); legendList.innerHTML = myItems.join ("); document.getElementById ("legendDiv"). style.display = "bloquear"; document.getElementById ("blTree"). style.display = "bloquear"; });

}