UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

139 lines (130 loc) 6.8 kB
/** * Convenience methods for getting field names used for feature layer * [labeling](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#labelingInfo), * [elevation](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#elevationInfo), * [editor tracking](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#editFieldsInfo) * and time span. * * @since 4.11 */ import type CSVLayer from "../CSVLayer.js"; import type FeatureLayer from "../FeatureLayer.js"; import type GeoJSONLayer from "../GeoJSONLayer.js"; import type OGCFeatureLayer from "../OGCFeatureLayer.js"; import type SceneLayer from "../SceneLayer.js"; import type StreamLayer from "../StreamLayer.js"; import type SubtypeGroupLayer from "../SubtypeGroupLayer.js"; import type Field from "./Field.js"; import type FieldsIndex from "./FieldsIndex.js"; import type { RendererUnion } from "../../renderers/types.js"; /** * Gets the appropriate display field name to label a feature. * * @param layer - An array of fields to determine the display field from. * @returns The name of the display field to use for labeling. * @since 4.15 */ export function getDisplayFieldName(layer: FeatureLayer | CSVLayer | GeoJSONLayer | OGCFeatureLayer | SceneLayer | StreamLayer): string | null | undefined; /** * Returns an array of field names used in the Arcade expression for calculating the z-values of features * in the given feature layer's [FeatureLayer.elevationInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#elevationInfo). * * @param layer - The featureLayer to extract fields required for calculating feature z-values. * @returns When resolved, returns an array of field names. */ export function getElevationFields(layer: FeatureLayer | null | undefined): Promise<string[]>; /** * Returns an array of field names related to time. * It includes the fields from the [FeatureLayer.timeInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#timeInfo), * and the `trackIdField`. * * @param layer - The Feature Layer from which to extract time fields. * @returns When resolved, returns an array of time field names. */ export function getTimeFields(layer: FeatureLayer | null | undefined): Promise<string[]>; /** * Returns an array of editor tracking field names for a given layer. * It includes the fields from the [FeatureLayer.editFieldsInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#editFieldsInfo). * * @param layer - The layer from which to extract editor tracking fields. * @returns An array of field names used for editor tracking. */ export function getFeatureEditFields(layer: FeatureLayer | SubtypeGroupLayer): string[]; /** * Returns an array of geometry field names for a given layer. * * @param layer - The layer to extract geometry fields from. * @returns An array of geometry field names. * @since 4.19 */ export function getFeatureGeometryFields(layer: FeatureLayer | SubtypeGroupLayer): string[]; /** * Returns an array of field names used in the Arcade expression for labeling features * in the given feature layer's [FeatureLayer.labelingInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#labelingInfo). * * @param layer - The Feature Layer from which to extract label fields. * @returns When resolved, returns an array of field names used for labeling. */ export function getLabelingFields(layer: FeatureLayer | null | undefined): Promise<string[]>; /** Value from a specified field. */ export type FieldValue = null | undefined | string | number; /** * Returns an array of field names referenced in one or more [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions * to be set on the given layer in either the renderer, labels, or popup template. * This is useful for when you want to request the data for these fields prior to updating a renderer * for fast visual updates or when you want to execute a client-side query on that data prior to * setting the Arcade expressions on the layer. * * @param layer - The layer for which the Arcade `expressions` are authored. This layer must have a `fields` property. * @param expressions - An array of [Arcade](https://developers.arcgis.com/javascript/latest/arcade/) expressions to be set on the given `layer`. * @returns Returns an array of field names declared either by the `$feature.fieldName` or `$feature[fieldName]` syntax. * @since 4.15 * @see [Arcade - expression language](https://developers.arcgis.com/javascript/latest/arcade/) * @example * const windDirectionExpression = ` * $feature["WIND_DIRECT"]; * $feature["WIND_SPEED"]; * var DEG = $feature.WIND_DIRECT; * var SPEED = $feature.WIND_SPEED; * var DIR = When( SPEED == 0, "", * (DEG < 22.5 && DEG >= 0) || DEG > 337.5, "N", * DEG >= 22.5 && DEG < 67.5, "NE", * DEG >= 67.5 && DEG < 112.5, "E", * DEG >= 112.5 && DEG < 157.5, "SE", * DEG >= 157.5 && DEG < 202.5, "S", * DEG >= 202.5 && DEG < 247.5, "SW", * DEG >= 247.5 && DEG < 292.5, "W", * DEG >= 292.5 && DEG < 337.5, "NW", "" ); * return SPEED + " mph " + DIR; * `; * * const labelExpressions = [ * "Round($feature.TEMP) + '° F';", * "$feature.R_HUMIDITY + '% RH'", * "$feature.STATION_NAME", * windDirectionExpression * ]; * * // Assume the layer has only requested the OBJECTID field * fieldUtils.getExpressionFields(layer, labelExpressions) * .then(function(fieldNames){ * * // fieldNames = ["R_HUMIDITY", "STATION_NAME", "TEMP", "WIND_DIRECT", "WIND_SPEED"] * layer.outFields = fieldNames; * * // Do something else like a client-side query with those fields * }).catch(function(error){ * console.error(error); * }); */ export function getExpressionFields(layer: FeatureLayer | CSVLayer | GeoJSONLayer | SceneLayer | StreamLayer, expressions: string[]): Promise<string[]>; /** * Returns an array of field names used in the layer's [Renderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/Renderer/). * * @param renderer - Layer's renderer to collect field names used in that renderer. * @param fieldsIndex - The field index of the layer. It can be used to make case-insensitive lookups for a field by name. * @returns When resolved, returns an array of field names required by the layer's renderer, sorted in ascending order. * @since 4.30 * @example const rendererFields = fieldUtils.getRendererFields(layer.renderer, layer.fieldsIndex); */ export function getRendererFields(renderer: RendererUnion | null | undefined, fieldsIndex: FieldsIndex<Field>): Promise<string[]>;