import type Graphic from "../../Graphic.js"; 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 ParquetLayer from "../../layers/ParquetLayer.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 FeatureEffect from "../../layers/support/FeatureEffect.js"; import type FeatureFilter from "../../layers/support/FeatureFilter.js"; import type AttributeBinsFeatureSet from "../../rest/support/AttributeBinsFeatureSet.js"; import type AttributeBinsQuery from "../../rest/support/AttributeBinsQuery.js"; import type FeatureSet from "../../rest/support/FeatureSet.js"; import type Query from "../../rest/support/Query.js"; import type LayerView from "./LayerView.js"; import type HighlightOptions from "../support/HighlightOptions.js"; import type { ResourceHandle } from "../../core/Handles.js"; import type { AbortOptions } from "../../core/promiseUtils.js"; import type { QueryProperties } from "../../rest/support/Query.js"; import type { ObjectId } from "../types.js"; import type { LayerViewHighlightOptions } from "./types.js"; import type { HighlightOptionsProperties } from "../support/HighlightOptions.js"; import type { FeatureEffectProperties } from "../../layers/support/FeatureEffect.js"; import type { FeatureFilterProperties } from "../../layers/support/FeatureFilter.js"; /** * The set of layers that have FeatureLikeLayerView implementations. * * @see [CatalogFootprintLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/CatalogFootprintLayerView/) * @see [CSVLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/CSVLayerView/) * @see [FeatureLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/) * @see [GeoJSONLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/GeoJSONLayerView/) * @see [OGCFeatureLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/OGCFeatureLayerView/) * @see [OrientedImageryLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/OrientedImageryLayerView/) * @see [ParquetLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/ParquetLayerView/) * @see [StreamLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/) * @see [SubtypeGroupLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SubtypeGroupLayerView/) * @see [WFSLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/WFSLayerView/) * @see [KnowledgeGraphSublayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/KnowledgeGraphSublayerView/) */ export type FeatureLikeLayerViewLayer = CatalogFootprintLayer | CSVLayer | FeatureLayer | GeoJSONLayer | OGCFeatureLayer | OrientedImageryLayer | ParquetLayer | StreamLayer | SubtypeGroupLayer | WFSLayer | KnowledgeGraphSublayer; /** @since 5.0 */ export default abstract class FeatureLikeLayerView extends LayerView { /** * A list of attribute fields fetched for each feature including fields required for layer's `renderer` * `labelingInfo`, `elevationInfo`, and additional fields defined on the `outFields` properties. * The `availableFields` property is populated when the layerView has finished [LayerView.updating](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/#updating). * The `availableFields` is used when [filtering](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#filter) or querying features on the [client-side](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures). * * @since 4.11 * @see [dataUpdating](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#dataUpdating) * @example * const layerView = await view.whenLayerView(layer); * * // availableFields will become available once the * // layerView finishes updating * await reactiveUtils.whenOnce(() => !layerView.updating); * * try { * const results = await layerView.queryFeatures({ * outFields: layerView.availableFields, * where: "DEW_POINT > 10" * }); * console.log(results.features.length, " features returned"); * } catch(error) { * console.log("query failed: ", error); * } */ get availableFields(): string[]; /** * Indicates whether the layer view is currently fetching new features. It becomes `false` once all layer queries have finished executing. * Watch this property along with [LayerView.updating](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/#updating) property to know when to re-execute client-side queries after an update cycle. * For example, a query that returns the number of features available in the layer view should be executed when * `dataUpdating` becomes `false`. It's important to note that `dataUpdating` can only be `true` when `updating` is also `true`. * * @since 4.28 * @see [hasAllFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasAllFeatures) * @see [hasAllFeaturesInView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasAllFeaturesInView) * @see [hasFullGeometries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasFullGeometries) * @example * // watch layer view updating and dataUpdating to get the count of features * // available in layer view. Only execute the query once new features are fetched. * let dataWasUpdated = lv.dataUpdating; * reactiveUtils.watch(() => [lv.updating, lv.dataUpdating], * ([updating, dataUpdating]) => { * dataWasUpdated ||= dataUpdating; * if (!updating && dataWasUpdated) { * dataWasUpdated = false; * lv.queryFeatureCount().then((results)=>{ * console.log("number of features in layerView", results); * }); * } * }); */ get dataUpdating(): boolean; /** * The featureEffect can be used to draw attention to features of interest. * It allows for the selection of features via a * [FeatureEffect.filter](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureEffect/#filter), and an * [FeatureEffect.includedEffect](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureEffect/#includedEffect) and * [FeatureEffect.excludedEffect](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureEffect/#excludedEffect) * are applied to those features that respectively pass or fail the filter requirements. * * If the `featureEffect` is set on the layer, it will be inherited by `layerView.featureEffect` unless the developer overrides it on the layerView. The `layerView.featureEffect` * will take precedence over `layer.featureEffect` if both properties are set. * * > [!WARNING] * > * > **Known Limitations** * > * > FeatureEffect is not supported in the following scenarios: * > * In 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) * > * When [FeatureReductionCluster](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#featureReduction) is enabled * > * When a map is [printed](https://developers.arcgis.com/javascript/latest/references/core/rest/print/) * > A FeatureEffect set on a layerView cannot persisted in a [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/). * * @since 4.22 * @see [FeatureLayer.featureEffect](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#featureEffect) * @see [Sample - Apply effects to features](https://developers.arcgis.com/javascript/latest/sample-code/featureeffect-geometry/) * @see [Sample - Apply drop-shadow effect to a layerView](https://developers.arcgis.com/javascript/latest/sample-code/featureeffect-drop-shadow/) * @example * // gray out features that fall outside of the 3 mile buffer of the mouse's location * // by setting feature effect on excluded features * layerView.featureEffect = new FeatureEffect({ * filter: new FeatureFilter({ * geometry: filterGeometry, * spatialRelationship: "intersects", * distance: 3, * units: "miles" * }), * excludedEffect: "grayscale(100%) opacity(30%)" * }); * @example * // Apply a drop-shadow feature effect to the features that intersect the borough boundaries, * // while applying blur and brightness effects to the features that are excluded from filter criteria. * // The resulting map will make it easier to spot if the residents are more likely to experience deprivation * // if they live on a borough boundary. * const featureFilter = new FeatureFilter({ * where: "BoroughEdge='true'" * }); * layerView.featureEffect = new FeatureEffect({ * filter: featureFilter, * includedEffect: "drop-shadow(3px, 3px, 3px, black)", * excludedEffect: "blur(1px) brightness(65%)" * }); */ get featureEffect(): FeatureEffect | null | undefined; set featureEffect(value: FeatureEffectProperties | null | undefined); /** * The [attribute](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureFilter/#where), * [FeatureFilter.geometry](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureFilter/#geometry), * and [time extent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureFilter/#timeExtent) * filter. Only the features that satisfy the filter are displayed on the view. * * @since 4.11 * @see [Sample - Filter features by attributes](https://developers.arcgis.com/javascript/latest/sample-code/featurefilter-attributes/) * @see [Sample - Filter features by geometry](https://developers.arcgis.com/javascript/latest/sample-code/layers-scenelayer-feature-masking/) * @see [availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields) * @example * // display rain gauges where their water percent is over 30% * // and if the gauges are completely contained by the 10-mile * // buffer around the filter geometry * featureLayerView.filter = new FeatureFilter({ * where: "percentile >= 30", * geometry: filterPolygon, * spatialRelationship: "contains", * distance: 10, * units: "miles" * }); */ get filter(): FeatureFilter | null | undefined; set filter(value: FeatureFilterProperties | null | undefined); /** * Indicates whether the layer view contains all available features from the service or source. * After the layer finishes loading and [fetching](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#dataUpdating) its data, * this property reflects whether all features from the source are available in the layer view. * * When `hasAllFeatures` is `true`: * - The LayerView contains all features from the layer. * - [Queries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures) executed on the LayerView run against the entire dataset. * - To restrict queries to features currently visible in the view, set the query’s [Query.geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry) * property to the View's `extent`. * * When `hasAllFeatures` is `false`: * - The LayerView contains only features available for drawing. * - Queries on the LayerView run against the subset of features available on the client. * - To query the entire dataset with full-resolution geometries, use the query method on the Layer itself. * * @since 4.29 * @see [dataUpdating](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#dataUpdating) * @see [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures) * @example * const viewElement = document.querySelector("arcgis-map"); * const layerView = await viewElement.whenLayerView(layer); * * // Wait until the initial layer load completes * const layerView = await viewElement.whenLayerView(airQualityLayer); * await reactiveUtils.whenOnce(() => !layerView.updating); * * // Set up query with outStatistics to compute min, max, and average PM2.5 of all data * const query = airQualityLayer.createQuery(); * query.outStatistics = [ * { * statisticType: "avg", * onStatisticField: "pm25", * outStatisticFieldName: "avg_pm25" * }, * { * statisticType: "min", * onStatisticField: "pm25", * outStatisticFieldName: "min_pm25" * }, * { * statisticType: "max", * onStatisticField: "pm25", * outStatisticFieldName: "max_pm25" * } * ]; * * // Run the query on all features to get the min, max, and average values. * // If `hasAllFeatures` is true, all features from the layer are loaded * // and available on the client, so use layerView.queryFeatures for faster performance. * // Otherwise, use layer.queryFeatures to run the query against all features * const results = layerView.hasAllFeatures * ? await layerView.queryFeatures(query) * : await airQualityLayer.queryFeatures(query); * * // process the result * updateAirQualityStatus(results); */ get hasAllFeatures(): boolean; /** * This property helps determine if the layer view has successfully retrieved all relevant data for the current extent, even if no features are visible * (for example, if the result is zero). When `true`, you can use the layer view's query functions to investigate the features currently displayed on the map. * If `false`, you may need to query the layer and its service directly to get accurate results. * The hasAllFeaturesInView property will be `false` if some queries failed to execute, or when the layer contains a large number of features and is configured * with a [display filter](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#displayFilterInfo). This filter is sent along with the layer's * [FeatureLayer.definitionExpression](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#definitionExpression) during each feature tile query. * * @since 4.29 * @see [dataUpdating](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#dataUpdating) * @see [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures) * @example * const layerView = await viewElement.whenLayerView(featureLayer); * * reactiveUtils.when( * () => !layerView.dataUpdating, * async () => { * // wait till the layerView finishes fetching its data * // layerView has all expected features * if (layerView.hasAllFeaturesInView) { * const count = await layerView.queryFeatureCount({ * geometry: view.extent * }); * // use the feature count * console.log(count, "features in the layerView within the extent"); * } else { * // LayerView does not have all expected features * // for example, the layer may have displayFilterInfo applied * // in this case, not all features from the layer will be available * // in the layer view as they are filtered out * const count = await layer.queryFeatureCount({ * geometry: view.extent * }); * // use the count * console.log(count, "features in the layer within the extent"); * } * } * ); */ get hasAllFeaturesInView(): boolean; /** * Indicates whether the LayerView contains geometries at full resolution. * After the layer finishes loading and [fetching](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#dataUpdating) its data, * this property reflects whether all geometries were loaded at full resolution without quantization. * * To retrieve feature geometries at full resolution when querying, first check the LayerView's `hasFullGeometries` property. * If it is `true`, use a query method on the LayerView; otherwise, use the query method on the Layer. * * @since 4.29 * @see [dataUpdating](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#dataUpdating) * @see [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures) */ get hasFullGeometries(): boolean; /** * Options for configuring the highlight. Use the [highlight()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#highlight) method on the layer view to highlight a feature * * > [!WARNING] * > * > **Known Limitations** * > * > The `highlightOptions` on layer views are only supported in [2D MapViews](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/). To * > configure highlights for a [3D SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/), use * > [SceneView.highlights](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#highlights) instead. * * @deprecated since version 4.34. Use the [View.highlights](https://developers.arcgis.com/javascript/latest/references/core/views/View/#highlights) property instead. * @since 4.26 * @see [highlight()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#highlight) * @see [Sample: Highlight SceneLayer](https://developers.arcgis.com/javascript/latest/sample-code/highlight-scenelayer/) * @example * // Features in the layerview will be highlighted with bright * // yellow colors in the map. * const layerView = await view.whenLayerView(layer); * layerView.highlightOptions = { * color: [255, 255, 0, 1], * haloOpacity: 0.9, * fillOpacity: 0.2 * }; */ get highlightOptions(): HighlightOptions | null | undefined; set highlightOptions(value: HighlightOptionsProperties | null | undefined); /** The layer being viewed. */ get layer(): FeatureLikeLayerViewLayer; /** * The maximum number of features that can be displayed at a time. This setting currently only applies to * SceneView. By default, the maximum number of features is estimated automatically depending on the symbology, * geometry complexity, memory consumption and display quality profile. * * Changing this setting to a higher value may lead to a significant decrease in performance and increase in * memory usage. * * > [!WARNING] * > * > **Known Limitations** * > * > * The `maximumNumberOfFeatures` is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). * > * This property does not apply to [ParquetLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/ParquetLayerView/) and [StreamLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/). * * @since 4.10 */ accessor maximumNumberOfFeatures: number; /** * Signifies whether the maximum number of features has been exceeded. Not all features could be displayed * when this value is `true`. This setting currently only applies to SceneView. * * > [!WARNING] * > * > **Known Limitations** * > * > * The `maximumNumberOfFeaturesExceeded` is only supported in 3D [SceneViews](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). * > * This property does not apply to [ParquetLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/ParquetLayerView/) and [StreamLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/). * * @since 4.10 */ get maximumNumberOfFeaturesExceeded(): boolean; /** * Creates query parameter object that can be used to [fetch aggregate features](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryAggregates) as they are being * displayed. It sets the query parameter's [Query.outFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outFields) * property to `["*"]` and [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) to `true`. * The output spatial reference [Query.outSpatialReference](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outSpatialReference) * is set to the spatial reference of the view. * * @returns The query parameter object. * @since 4.25 * @see [queryAggregates()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryAggregates) */ createAggregateQuery(): Query; /** * Creates a query parameter object that can be used to fetch features as they are being * displayed. It sets the query parameter's [Query.outFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outFields) * property to `["*"]` and [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) to `true`. * The [Query.outSpatialReference](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outSpatialReference) * is set to the spatial reference of the view. Parameters of the [filter](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#filter) currently * applied to the layer view are also incorporated in the returned query object. The results will include * geometries of features and values for all fields. * * @returns The query object * @since 4.12 * @example * const query = csvLayerView.createQuery(); * query.where = "magnitude > 4"; * csvLayerView.queryFeatures(query).then(function(results) { * console.log(results); * }) * .catch(function(error) { * console.log(error); * }); */ createQuery(): Query; /** * Highlights the given feature(s) in a layer view using the named [HighlightOptions](https://developers.arcgis.com/javascript/latest/references/core/views/support/HighlightOptions/) * from the view's [View.highlights](https://developers.arcgis.com/javascript/latest/references/core/views/View/#highlights) collection. If no `name` is provided, the * feature will use the `default` highlight options. * * Release-specific changes: * * As of version 4.32, the `highlight` method accepts an `options` parameter which can be used to provide a [HighlightOptions.name](https://developers.arcgis.com/javascript/latest/references/core/views/support/HighlightOptions/#name) * to apply specific [HighlightOptions](https://developers.arcgis.com/javascript/latest/references/core/views/support/HighlightOptions/). * If no `name` is provided, the `default` highlight options will be used. * * As of version 4.23, the `highlight()` method was added to [ImageryLayerView.highlight()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/ImageryLayerView/#highlight), * supported only in a [2D MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/). * * @param target - The feature(s) to highlight. When passing a graphic or an array of graphics, each feature must have a valid `objectID`.\nYou may alternatively pass one or more objectIDs as a single number, string, or an array of numbers or strings. * @param options - An object with the following properties. * @public * @param target - The feature(s) to highlight. When passing a graphic or an array of graphics, each feature must have a valid `objectID`. * You may alternatively pass one or more objectIDs as a single number, string, or an array of numbers or strings. * @param options - An object with the following properties. * @returns Returns a highlight handler with a `remove()` method that can be called to remove the highlight. * @see [View.highlights](https://developers.arcgis.com/javascript/latest/references/core/views/View/#highlights) * @see [Sample: Highlight features by geometry](https://developers.arcgis.com/javascript/latest/sample-code/highlight-features-by-geometry/) * @see [Sample: Highlight SceneLayer](https://developers.arcgis.com/javascript/latest/sample-code/highlight-scenelayer/) * @example * // Highlight features based on a query result * * // Add a new set of highlight options to the view's highlights collection * view.highlights.push({ * name: "oaks", * color: "forestgreen", * haloOpacity: 0.8, * fillOpacity: 0.3 * }); * * // A handler can be used to remove any previous highlight when applying a new one * let highlight; * * // Query for particular features in a layer and then highlight them with the specified options * view.whenLayerView(treesLayer).then((layerView) => { * let query = treesLayer.createQuery(); * query.where = "type = 'Quercus'"; * * treesLayer.queryFeatures(query).then((result) => { * // Remove any previous highlight, if it exists * highlight?.remove(); * // Apply the "oaks" highlight options to the corresponding tree features * highlight = layerView.highlight(result.features, {name: "oaks"}); * }); * }); * @example * // Use the default highlights collection to apply a highlight to features when you hover over them * * // A handler can be used to remove any previous highlight when applying a new one * let hoverHighlight; * * view.on("pointer-move", (event) => { * // Search for the first feature in the featureLayer at the hovered location * view.hitTest(event, { include: layer }).then((response) => { * if (response.results[0]) { * const graphic = response.results[0].graphic; * view.whenLayerView(graphic.layer).then((layerView) => { * // Remove any previous highlight, if it exists * hoverHighlight?.remove(); * // Highlight the hit features with the temporary highlight options, which are pre-configured for this use case * hoverHighlight = layerView.highlight(graphic, { name: "temporary" }); * }); * } * }); * }); */ abstract highlight(target: Graphic | Graphic[] | ObjectId | ObjectId[], options?: LayerViewHighlightOptions): ResourceHandle; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against aggregate features (i.e. clusters or bins) * available for drawing in the layerView * and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/). If query parameters are not provided, * all aggregates available for drawing are returned along with their attributes that are available on * the client. Fields referenced in statistic queries or in the where clause must first be * defined as [aggregate fields](https://developers.arcgis.com/javascript/latest/references/core/layers/support/AggregateField/). * * > [!WARNING] * > * > **Known Limitations** * > * > This method currently does not support spatial queries (i.e. the [Query.geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry) option and its related properties). * * @param query - Specifies the parameters of the query. Leave this parameter empty * to query all aggregates in the view. * @param options - An object with the following properties. * @returns When resolved, returns * a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing an array of [aggregate features](https://developers.arcgis.com/javascript/latest/references/core/Graphic/#isAggregate). * @since 4.25 * @see [FeatureReductionBinning](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionBinning/) * @see [FeatureReductionCluster](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionCluster/) * @see [Graphic.isAggregate](https://developers.arcgis.com/javascript/latest/references/core/Graphic/#isAggregate) * @example * // clustered point layer * const layer = new FeatureLayer({ * featureReduction: { type: "cluster" } * }); * * const layerView = await view.whenLayerView(layer); * await reactiveUtils.whenOnce(() => !layerView.updating); * * // features represents all the clusters in the view * const { features } = await layerView.queryAggregates(); */ abstract queryAggregates(query?: Query, options?: AbortOptions): Promise; /** * Executes a [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/) against features available for drawing, which groups features into bins based on ranges in numeric or date fields, and returns an * [AttributeBinsFeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsFeatureSet/) containing the series of bins. Please refer to the [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/) document for more detailed information * on how to configure the bin parameters. * * Binned data can condense complex information into meaningful insight. This query allows you to classify data into meaningful categories and summarize the data within each bin with summary statistics. * Binned data can be effectively visualized in histograms (or bar charts), providing clearer insights into data distributions and trends. * It can reveal underlying patterns that might be obscured in raw data. For example, bins can show concentrations of values in common ranges. * * > [!WARNING] * > * > **Notes** * > The `queryAttributeBins()` method is unrelated to querying bins in [FeatureReductionBinning](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionBinning/). * * @param binsQuery - Specifies the parameters of the `queryAttributeBins()` operation. The [AttributeBinsQuery.binParameters](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/#binParameters) property must be set. * @param options - An object with the following properties. * @returns When resolved, returns a [AttributeBinsFeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsFeatureSet/) containing * a series of bins. Each feature in the AttributeBinsFeatureSet represents a bin. The attributes of each feature contains statistics summarizing the data in the bin, including count, average, standard deviation, etc. * @since 4.32 * @see [AttributeBinsQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttributeBinsQuery/) * @see [Sample - Attribute Bins Query](https://developers.arcgis.com/javascript/latest/sample-code/query-attribute-bins/) * @example * // Query the temperature field in the feature layer and create a histogram * // Analyze temperature data over a year, create 100 bins for different temperature ranges * // to assess frequency and identify patterns. * const binQuery = new AttributeBinsQuery({ * where: "UnitTop = 0", * binParameters: new AutoIntervalBinParameters({ * bins: 100, * field: "temp", * start: 0, // lowest temp value to be included in the bin query * end: 30 // highest temp value to be included * }) * }); * * layerView.queryAttributeBins(query).then((results) => { * const bins = results.features.map((bin) => { * return { * minValue: bin.attributes.lowerBoundary, * maxValue: bin.attributes.upperBoundary, * count: bin.attributes.temperature_count, * }; * }); * * // get the lower boundary of the first bin * const min = results.features[0].attributes.lowerBoundary; * // get the upper boundary of the last bin * const max = results.features[results.features.length - 1].attributes.upperBoundary; * // calculate the average for the bins * const average = results.features[0].attributes.lowerBoundary + results.features[results.features.length - 1].attributes.upperBoundary) / 2; * * const histogram = new Histogram({ * container: "histogramDiv", * bins: bins, * min: min, * max: max, * average: average, * barCreatedFunction:(index, element) => { * element.setAttribute("fill", "#FFA500"); * element.setAttribute("opacity", 0.5); * }, * labelFormatFunction: (value, type) => { * return (Math.round(value)).toLocaleString(); * }, * dataLines: [{ * value: histogram.min, * label: histogram.min.toLocaleString() * }, { * value: histogram.average, * label: histogram.average.toLocaleString() * }, { * value: histogram.max, * label: histogram.max.toLocaleString() * }] * }); * }); */ abstract queryAttributeBins(binsQuery: AttributeBinsQuery, options?: AbortOptions): Promise; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against features available for drawing in the layerView and * returns the [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) of features that satisfy the query. * * > [!WARNING] * > * > **Notes** * > * > - Attribute values used in attribute queries executed against LayerViews are case sensitive. * > - Ensure the fields being queried are included in the [availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields) list; otherwise, the query may fail or return incomplete results. * > - To get an extent of all the features in a layer rather than only those currently available on the client, * > check the [hasAllFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasAllFeatures) property on the LayerView. * > If `hasAllFeatures` is `true`, then `queryExtent()` on the LayerView returns an `extent` based on all features available in the layer * > that satisfy the query, not just those currently loaded on the client. * > Otherwise, use `queryExtent()` on the Layer to get the extent based on all features available in the layer that satisfy the query. * > - Spatial queries can be performed on quantized geometries within the LayerView. The resolution of these geometries is * > only as precise as the scale [View2D.resolution](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#resolution) of the view. * > Geometries returned from any LayerView query will match the view's scale resolution. * > To retrieve feature geometries at full resolution, first check the LayerView's [hasFullGeometries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasFullGeometries) property. If it is `true`, * > use the `queryExtent()` method on the LayerView; otherwise, use the `queryExtent()` method on the Layer. * > - Spatial queries have the same limitations as those listed in the [projectOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/projectOperator/) documentation. * > - Spatial queries are not currently supported if the layerView has any of the following [SpatialReferences](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/): * > - GDM 2000 (4742) – Malaysia * > - Gusterberg (Ferro) (8042) – Austria/Czech Republic * > - ISN2016 (8086) - Iceland * > - SVY21 (4757) - Singapore * * @param query - Specifies the attributes and spatial filter of the query. * When no parameters are passed to this method, all features in the client are returned. To only return features * visible in the view, set the `geometry` parameter in the query object to the view's extent. * @param options - An object with the following properties. * @returns When resolved, returns the extent and count of the features * that satisfy the input query. See the object specification table below for details. * Property | Type | Description * ---------|------|------------- * count | Number | The number of features that satisfy the input query. * extent | [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) \| null | The extent of the features that satisfy the query. * @example * let layer = new CSVLayer({ * url: csvUrl // URL to a csv file * }); * * const layerView = await view.whenLayerView(layer); * await reactiveUtils.whenOnce(() => !layerView.updating); * * const results = await layerView.queryExtent() * view.goTo(results.extent); // go to the extent of all the graphics in the layerView * @example * // Expand the extent so that a feature (i.e. point feature) * // won't be off screen after the end of goTo animation. * const { extent } = await layerView.queryExtent() * const zoomScale = 16000; * extent.expand((zoomScale / view.scale) * view.resolution); * view.goTo(extent); */ abstract queryExtent(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against features available for drawing in the layerView * and returns the number of features that satisfy the query. If query parameters are not provided, * the count of all features available for drawing is returned. * * > [!WARNING] * > * > **Notes** * > * > - Attribute values used in attribute queries executed against LayerViews are case sensitive. * > - Ensure the fields being queried are included in the [availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields) list; otherwise, the query may fail or return incomplete results. * > - To get a count of all features in a layer rather than only those currently available on the client, * > check the [hasAllFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasAllFeatures) property on the LayerView. * > If `hasAllFeatures` is `true`, then `queryFeatureCount()` on the LayerView returns the count of all features from the entire dataset * > that satisfy the query, not just those currently loaded on the client. * > Otherwise, use `queryFeatureCount()` on the layer to get the count based on all features available in the layer that satisfy the query. * > - Spatial queries can be performed on quantized geometries within the LayerView. The resolution of these geometries is * > only as precise as the scale [View2D.resolution](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#resolution) of the view. * > Geometries returned from any LayerView query will match the view's scale resolution. * > To retrieve feature geometries at full resolution, first check the LayerView's [hasFullGeometries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasFullGeometries) property. If it is `true`, * > use the `queryFeatureCount()` method on the LayerView; otherwise, use the `queryFeatureCount()` method on the Layer. * > - Spatial queries have the same limitations as those listed in the [projectOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/projectOperator/) documentation. * > - Spatial queries are not currently supported if the layerView has any of the following [SpatialReferences](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/): * > - GDM 2000 (4742) – Malaysia * > - Gusterberg (Ferro) (8042) – Austria/Czech Republic * > - ISN2016 (8086) - Iceland * > - SVY21 (4757) - Singapore * * @param query - Specifies the attributes and spatial filter of the query. * When no parameters are passed to this method, all features in the client are returned. To only return features * visible in the view, set the `geometry` parameter in the query object to the view's extent. * @param options - An object with the following properties. * @returns When resolved, returns the number of features satisfying the query. * @example * view.on("click", (event) => { * let query = new Query(); * query.geometry = event.mapPoint; // obtained from a view click event * query.spatialRelationship = "intersects"; * * const layerView = await view.whenLayerView(layer); * await reactiveUtils.whenOnce(() => !layerView.updating); * * const count = await layerView.queryFeatureCount(query); * console.log(count); // prints the number of the client-side graphics that satisfy the query * }); * @example * const layerView = await view.whenLayerView(layer); * const count = await layerView.queryFeatureCount() * console.log(count); // prints the total number of client-side graphics to the console */ abstract queryFeatureCount(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against features available for drawing in the LayerView * and returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/). If query parameters are not provided, * then a default query is created using [createQuery()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#createQuery) * method and all features that pass the layer view [filter](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#filter) are returned along with their attributes * that are [available on the client](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields). * * > [!WARNING] * > * > **Notes** * > * > - Attribute values used in attribute queries executed against LayerViews are case sensitive. * > - Ensure the fields being queried are included in the [availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields) list; otherwise, the query may fail or return incomplete results. * > - To execute a query against all features in a layer rather than only those currently available on the client, check the [hasAllFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasAllFeatures) * > property on the LayerView. If `hasAllFeatures` is `true`, then `queryFeatures()` on the LayerView returns all features from the entire dataset * > that satisfy the query, not just those currently loaded on the client. * > Otherwise, use `queryFeatures()` on the layer to query against all features available in the layer that satisfy the query. * > - Spatial queries can be performed on quantized geometries within the LayerView. The resolution of these geometries is * > only as precise as the scale [View2D.resolution](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#resolution) of the view. * > Geometries returned from any LayerView query will match the view's scale resolution. * > To retrieve feature geometries at full resolution, first check the LayerView's [hasFullGeometries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasFullGeometries) property. If it is `true`, * > use the `queryFeatures()` method on the LayerView; otherwise, use the `queryFeatures()` method on the Layer. * > - Spatial queries have the same limitations as those listed in the [projectOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/projectOperator/) documentation. * > - Spatial queries are not currently supported if the FeatureLayerView has any of the following [SpatialReferences](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/): * > - GDM 2000 (4742) – Malaysia * > - Gsterberg (Ferro) (8042) – Austria/Czech Republic * > - ISN2016 (8086) - Iceland * > - SVY21 (4757) - Singapore * * @param query - Specifies the attributes and spatial filter of the query. * When this parameter is not passed to `queryFeatures()` method, then a default query is created using [createQuery()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#createQuery) * method and all features that pass the layer view [filter](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#filter) are returned along with their attributes * that are [available on the client](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields). To only return features * visible in the view, set the `geometry` parameter in the query object to the view's extent. * @param options - An object with the following properties. * @returns When resolved, a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing * an array of graphic features is returned. * @see [Sample - Query FeatureLayerView](https://developers.arcgis.com/javascript/latest/sample-code/featurelayerview-query/) * @see [Sample - Query statistics client-side by distance](https://developers.arcgis.com/javascript/latest/sample-code/featurelayerview-query-distance/) * @see [Sample - Query statistics by geometry](https://developers.arcgis.com/javascript/latest/sample-code/featurelayerview-query-geometry/) * @see [Sample - Query statistics client-side](https://developers.arcgis.com/javascript/latest/sample-code/featurelayerview-query-stats/) * @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/) * @example * let layer = new FeatureLayer({ * url: fsUrl // points to a Feature Service layer url * }); * * let query = new Query(); * query.geometry = new Extent({ * xmin: -9177811, * ymin: 4247000, * xmax: -9176791, * ymax: 4247784, * spatialReference: 102100 * }); * query.spatialRelationship = "intersects"; * * const layerView = await view.whenLayerView(layer); * await reactiveUtils.whenOnce(() => !layerView.updating); * * const results = await layerView.queryFeatures(query); * console.log(results.features); // prints the array of client-side graphics to the console * @example * let layer = new FeatureLayer({ * url: fsUrl // points to a Feature Service layer url * }); * * // returns all the graphics from the layerView * const layerView = await view.whenLayerView(layer); * await reactiveUtils.whenOnce(() => !layerView.updating); * * const results = await layerView.queryFeatures() * console.log(results.features); // prints all the client-side graphics to the console * @example * layerView.queryFeatures({ * geometry: mapPoint, * // 6 pixels around a point at the view resolution to query around a finger. * distance: view.resolution * 6, * }); */ abstract queryFeatures(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; /** * Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against features available for drawing in * the layerView and returns array of the ObjectIDs of features that satisfy the input query. If * query parameters are not provided, the ObjectIDs of all features available for drawing are returned. * * > [!WARNING] * > * > **Notes** * > * > - Attribute values used in attribute queries executed against LayerViews are case sensitive. * > - Ensure the fields being queried are included in the [availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields) list; otherwise, * > the query may fail or return incomplete results. * > - To execute a query against all features in a layer rather than only those currently available on the client, * > check the [hasAllFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasAllFeatures) property on the LayerView. * > If `hasAllFeatures` is `true`, then `queryObjectIds()` on the LayerView returns all features from the entire dataset * > that satisfy the query, not just those currently loaded on the client. * > Otherwise, use `queryObjectIds()` on the layer to query against all features available in the layer that satisfy the query. * > - Spatial queries can be performed on quantized geometries within the LayerView. The resolution of these geometries is * > only as precise as the scale [View2D.resolution](https://developers.arcgis.com/javascript/latest/references/core/views/View2D/#resolution) of the view. * > Geometries returned from any LayerView query will match the view's scale resolution. * > To retrieve feature geometries at full resolution, first check the LayerView's [hasFullGeometries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#hasFullGeometries) property. If it is `true`, * > use the `queryObjectIds()` method on the LayerView; otherwise, use the `queryObjectIds()` method on the Layer. * > - Spatial queries have the same limitations as those listed in the [projectOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/projectOperator/) documentation. * > - Spatial queries are not currently supported if the layerView has any of the following [SpatialReferences](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/): * > - GDM 2000 (4742) – Malaysia * > - Gusterberg (Ferro) (8042) – Austria/Czech Republic * > - ISN2016 (8086) - Iceland * > - SVY21 (4757) - Singapore * * @param query - Specifies the attributes and spatial filter of the query. * When no parameters are passed to this method, all features in the client are returned. To only return features * visible in the view, set the `geometry` parameter in the query object to the view's extent. * @param options - An object with the following properties. * @returns When resolved, returns an array representing the ObjectIDs of the features * satisfying the query. * @example * view.on("click", async (event) => { * let query = new Query(); * query.geometry = event.mapPoint; // obtained from a view click event * query.spatialRelationship = "intersects"; * * const layerView = await view.whenLayerView(layer) * await reactiveUtils.whenOnce(() => !layerView.updating); * * const ids = await layerView.queryObjectIds(query); * console.log(ids); // prints the ids of the client-side graphics to the console= * }); * @example * // returns all the Ids from the graphics in the layerView * view.whenLayerView(layer).then(function(layerView){ * return layerView.queryObjectIds() * }).then(function(ids){ * console.log(ids); // prints the ids of all the client-side graphics to the console * }); */ abstract queryObjectIds(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise; }