Filtrar en EditorWidget de acuerdo a las capas visibles en el mapa

601
3
Jump to solution
11-21-2017 08:27 AM
Ronald_GuiovanniVenegas_Pulido
New Contributor III

Buenos días,

Quiero en mi aplicación poder mostrar los elementos espaciales que se pueden agregar al mapa web, que el usuario seleccione uno de ellos y lo agregue en el mapa. Esa parte está lista. El problema que tengo es que me muestra todos los elementos de todas las capas a la vez en el Editor, y aún cuando activo o desactivo una capa, ese listado permanece igual.

Aún cuando activo o desactivo capas en el mapa, los elementos a agregar siguen listandose todos. Me he guiado por el código de ejemplo de diferentes ejercicios en la página de desarrolladores. Quiero saber si existe la forma en que al activar una capa en el LayerList widget, ese cambio se vea reflejado en el EditorWidget y se muestre solo el elemento de la capa activa. El código con el que estoy trabajando es el siguiente:

function createMap() {

parser.parse();

config.defaults.geometryService = new GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");

//create the map arcgisUtils.arcgisUrl = "https://xxxxxxxxx.xxx/arcgis/sharing/rest/content/items";

arcgisUtils.createMap("xxxxxxxxxxxxxxxxxxxxxxxxxx", "map", {

ignorePopups: true

}).then(function (response) {

map = response.map;

//create the editor widget

var layerInfo = []; var layers = response.itemInfo.itemData.operationalLayers;

array.forEach(layers, function (layer) {

layerInfo.push({

"featureLayer": layer.layerObject,

"isEditable": true,

"showDeleteButton": false

});

});

var settings = {

map: map,

layerInfos: layerInfo,

toolbarVisible: true

};

var editorWidget = new Editor({

settings: settings

}, "editorDiv");

editorWidget.startup();

var myWidget = new LayerList({

map: map,

layers: arcgisUtils.getLayerList(response) },"layerList");

myWidget.startup();

on(myWidget, "toggle", lang.hitch(this, function (evt) {

array.map(myWidget.layers, function (layer, indx) {

if (evt.visible) {

if (indx !== evt.layerIndex) {

layer.layer.setVisibility(false);

layer.visibility = false;

}

}

});

}));

});

}

Agradezo mucho la ayuda en este tema.

Tags (2)
0 Kudos
1 Solution

Accepted Solutions
Alexander_DanielMena
New Contributor III

Hola, Ronald Guiovanni Venegas Pulido

En el evento que escucha la acción "toggle" del widget LayerList podrías validar si existe el widget Editor para crearlo/destruirlo con las nuevas capas visibles sobre el mapa. Ej.

//global
var editorWidget;


 if (editorWidget) {
  editorWidget.destroy();
 

var layersVisibles = //TO-DO Obtener los layer visibles
  //TO-DO Volver a construir el widget
  buildEditorWidget(layers)
 }
 
  function: buildEditorWidget(layers) {
  //create the editor widget
 var layerInfo = [];
 array.forEach(layers, function (layer) {
 layerInfo.push({
 "featureLayer": layer.layerObject,
 "isEditable": true,
 "showDeleteButton": false
 });
 });
 
 var settings = {
 map: map,
 layerInfos: layerInfo,
 toolbarVisible: true
 };
  
 editorWidget = new Editor({
 settings: settings
 }, "editorDiv");
 editorWidget.startup();
 
 }
 
Saludos.

View solution in original post

3 Replies
Alexander_DanielMena
New Contributor III

Hola, Ronald Guiovanni Venegas Pulido

En el evento que escucha la acción "toggle" del widget LayerList podrías validar si existe el widget Editor para crearlo/destruirlo con las nuevas capas visibles sobre el mapa. Ej.

//global
var editorWidget;


 if (editorWidget) {
  editorWidget.destroy();
 

var layersVisibles = //TO-DO Obtener los layer visibles
  //TO-DO Volver a construir el widget
  buildEditorWidget(layers)
 }
 
  function: buildEditorWidget(layers) {
  //create the editor widget
 var layerInfo = [];
 array.forEach(layers, function (layer) {
 layerInfo.push({
 "featureLayer": layer.layerObject,
 "isEditable": true,
 "showDeleteButton": false
 });
 });
 
 var settings = {
 map: map,
 layerInfos: layerInfo,
 toolbarVisible: true
 };
  
 editorWidget = new Editor({
 settings: settings
 }, "editorDiv");
 editorWidget.startup();
 
 }
 
Saludos.

XanderBakker
Esri Esteemed Contributor

Hola Ronald Guiovanni Venegas Pulido ,

Has podido avanzar en el tema con las instrucciones de amenaesri-co-esridist ?

0 Kudos
Ronald_GuiovanniVenegas_Pulido
New Contributor III

Si. Ya en mi aplicación pude filtrar las capas en el widget. Ahora, cada vez que selecciono una capa en el la lista, se muestra sólo el simbolo de esa capa en el widget. Muchas gracias por la ayuda. Fue muy util la respuesta.