Saturday 14 January 2017

arcgis javascript api - Configurable Map Viewer (CMV) - average the values of the points


I have been able to select points and find the sum of the points. What I really need is to average the points. Here is my (acquired from someone else) code for finding the sum.


define([
'dojo/_base/declare',
'dijit/_WidgetBase',
'dijit/_TemplatedMixin',

'dijit/_WidgetsInTemplateMixin',
'esri/toolbars/draw',
'esri/InfoTemplate',
'esri/layers/FeatureLayer',
'esri/symbols/SimpleMarkerSymbol',
'esri/symbols/SimpleLineSymbol',
'esri/Color',
'esri/tasks/query',
'dijit/form/Button',
'dojo/_base/lang',

'dojo/on',
'dojo/_base/array',
'dojo/dom',
'dojo/text!./Select/templates/Select.html',
'xstyle/css!./Select/css/Select.css'
], function (declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Draw, InfoTemplate, FeatureLayer, SimpleMarkerSymbol, SimpleLineSymbol, Color, Query, Button, lang, on, arrayUtil, dom, SelectTemplate, css) {
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
widgetsInTemplate: true,
templateString: SelectTemplate,
selectTools: null,


postCreate: function () {
this.selectTools = new Draw(this.map);

this.selectQuery = new Query();

on(this.selectTools, "DrawEnd", lang.hitch(this, function (geometry) {
this.selectTools.deactivate();
this.selectQuery.geometry = geometry;


this.featureLayer.selectFeatures(this.selectQuery,
FeatureLayer.SELECTION_NEW);
}));
this.fieldsSelectionSymbol =
new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 10,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([255,0,0]), 1),
new Color([0,255,0,0.25]));



var infoTemplate = new InfoTemplate(this.title, this.content);

this.featureLayer = new FeatureLayer(this.featureLayerURL,
{
mode: FeatureLayer.MODE_ONDEMAND,
infoTemplate: infoTemplate,
outFields: ["*"]
});

this.featureLayer.setDefinitionExpression(this.defExpress);

this.featureLayer.setSelectionSymbol(this.fieldsSelectionSymbol);
this.featureLayer.on("selection-complete", lang.hitch(this, 'sumGasProduction'));
var clearMsg = this.clearSelectMsg;
this.featureLayer.on("selection-clear", function () {
dom.byId('messages').innerHTML = "" + clearMsg + "";
});

this.map.addLayer(this.featureLayer);

},


select: function () {
this.selectTools.activate(Draw.EXTENT);
},
clearSelection: function () {
this.featureLayer.clearSelection();
},


sumGasProduction: function (event) {

var productionSum = 0;
var sumField = this.fieldToSum;

arrayUtil.forEach(event.features, function (feature) {
productionSum += feature.attributes[sumField];

});
dom.byId('messages').innerHTML = "" + this.selectSumMsgPrefix + " " + productionSum + " " + this.selectSumUnits + ". ";
}
});

});

Secondly my clear selection button is not working.




Here is my code for clear selection:








I have no idea how to get the average. I was trying to use what you said in another answer but I could not figure it out. I have found an example that does find the average


https://developers.arcgis.com/javascript/jssamples/query_bypoly.html


      function average(fset, att) {
var features = fset.features;
var sum = 0;
var featuresLength = features.length;
for (var x = 0; x < featuresLength; x++) {
sum = sum + features[x].attributes[att];

}
return Math.round(sum/featuresLength);
}

Answer



You did not provide the template HTML for your button so this is just a guess as to the issue. Your button needs an 'onClick' event to execute your 'clearSelection' method. Something like this:


data-dojo-attach-event="onClick:clearSelection"

To display an average instead of a sum, you can use the original method you posted with a slight variation:


avgGasProduction: function (event) {
var productionSum = 0, productionAvg = 0;

var sumField = this.fieldToSum;

arrayUtil.forEach(event.features, function (feature) {
productionSum += feature.attributes[sumField];
});

if (event.features && event.features.length > 0) {
productionAvg = Math.round(productionSum / event.features.length)
}


dom.byId('messages').innerHTML = "" + this.selectSumMsgPrefix + " " + productionAvg + " " + this.selectSumUnits + ". ";
}

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...