FeatureReductionBinning

AMD: require(["esri/layers/support/FeatureReductionBinning"], (FeatureReductionBinning) => { /* code goes here */ });
ESM: import FeatureReductionBinning from "@arcgis/core/layers/support/FeatureReductionBinning";
Class: esri/layers/support/FeatureReductionBinning
Inheritance: FeatureReductionBinning Accessor
Since: ArcGIS API for JavaScript 4.24
beta

This class configures binning as a means of reducing and summarizing point features in a FeatureLayer, CSVLayer, GeoJSONLayer, WFSLayer, or OGCFeatureLayer. This feature reduction method spatially groups points into bins based on predefined geohashes.

Display all points Points aggregated to bins
binning-disabled binning-enabled

Binning only applies to layers with Point geometries in a MapView. It currently does not apply to layers with polyline and polygon geometries.

Known Limitations

  • Not supported in 3D SceneView.
  • Not supported in MapImageLayer.
  • Only supported for layers with a point geometry type.
  • Layer views with an applied FeatureEffect cannot be binned.
See also:
Example:
layer.featureReduction = {
  type: "binning",
  renderer: {
    type: "simple",  // autocasts as new SimpleRenderer()
    symbol: {
      type: "simple-fill",  // autocasts as new SimpleFillSymbol()
      outline: {  // autocasts as new SimpleLineSymbol()
        width: 0.5,
        color: "white"
      }
    },
    visualVariables: [{
      type: "color",
      field: "aggregateCount",
      stops: [
        { value: 1, color: "white" },
        { value: 1000, color: "blue" }
      ]
    }]
  },
  popupTemplate: {
    content: "This bin contains <b>{aggregateCount}</b> features.",
    fieldInfos: [{
      fieldName: "aggregateCount",
      format: {
        digitSeparator: true,
        places: 0
      }
    }]
  }
};

Constructors

new FeatureReductionBinning(properties)
Parameter:
properties Object
optional

See the properties for a list of all the properties that may be passed into the constructor.

Property Overview

Any properties can be set, retrieved or listened to. See the Working with Properties topic.
Show inherited properties Hide inherited properties
Name Type Summary Class
Stringmore details

The name of the class.

more detailsAccessor
AggregateField[]more details

An array of aggregate fields that summarize layer fields of features contained within each bin.

more detailsFeatureReductionBinning
Numbermore details

The fixed geohash level used to create bins.

more detailsFeatureReductionBinning
LabelClass[]more details

Defines labels for bins as an array of LabelClass.

more detailsFeatureReductionBinning
Booleanmore details

Indicates whether to display labels for the bins.

more detailsFeatureReductionBinning
Booleanmore details

Indicates whether to display a popup when a user clicks or touches a bin.

more detailsFeatureReductionBinning
PopupTemplatemore details

The PopupTemplate to apply to bins.

more detailsFeatureReductionBinning
Renderermore details

The renderer used to style the bins.

more detailsFeatureReductionBinning
Stringmore details

The feature reduction type.

more detailsFeatureReductionBinning

Property Details

declaredClass Stringreadonly inherited

The name of the class. The declared class name is formatted as esri.folder.className.

Autocasts from Object[]

An array of aggregate fields that summarize layer fields of features contained within each bin. The table below describes the aggregate fields created internally, which you can reference in popups and labels without defining your own fields.

Aggregate fields:

Field Name Type Description
aggregateId number | string The unique ID of the aggregate graphic.
aggregateCount number The number of features represented by the bin.
Example:
featureReduction.fields = [{
  name: "SUM_population",
  outStatistic: {
    onStatisticField: "population",
    statisticType: "sum"
  }
}, {
  name: "AVG_age",
  outStatistic: {
    onStatisticField: "age",
    statisticType: "avg"
  }
}];
fixedBinLevel Number

The fixed geohash level used to create bins. Currently, bin sizes do not dynamically change as the user zooms in and out of the map. Larger numbers will create smaller bins.

Default Value:3
Example:
featureReduction.fixedBinLevel = 4;
labelingInfo LabelClass[]autocast
Autocasts from Object[]

Defines labels for bins as an array of LabelClass. When set, labels independent of the layer.labelingInfo are used to convey information about each bin. This can include the count of all features in the bin, the average, or sum of a numeric attribute.

Any aggregate field defined in fields can be referenced in the label.

Multiple Label classes with different where clauses can be used to define several labels with varying styles on the same feature. Likewise, multiple label classes may be used to label different types of bins (e.g. blue labels for bins with few features and red labels for bins with many features).

Example:
// Displays the count inside the bin
layer.featureReduction = {
  type: "binning",
  labelingInfo: [{
    labelExpressionInfo: {
      expression: "$feature.aggregateCount"
    },
    symbol: {
      type: "text",
      color: "white",
      font: {
        size: "12px"
      },
      haloSize: 1,
      haloColor: "black"
    }
  }]
};
labelsVisible Boolean

Indicates whether to display labels for the bins. If true, labels will appear as defined in the labelingInfo property.

Default Value:true
Example:
// Turns off bin labels, but preserves labelingInfo
const featureReduction = layer.featureReduction.clone();
featureReduction.labelsVisible = false;
layer.featureReduction = featureReduction;
popupEnabled Boolean

