Friday 6 January 2017

Spatial query in ArcGIS Javascript Api 3.1


I have scenario in which I have to select features drawing a polygon and and get the attribute values in to a tables or lists.The features on the map consist of polygon, line,point at the same time so when he selects the features according to layer name I have to bind to separate tables.Is there any example tackling this scenario.



Answer



Adapted from some code I have -- untested here -- the key is using the dojo DeferredList so that you know when all the queries to the seperate layers have returned.



When building the table I would reccomend the DataTables jquery based library -- works well for me, lots of features. http://www.datatables.net/


function selectFeaturesFromPolygon() {
// CONNECT ON DRAW END EVENT
drawToolbarDrawEndEvent = dojo.connect(drawToolbar, 'onDrawEnd', function (geom) {
//clearCurrentSearchResults();
var aDeferreds = [],
deferredList,
query = new esri.tasks.Query();

query.geometry = geom;

query.returnGeometry = true;
query.outFields = ["*"];

if (geom) {
queryTask = new esri.tasks.QueryTask(FeatureServiceName1);
//push multiple queries into this array
aDeferreds.push(queryTask.execute(query));


queryTask = new esri.tasks.QueryTask(FeatureServiceName2);

//push multiple queries into this array
aDeferreds.push(queryTask.execute(query));

queryTask = new esri.tasks.QueryTask(FeatureServiceName3);
//push multiple queries into this array
aDeferreds.push(queryTask.execute(query));

// create a deferred list to aggregate the state for all identify queries
deferredList = new dojo.DeferredList(aDeferreds);
deferredList.then(function (aQueryResults) {

//returns when all queries have finished
//"aQueryResults" is 2D array of results
//array[n][0] boolean true or false, success or failure of individual call
//array[n][1] is the array of identity results returned
buildTableFromMultipleResults(aQueryResults);
}, function (err) {
console.log("Error Occurred: " + err);
});
}
drawToolbar.activate(esri.toolbars.Draw.POLYGON);

});
drawToolbar.activate(esri.toolbars.Draw.POLYGON);
}


//datatable usage would be like this -- this is just a sample, you need to parse aQueryResults
//and put the values into cols, rows and data
//add some html somewhere

function buildTableFromMultipleResults(aQueryResults) {


var cols = [],
row = [],
data = [];

//create columns
$.each(results.fields, function (index, value) {
cols.push({ 'sTitle': value.name });
});

//create rows and push into data

$.each(results.features, function (index, value) {
row = [];
$.each(value.attributes, function (index2, value2) {
row.push(value2);
});
data.push(dojo.clone(row));
});

oTable = $('#tableSearchResults').dataTable({
"aaData": data,

"aoColumns": cols,
"aoColumnDefs": [{ "bSortable": false, "aTargets": [0, 1] },
{ "bSearchable": false, "aTargets": [0, 1] },
{ "bVisible": false, "aTargets": currentSearchResults.hiddenFields },
{ "fnRender": function (o, val) {
if (val !== null) {
return Math.round(val * 1000) / 1000;
}
else {
return "";

}
}, "aTargets": currentSearchResults.rounded
}
],
"aaSorting": [[5, 'asc']],
"iDisplayLength": 25,
"aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
"bDestroy": true,
"sDom": 'liT<"clear">tp'
});

}

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...