- /*global define, i18n */
-
- /**
- * @module Tools
- */
-
- /**
- * PopulationTool.
- *
- * Computes the total population of a selected area. When the user draws a polygon, the population will
- * be displayed in the bottom right corner.
- *
- * @class PopulationTool
- * @static
- * @uses dojo/dom
- * @uses dojo/string
- * @uses dojo/_base/lang
- * @uses esri/config
- * @uses esri/graphic
- * @uses esri/tasks/Geoprocessor
- * @uses esri/tasks/FeatureSet
- * @uses esri/toolbars/draw
- * @uses esri/symbols/SimpleLineSymbol
- * @uses esri/symbols/SimpleFillSymbol
- * @uses Map
- * @uses GlobalStorage
- * @extends BaseTool
- */
-
- define([
- // Dojo
- "dojo/dom", "dojo/string", "dojo/_base/lang",
- // Esri
- "esri/config", "esri/graphic", "esri/tasks/Geoprocessor", "esri/tasks/FeatureSet",
- "esri/toolbars/draw", "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol",
- // Ramp
- "ramp/map", "ramp/globalStorage", "tools/baseTool"
- ],
- function (
- // Dojo
- dom, string, dojoLang,
- // Esri
- esriConfig, Graphic, Geoprocessor, FeatureSet, Draw, SimpleLineSymbol, SimpleFillSymbol,
- // Ramp
- RampMap, GlobalStorage, BaseTool) {
- "use strict";
-
- var ui,
- geoprocessor,
- populationApp,
-
- that;
-
- /**
- * Compute an estimated amount of people in a specified polygon.
- *
- * @method computeZonalStats
- * @private
- * @param {Object} evtObj an object representing the event.
- *
- */
- function computeZonalStats(evtObj) {
- var geometry = evtObj.geometry,
- graphic,
- features,
- featureSet,
- params;
-
- that.working(true);
-
- /*After user draws shape on map using the draw toolbar compute the zonal*/
- populationApp.map.graphics.clear();
- graphic = populationApp.map.graphics.add(new Graphic(geometry, new SimpleFillSymbol()));
- populationApp.map.graphics.add(graphic);
-
- features = [];
- features.push(graphic);
-
- featureSet = new FeatureSet();
- featureSet.features = features;
-
- params = {
- inputPoly: featureSet
- };
- geoprocessor.execute(params);
- }
-
- /**
- * Display the calculated population on the map.
- *
- * @method outputTotalPopulation
- * @private
- * @param {Object} evtObj an object representing the event.
- *
- */
- function outputTotalPopulation(evtObj) {
- var results = evtObj.results,
- totalPopulation = Math.floor(results[0].value.features[0].attributes.SUM);
-
- that.working(false);
-
- totalPopulation = string.substitute("${number:dojo.number.format}", { number: totalPopulation });
- displayOutput(totalPopulation);
- }
-
- ui = {
- /**
- * Initiates additional UI components of the Tool.
- *
- * @method ui.init
- * @private
- */
- init: function () {
- var map = RampMap.getMap(),
- toolbar = new Draw(map);
-
- //TODO store this URL in config
- geoprocessor = new Geoprocessor("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/GPServer/PopulationSummary");
-
- geoprocessor.setOutputSpatialReference(map.spatialReference);
- geoprocessor.on("execute-complete", outputTotalPopulation);
-
- toolbar.on("draw-end", computeZonalStats);
-
- populationApp = {
- map: map,
- toolbar: toolbar
- };
- }
- };
-
- /**
- * Activates the Tool. This method is passed to the `initToggle` method and is triggered by the BaseTool logic.
- *
- * @method activate
- * @private
- */
- function activate() {
- populationApp.toolbar.activate(Draw.FREEHAND_POLYGON);
-
- displayOutput(i18n.t(that.ns + ":na"));
- }
-
- /**
- * Deactivates the Tool. This method is passed to the `initToggle` method and is triggered by the BaseTool logic.
- *
- * @method deactivate
- * @private
- */
- function deactivate() {
- populationApp.toolbar.deactivate();
- clearMap();
- }
-
- /**
- * Clears the map. This method is passed to the `initToggle` method as the `defaultAction`
- * to be triggered by the BaseTool logic when the `float-default-button` is clicked.
- *
- * @method clearMap
- * @private
- */
- function clearMap() {
- populationApp.map.graphics.clear();
-
- displayOutput(i18n.t(that.ns + ":na"));
- }
-
- /**
- * Displays the tool's output by calling BaseTool's `displayOutput` function.
- *
- * @method displayOutput
- * @private
- */
- function displayOutput(value) {
- that.displayTemplateOutput(
- {
- totalPopulationLabel: i18n.t(that.ns + ":population"),
- populationOutput: value
- }
- );
- }
-
- return dojoLang.mixin({}, BaseTool, {
- /**
- * Initialize the population tool
- *
- * @method init
- * @chainable
- * @constructor
- *
- */
- init: function (selector, d) {
- that = this;
- this.initToggle(selector, d,
- {
- activate: activate,
- deactivate: deactivate,
- defaultAction: clearMap
- }
- );
-
- ui.init();
-
- return this;
- },
-
- name: "populationTool"
- });
- });
-