Since version: 1.16
The feature reduction popup element profile allows map authors to write expressions that return a dictionary representing either a rich text, fields table, or media (i.e. a chart or an image) popup element within a popup for a cluster or bin. The returned dictionary must follow the Web Map Specification for a popupElement. When the popup opens, the expression will execute using the aggregate feature's attributes as variables. The app executing the expression will render the popup element as defined by the expression.
Unlike the Feature Reduction Popup profile, this profile allows popup authors to return multiple values within a single element.
Context
The following products implement this profile:
Spatial reference
The spatial reference of the map in which the expression executes determines the execution context's spatial reference.
Time zone
The time zone of the map in which the expression executes determines the execution context's default time zone.
Profile variables
Variable Name | Type | Description |
---|---|---|
$feature | Feature | Provides access to the aggregate fields defined in either clustering or binning popups, such as $feature.cluster and any other fields summarized from the points represented by the aggregate (e.g. $feature.cluster ). |
$aggregatedFeatures | FeatureSet | A FeatureSet containing all the features represented by the cluster or bin. |
Function bundles
Core | Geometry | Data Access | Portal Access
Return types
See the Web Map Specification for popupElement for a list of properties required for constructing a valid popup element dictionary.
Example
Returns a HTML list that describes the number of power plants used to generate power for each fuel type in the cluster.
Expects($aggregatedFeatures, "fuel1")
var statsFS = GroupBy($aggregatedFeatures,
[
{ name: 'Type', expression: 'fuel1'},
],
[ // statistics to return for each fuel type
{ name: 'num_features', expression: '1', statistic: 'COUNT' }
]
);
var ordered = OrderBy(statsFs, 'num_features DESC');
var list = "<ol>";
for (var group in ordered){
list += `<li>${group.Type} (${Text(group.num_features, "#,###")})</li>`
}
list += "</ol>";
return {
type: "text",
text: list
}