Indicates whether to display a popup when a user clicks or touches a bin. If false, the popup as defined in the popupTemplate will be persisted, but won't be displayed on click/tap.

Default Value:true
Example:
// Turns off popups, but preserves popupTemplate
const featureReduction = layer.featureReduction.clone();
featureReduction.popupEnabled = false;
layer.featureReduction = featureReduction;
popupTemplate PopupTemplateautocast

The PopupTemplate to apply to bins. When set, a popupTemplate independent of the layer.popupTemplate is used. This popup can display summary information for each bin, such as feature count or any other field defined in fields.

The PopupTemplate may contain one or more Arcade expressions following the specification defined by the Arcade Feature Reduction Popup Profile. Expressions must return a string or a number and may access data values from the bin and its aggregated features with the $feature and $aggregatedFeatures global variables.

See also:
Examples:
// enables binning on the layer with a
// popup describing the number of features represented by each bin
layer.featureReduction = {
  type: "binning",
  popupTemplate: {
    content: "This bin contains <b>{aggregateCount}</b> features."
    fieldInfos: [{
      fieldName: "aggregateCount",
      format: {
        digitSeparator: true,
        places: 0
      }
    }]
  }
};
// enables binning on the layer with a
// popup describing the average value of
// the temperature field
layer.featureReduction = {
  type: "binning",
  fields: [{
    name: "avg_temperature",
    outStatistic: {
      onStatisticField: "temperature",
      statisticType: "avg"
    }
  }],
  popupTemplate: {
    content: [{
      type: "text",
      text: "This bin contains <b>{aggregateCount}</b> features."
    }, {
      type: "text",
      text: "The average temperature in this bin is <b>{avg_temperature}° F</b>."
    }],
    fieldInfos: [{
      fieldName: "aggregateCount",
      format: {
        digitSeparator: true,
        places: 0
      }
    }, {
      fieldName: "avg_temperature",
      format: {
        places: 1
      }
    }]
  }
};
// Displays an ordered list of the top 5 categories
// of features contained within the bin
layer.popupTemplate = {
  title: "Power plant summary",
  content: [{
   type: "expression",
   // lists the top 5 most common fuel types in the bin
   expressionInfo: {
     expression: `
       Expects($aggregatedFeatures, "fuel1")

       var statsFS = GroupBy($aggregatedFeatures,
         [
           { name: 'Type', expression: 'fuel1'},
         ],
         [
           { name: 'num_features', expression: '1', statistic: 'COUNT' }
         ]
       );
       var ordered = Top(OrderBy(statsFs, 'num_features DESC'), 5);

       // create an HTML ordered list as a string and return in a rich text element
       var list = "<ol>";

       for (var group in ordered){
         list += \`<li>\${group.Type} (\${Text(group.num_features, "#,###")})</li>\`
       }
       list += "</ol>";

       return {
         type: "text",
         text: list
       }
     `,
     title: "List of fuel types"
   }
 }]
};
renderer Rendererautocast

The renderer used to style the bins. Depending on the renderer type, features may be visualized with the same symbol or with varying symbols based on the values of the provided fields.

Any aggregate field defined in fields may be used by the renderer. All binning configurations have access to the default aggregateCount field.

Typically, binning visualizations use the aggregateCount field in a color visual variable to visualize the total count of points within each bin.

See also:
Example:
featureReduction.renderer = {
  type: "simple",  // autocasts as new SimpleRenderer()
  symbol: {
    type: "simple-fill",  // autocasts as new SimpleFillSymbol()
    outline: {  // autocasts as new SimpleLineSymbol()
      width: 0.5,
      color: "white"
    }
  },
  visualVariables: [{
    type: "color",
    field: "aggregateCount",
    stops: [
      { value: 1, color: "white" },
      { value: 1000, color: "blue" }
    ]
  }]
};
type String

The feature reduction type.

For FeatureReductionBinning the type is always "binning".

Example:
// enables binning on the layer
layer.featureReduction = {
  type: "binning"
};

Method Overview

Name Return Type Summary Class
FeatureReductionBinningmore details

Creates a deep clone of the FeatureReductionBinning object.

more detailsFeatureReductionBinning
*more details

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product.

more detailsFeatureReductionBinning
Objectmore details

Converts an instance of this class to its ArcGIS portal JSON representation.

more detailsFeatureReductionBinning

Method Details

Creates a deep clone of the FeatureReductionBinning object.

Returns:
Type Description
FeatureReductionBinning A deep clone of the object that invoked this method.
Example:
// Creates a deep clone of the feature reduction object
const fr = layer.featureReduction.clone();
fr.fixedBinSize = 5;
layer.featureReduction = fr;
fromJSON(json){*}static

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product. The object passed into the input json parameter often comes from a response to a query operation in the REST API or a toJSON() method from another ArcGIS product. See the Using fromJSON() topic in the Guide for details and examples of when and how to use this function.

Parameter:
json Object

A JSON representation of the instance in the ArcGIS format. See the ArcGIS REST API documentation for examples of the structure of various input JSON objects.

Returns:
Type Description
* Returns a new instance of this class.
toJSON(){Object}

Converts an instance of this class to its ArcGIS portal JSON representation. See the Using fromJSON() guide topic for more information.

Returns:
Type Description
Object The ArcGIS portal JSON representation of an instance of this class.

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.