var query = new esri.tasks.Query(); query.geometry = area.geometry; var counter = 0; var listOfSelectedFeatures; for (var j = 0; j < map.graphicsLayerIds.length; j++) { var currentLayer = map.getLayer(map.graphicsLayerIds); currentLayer.selectFeatures(query, currentLayer.SELECTION_NEW, function () { counter++; if (counter == (map.graphicsLayerIds.length - 1)) { for (var k = 0; k < map.graphicsLayerIds.length; k++) { var layer = map.getLayer(map.graphicsLayerIds ); if (listOfSelectedFeatures == undefined) { listOfSelectedFeatures = layer.getSelectedFeatures(); } else { listOfSelectedFeatures.concat(layer.getSelectedFeatures()); } } } }); }
Solved! Go to Solution.
var query = new esri.tasks.Query(); query.geometry = area.geometry; var listOfSelectedFeatures = []; for (var j = 0; j < map.graphicsLayerIds.length; j++) { var currentLayer = map.getLayer(map.graphicsLayerIds); if (currentLayer.declaredClass === "esri.layers.FeatureLayer") { currentLayer.selectFeatures(query, currentLayer.SELECTION_NEW, function (featureSet) { listOfSelectedFeatures.concat(featureSet.features); }); } }
var query = new esri.tasks.Query(); query.geometry = area.geometry; var listOfSelectedFeatures = []; for (var j = 0; j < map.graphicsLayerIds.length; j++) { var currentLayer = map.getLayer(map.graphicsLayerIds); if (currentLayer.declaredClass === "esri.layers.FeatureLayer") { currentLayer.selectFeatures(query, currentLayer.SELECTION_NEW, function (featureSet) { listOfSelectedFeatures.concat(featureSet.features); }); } }
var queryTask1 = new QueryTask(serviceurl1); var queryTask2 = new QueryTask(serviceurl2); var queryTask3 = new QueryTask(serviceurl3); ... queryTaskList = [queryTask1, queryTask2,queryTask3...]; var query = new Query(); query.spatialRelationship = Query.SPATIAL_REL_CONTAINS; query.geometry = area.geometry; var queryTaskToDoList = dojo.map(queryTaskList, function(item, index){ return item.execute(query) }): var listOfSelectedFeatures = []; all(queryTaskToDoList).then(function(featureSetList) { //this function returns a list of feature sets from all queryTask executions. dojo.forEach(featureSetList, function(featureSet) { listOfSelectedFeatures.push(featureSet); }); });
Try:var query = new esri.tasks.Query(); query.geometry = area.geometry; var listOfSelectedFeatures = []; for (var j = 0; j < map.graphicsLayerIds.length; j++) { var currentLayer = map.getLayer(map.graphicsLayerIds); if (currentLayer.declaredClass === "esri.layers.FeatureLayer") { currentLayer.selectFeatures(query, currentLayer.SELECTION_NEW, function (featureSet) { listOfSelectedFeatures.concat(featureSet.features); }); } }
Please be noted that
1. The above code only deals with feature layers. Pure graphics layers should be filtered out since graphics layer has no selectFeatures method.
2. listOfSelectedFeatures may contain features in mixed spatial types.
var listOfSelectedFeatures = []; $.each(areas, function (ind, area) { var query = new esri.tasks.Query(); query.geometry = area.geometry; for (var j = 0; j < GISViewer.map.graphicsLayerIds.length; j++) { var currentLayer = GISViewer.map.getLayer(GISViewer.map.graphicsLayerIds); if (currentLayer.visible) { if (currentLayer.declaredClass === "esri.layers.FeatureLayer") { currentLayer.selectFeatures(query, currentLayer.SELECTION_NEW, function (featureSet) { listOfSelectedFeatures.push.apply(listOfSelectedFeatures, featureSet); }); } } } });
If you know all the layers you need to select, you may try assign a queryTask for each layer , and after you get the polygon to select features, try"var queryTask1 = new QueryTask(serviceurl1); var queryTask2 = new QueryTask(serviceurl2); var queryTask3 = new QueryTask(serviceurl3); ... queryTaskList = [queryTask1, queryTask2,queryTask3...]; var query = new Query(); query.spatialRelationship = Query.SPATIAL_REL_CONTAINS; query.geometry = area.geometry; var queryTaskToDoList = dojo.map(queryTaskList, function(item, index){ return item.execute(query) }): var listOfSelectedFeatures = []; all(queryTaskToDoList).then(function(featureSetList) { //this function returns a list of feature sets from all queryTask executions. dojo.forEach(featureSetList, function(featureSet) { listOfSelectedFeatures.push(featureSet); }); });
Thanks for your solution.
Your solution is doing query against service directly which would introduce client server communication.
What I am trying to do is querying feature layer using existed client side data.
I will try your solution when there comes a need.
Thanks again.
Tony