@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
758 lines (756 loc) • 54.1 kB
TypeScript
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<FeatureSet>;
/**
* 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<AttributeBinsFeatureSet>;
/**
* 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<any>;
/**
* 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<number>;
/**
* 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<FeatureSet>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Q