@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
98 lines (92 loc) • 6.87 kB
TypeScript
/**
* Provides utility functions for generating [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) and SQL expressions
* intended for use in an [predominance renderer](https://developers.arcgis.com/javascript/latest/references/core/smartMapping/renderers/predominance/).
*
* @since 4.23
* @see [predominance renderer](https://developers.arcgis.com/javascript/latest/references/core/smartMapping/renderers/predominance/)
*/
import type CSVLayer from "../../../layers/CSVLayer.js";
import type FeatureLayer from "../../../layers/FeatureLayer.js";
import type GeoJSONLayer from "../../../layers/GeoJSONLayer.js";
import type OGCFeatureLayer from "../../../layers/OGCFeatureLayer.js";
import type OrientedImageryLayer from "../../../layers/OrientedImageryLayer.js";
import type SceneLayer from "../../../layers/SceneLayer.js";
import type StreamLayer from "../../../layers/StreamLayer.js";
import type SubtypeGroupLayer from "../../../layers/SubtypeGroupLayer.js";
import type WFSLayer from "../../../layers/WFSLayer.js";
import type CatalogFootprintLayer from "../../../layers/catalog/CatalogFootprintLayer.js";
import type KnowledgeGraphSublayer from "../../../layers/knowledgeGraph/KnowledgeGraphSublayer.js";
import type SubtypeSublayer from "../../../layers/support/SubtypeSublayer.js";
/**
* Returns [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) and SQL expressions used for visualizing the predominant category (or field) among a set of competing fields.
*
* @param layer - The layer from which to generate the Arcade and SQL expressions for querying predominance statistics.
* @param fieldNames - An array of numeric field names for which to create the Arcade and SQL expressions used to build the predominance renderer.
* @returns Returns the Arcade and SQL expressions used for creating a predominance renderer. These expressions are used to query a feature service or the client-side layer for statistics relevant to creating the default predominance renderer for the given fields.
* @example
* const predominanceExpressions = predominanceUtils.getPredominanceExpressions({
* layer: featureLayer,
* fields: ["Corn", "Wheat", "Soybeans", "Vegetables", "Cotton"]
* });
*
* console.log(`value expression for getting the predominant category from the given fields: ${predominanceExpressions.predominantCategory.valueExpression}`);
*/
export function getPredominanceExpressions(layer: FeatureLayer | SceneLayer | CSVLayer | GeoJSONLayer | WFSLayer | OGCFeatureLayer | StreamLayer | OrientedImageryLayer | KnowledgeGraphSublayer | SubtypeGroupLayer | CatalogFootprintLayer | SubtypeSublayer, fieldNames: string[]): PredominantExpressions;
/** The result object returned from the [getPredominanceExpressions()](https://developers.arcgis.com/javascript/latest/references/core/smartMapping/statistics/support/predominanceUtils/#getPredominanceExpressions) method. */
export interface PredominantExpressions {
/** The Arcade expression used to get the predominant category among a set of fields. */
predominantCategory: PredominantCategoryInfo;
/** The Arcade and SQL expressions used to query the server or client-side layer for statistics of the sum of all competing fields considered for the predominance visualization. */
size: SizeExpressionInfo;
/** The Arcade and SQL expressions used to query the server or client-side layer for statistics of the percentage among all competing fields comprised by the predominant category. */
opacity: OpacityExpressionInfo;
}
/** SQL expressions used to query feature services for predominant values and related statistics given a set of fields. */
export interface SQLExpressionInfo {
/** The SQL expression used for querying the predominant category given a set of fields. This expression should match the logic of the Arcade expression in the parent info object. */
sqlExpression: string;
/** The SQL where clause used to query the predominant value. This should be used to ensure negative values are not considered in the predominance calculation. */
sqlWhere: string;
}
export interface PredominantCategoryInfo {
/**
* valueExpression - An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression following
* the specification defined by the [Arcade Visualization Profile](https://developers.arcgis.com/javascript/latest/arcade/#visualization).
* The expression should be used to return the name of the predominant field among a set of competing fields. It may reference field values using the `$feature`
* profile variable and must return a string.
*/
valueExpression: string;
}
/** Contains the Arcade and SQL expressions used to query feature services and client-side layers for the sum of all values considered in a predominance visualization. */
export interface SizeExpressionInfo {
/**
* An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression following
* the specification defined by the [Arcade Visualization Profile](https://developers.arcgis.com/javascript/latest/arcade/#visualization).
* The expression should be used to calculate the sum of a set of numeric fields.
* It may reference field values using the `$feature` profile variable and must return a number.
*/
valueExpression: string;
/** The SQL expressions used for querying the sum of a set of fields. This expression should match the logic of the Arcade expression. */
statisticsQuery: SQLExpressionInfo;
/** The SQL expressions used for querying the histogram for the sum of a set of fields. */
histogramQuery: SQLExpressionInfo;
}
/**
* Contains the Arcade and SQL expressions used to query feature services and client-side layers for the strength
* of the predominant category compared with all other categories. In other words, these expressions should
* calculate the percentage of the sum the winning value comprises.
*/
export interface OpacityExpressionInfo {
/**
* An [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expression following
* the specification defined by the [Arcade Visualization Profile](https://developers.arcgis.com/javascript/latest/arcade/#visualization).
* The expression should be used to calculate the percentage the winning field
* comprises among of a set of numeric fields.
* It may reference field values using the `$feature` profile variable and must return a number.
*/
valueExpression: string;
/** The SQL expressions used for querying the percentage the predominant value comprises among of a set of fields. This expression should match the logic of the Arcade expression. */
statisticsQuery: SQLExpressionInfo;
/** The SQL expressions used for querying the histogram using the percentage the predominant value comprises among of a set of fields. */
histogramQuery: SQLExpressionInfo;
}