Intro to binning

This sample demonstrates how to enable binning on a FeatureLayer. Binning is a method of aggregating points in a FeatureLayer, CSVLayer, GeoJSONLayer, WFSLayer, or OGCFeatureLayer by grouping them in predefined bins. Bins are generated using geohashes.

Binning is configured on the featureReduction property of the layer. This property allows you to define a renderer, popupTemplate and labels that summarize the features that fall within each bin's boundaries. Bins do not have a default renderer, so you must define a renderer to see the bins.

Configure binning
Use dark colors for code blocksCopy
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
      const featureReduction = {
        type: "binning",
        fields: [
          new AggregateField({
            name: "aggregateCount",
            statisticType: "count"
          })
        ],
        fixedBinLevel: 6,
        labelsVisible: true,
        labelingInfo: [
          new LabelClass({
            minScale: 144448,
            maxScale: 0,
            deconflictionStrategy: "none",
            symbol: {
              type: "text",  // autocasts as new TextSymbol()
              color: "white",
              font: {
                family: "Noto Sans",
                size: 10,
                weight: "bold"
              },
              haloColor: colors[4],
              haloSize: 0.5
            },
            labelExpressionInfo: {
              expression: "Text($feature.aggregateCount, '#,###')"
            }
          })
        ],
        popupEnabled: true,
        popupTemplate: {
          title: "Car crashes",
          content: "{aggregateCount} car crashes occurred in this area."
        },
        renderer: {
          type: "simple",
          symbol: {
            type: "simple-fill",
            color: [0, 255, 71, 1],
            outline: null,
            outline: {
              color: "rgba(153, 31, 23, 0.3)",
              width: 0.3,
            },
          },
          visualVariables: [
            {
              type: "color",
              field: "aggregateCount",
              legendOptions: {
                title: "Number of crashes"
              },
              stops: [
                { value: 0, color: colors[0] },
                { value: 25, color: colors[1] },
                { value: 75, color: colors[2] },
                { value: 200, color: colors[3] },
                { value: 300, color: colors[4] }
              ]
            }
          ]
        }
      };

Binning only applies to layers with point geometries in a MapView.

Binning versus clustering

Conceptually, binning is very similar to clustering. Both, in addition to heatmaps, are methods for visualizing densities of points. The following are key differences to consider when choosing a method of feature reduction.

Clustering

Clustering aggregates points into clusters that don't indicate a definite boundary between clusters. Clusters always aggregate in screen space using a cluster radius. The actual geographic region that each cluster represents as aggregate points varies in size depending on the density and dispersion of points. One cluster may aggregate points from an area much larger than a neighboring cluster.

By default, the style of a cluster, it's size and color, are predetermined by the JS API's internal rendering engine to effectively summarize the underlying point data making up the cluster.

Clusters dynamically explode to smaller clusters as the user zooms in and coalesce to larger clusters as the user zooms out.

Binning

Bins aggregate points in a grid of rectangular bins created from geohashes. Bins always represent aggregated data in geographic space. The boundaries of each bin are discrete so there is no ambiguity regarding the geographic region of a bin's size and shape. Bins can be styled in the same way a layer can be styled. You can create aggregate fields to style the bins using any renderer that can be applied to a polygon FeatureLayer.

Bins are static and do not regenerate as the user zooms in and out in the map.

Binning

Learn how to aggregate point features spatially using bins.

Image preview of related sample Binning with aggregate fields

Binning with aggregate fields

This sample demonstrates how to define aggregate fields that can be used in the popup, labels, and renderer of a binned layer.

Image preview of related sample Binning - Filter by category

Binning - Filter by category

Demonstrates how to filter binned data by category.

Image preview of related sample Summarize binned data using Arcade

Summarize binned data using Arcade

Use Arcade in popups to summarize binned crimes by type

Image preview of related sample Intro to clustering

Intro to clustering

Intro to clustering

FeatureReductionBinning

Read the Core API Reference for more information.

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