@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
832 lines (829 loc) • 57.9 kB
TypeScript
import type Point from "../../geometry/Point.js";
import type SpatialReference from "../../geometry/SpatialReference.js";
import type GeographicTransformation from "../../geometry/operators/support/GeographicTransformation.js";
import type QuantizationParameters from "./QuantizationParameters.js";
import type StatisticDefinition from "./StatisticDefinition.js";
import type TimeExtent from "../../time/TimeExtent.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { GeometryUnion } from "../../geometry/types.js";
import type { DatumTransformation, SQLFormat } from "../../portal/jsonTypes.js";
import type { ObjectId } from "../../views/types.js";
import type { MeshProperties } from "../../geometry/Mesh.js";
import type { PolylineProperties } from "../../geometry/Polyline.js";
import type { PolygonProperties } from "../../geometry/Polygon.js";
import type { PointProperties } from "../../geometry/Point.js";
import type { MultipointProperties } from "../../geometry/Multipoint.js";
import type { ExtentProperties } from "../../geometry/Extent.js";
import type { SpatialReferenceProperties } from "../../geometry/SpatialReference.js";
import type { StatisticDefinitionProperties } from "./StatisticDefinition.js";
import type { QuantizationParametersProperties } from "./QuantizationParameters.js";
import type { TimeExtentProperties } from "../../time/TimeExtent.js";
export interface QueryProperties extends Partial<Pick<Query, "aggregateIds" | "cacheHint" | "datumTransformation" | "distance" | "gdbVersion" | "geometryPrecision" | "groupByFieldsForStatistics" | "having" | "maxAllowableOffset" | "maxRecordCountFactor" | "multipatchOption" | "num" | "objectIds" | "orderByFields" | "outFields" | "parameterValues" | "rangeValues" | "relationParameter" | "returnCentroid" | "returnDistinctValues" | "returnExceededLimitFeatures" | "returnGeometry" | "returnM" | "returnQueryGeometry" | "returnTrueCurves" | "returnZ" | "spatialRelationship" | "sqlFormat" | "start" | "text" | "units" | "where">> {
/**
* The geometry to apply to the spatial filter. The [spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatialRelationship)
* will indicate how the geometry should be used to query features.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > [Mesh](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/) geometry types are currently not supported.
*/
geometry?: ((ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | (MeshProperties & { type: "mesh" })) | null;
/**
* The historic moment to query. This parameter applies only if the `supportsQueryWithHistoricMoment`
* capability of the service being queried is `true`. This setting is provided in the layer resource.
*/
historicMoment?: (Date | number | string) | null;
/**
* The spatial reference for the returned geometry. If not specified, the geometry is returned in the spatial
* reference of the queried layer.
*/
outSpatialReference?: SpatialReferenceProperties | null;
/**
* The definitions for one or more field-based statistics to be calculated. If `outStatistics` is specified the only other query parameters
* that should be used are [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#groupByFieldsForStatistics), [orderByFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#orderByFields), [returnDistinctValues](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnDistinctValues),
* [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry), [text](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#text), [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#timeExtent) and [where](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where).
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > For service-based queries, `outStatistics` is only supported on layers where `supportsStatistics = true`.
*
* @example
* let query = new Query();
* let statisticDefinition = new StatisticDefinition({
* statisticType: "sum",
* onStatisticField: "POP2000",
* outStatisticFieldName: "TotalPop"
* });
*
* query.outStatistics = [ statisticDefinition ];
*/
outStatistics?: StatisticDefinitionProperties[] | null;
/**
* Specifies the pixel level to be identified on the X and Y axis. Defaults to the base resolution of the
* dataset if not specified. Applicable only to Image Service layers.
*/
pixelSize?: PointProperties | null;
/**
* Used to project the geometry onto a virtual grid, likely representing
* pixels on the screen. Geometry coordinates are converted to integers
* by building a grid with a resolution matching the `quantizationParameters.tolerance`.
* Each coordinate is then snapped to one pixel on the grid.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Only supported with ArcGIS Online hosted services or ArcGIS Enterprise 10.6.1 services.
*
* @example
* let query = new Query();
* query.quantizationParameters = {
* mode: "view",
* originPosition: "upper-left",
* tolerance: 4820,
* extent: layer.fullExtent
* };
*/
quantizationParameters?: QuantizationParametersProperties | null;
/**
* A time extent for a temporal query against [time-aware layers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#timeInfo).
* For example, it can be used to discover all crimes that occurred during the
* night shift from 10 PM to 6 AM on a particular date.
*
* @example
* let layer = new FeatureLayer( ... );
* let timeExtent = new TimeExtent({
* start: new Date(1992, 0, 1),
* end: new Date(1992, 11, 31)
* });
* let timeQuery = new Query({
* timeExtent: timeExtent
* });
* layerView.queryFeatures(timeQuery).then(function(featureSet) { ... });
*/
timeExtent?: TimeExtentProperties | null;
}
/**
* Range value to filter features from the layer that are within the specified range values.
*
* @see [rangeValues](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#rangeValues)
*/
export interface RangeValue {
/** The range id. */
name: string;
/** Single value or value range. */
value: number | [
number,
number
];
}
/**
* * [Attribute queries](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#attribute)
* * [Numbers and strings](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#number-string-query)
* * [Date and times](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#date-query)
* * [Spatial queries](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatial)
* * [Temporal queries](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#temporal)
* * [Statistic queries](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#statistic)
*
* This class defines parameters for executing queries for features from a layer or layer view.
* Once a Query object's properties are defined, it can then be passed into an executable function, which will
* return the features in a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/).
*
* There are three types of queries: attribute, spatial, and statistic queries. You can query for features
* in one of these categories or use elements of each in a single query.
*
* <span id="attribute"></span>
* ## Attribute queries
*
* <span id="number-string-query"></span>
* #### Number and strings
* To query features based on attribute values, specify a SQL where clause in the [where](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where) property.
* You can optionally use the [text](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#text) property for a `LIKE` statement. Setting the [outFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outFields)
* of the query will limit the attributes returned from the query. This can improve the speed of the query
* if your app doesn't require all the attributes for each feature.
*
* For example, you can use [where](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where) to query all counties in the state of Washington
* from a layer representing U.S. Counties:
*
* ```js
* const query = featureLayer.createQuery();
* query.where = "STATE_NAME = 'Washington'";
* query.outFields = [ "STATE_NAME", "COUNTY_NAME", "POPULATION", "(POPULATION / AREA) as 'POP_DENSITY'" ];
*
* // To return a feature set containing the attributes: STATE_NAME, COUNTY_NAME, POPULATION, and POP_DENSITY.
* const featureSet = await featureLayer.queryFeatures(query)
* ```
* <span id="date-query"></span>
* #### Date and times
*
* When querying features based on `date`, `date-only`, `time-only` and `timestamp-offset` field types
* the `DATE`, `TIMESTAMP` or `TIME` SQL functions should be used to make sure the query returns correct results.
* The following snippets demonstrate how the date functions can be constructed with the functions mentioned above.
*
* ```js
* <DateField> = DATE 'YYYY-MM-DD'
* <DateField> = TIMESTAMP 'YYYY-MM-DD HH:MI:SS'
* <DateOnlyField> = DATE 'YYYY-MM-DD'
* <TimeOnlyField> = TIME 'HH:MM:SS'
* <TimestampOffsetField> = TIMESTAMP 'YYYY-MM-DD HH:MI:SS +/-UTC offset'
* ```
*
* Date values are stored as epoch values in `date` field. Epoch time describes a point in time as the number
* of seconds since `00:00:00 Thursday, 1 January 1970 (UTC)`.
* A `date` field can be associated with a specific time zone. When querying values from a date field, you may need to convert dates to match the time zone of the field.
* Use the [FieldsIndex.getTimeZone()](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FieldsIndex/#getTimeZone) method to identify the time zone of a date field.
* For example, if your service has two date fields, one in `America/Los_Angeles` and the other in `America/New_York`, then date queries need to be crafted specifically for each field.
* If the desired query date is `01/01/2012 11:20:00 PM GMT` then the resulting query could be:
*
* `query.where = "DateTime_PST = TIMESTAMP '2012-01-01 15:20:00"`, or
*
* `query.where = "DateTime_EST = TIMESTAMP '2012-01-01 18:20:00"`.
*
* ```js
* // Query for features that recorded on January 1, 2012 9:00:00 AM GMT
* // DateTime_PST date field values are in PST. Must adjust the epoch values to PST
*
* const queryDate = new Date(1325408400000); // 01/01/2012 9:00:00 AM GMT
* let queryFields = ["DateTime_PST"];
*
* // get the timezone of the DateTime_PST date field
* const fieldTimeZone = layer.fieldsIndex.getTimeZone("DateTime_PST") ;
*
* // we need to adjust the date value to match the time zone of the field.
* const where = `DateTime_PST < DATE '${getDateForTimeZone(queryDate, fieldTimeZone)}'`
* layerView.filter = new FeatureFilter({
* where
* });
* runQueries(where, queryFields);
*
* // This function conveniently formats a dates in terms of the parsed time zone.
* function getDateForTimeZone(queryDate, timezone) {
*
* // adjust the given date field to the timezone of the date field
* const zonedDate = new Date(
* queryDate.toLocaleString("en-US", {
* timeZone: timezone
* })
* );
* const pad = (value) => String(value).padStart(2, "0");
* const month = pad(zonedDate.getMonth() + 1);
* const day = pad(zonedDate.getDate())
* const year = zonedDate.getFullYear();
* const hour = pad(zonedDate.getHours());
* const minutes = pad(zonedDate.getMinutes());
* const seconds = pad(zonedDate.getSeconds());
*
* return `${year}-${month}-${day} ${hour}:${minutes}:${seconds}`;
* }
* ```
*
* Please refer to [Querying Feature Services: Date-Time Queries](https://www.esri.com/arcgis-blog/products/api-rest/data-management/querying-feature-services-date-time-queries/) and
* [REST API - Date-time queries](https://developers.arcgis.com/rest/services-reference/enterprise/query-feature-service-layer/#date-time-queries) documents
* to learn more about how to query date-time values.
*
* <span id="spatial"></span>
* ## Spatial queries
*
* You can query features by geometry/location. While [where](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where) is not required in this
* workflow, you can use `where` as part of the query to get more refined results.
*
* To execute a spatial query, you must set the [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry) parameter to a
* [Geometry](https://developers.arcgis.com/javascript/latest/references/core/geometry/Geometry/) object and specify a valid [spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatialRelationship).
* You can optionally provide a query [distance](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#distance) and [units](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#units) to query features against a buffer
* around the given geometry.
*
* For example, to query for all features within 2 miles of a mouse move, you would do the following:
*
* ```js
* view.on("pointer-move", async (event) => {
* const query = featureLayer.createQuery();
* query.geometry = view.toMap(event); // the point location of the pointer
* query.distance = 2;
* query.units = "miles";
* query.spatialRelationship = "intersects"; // this is the default
* query.returnGeometry = true;
* query.outFields = ["POPULATION"];
*
* // The following line returns features within two miles of the pointer's location
* const { features } = await featureLayer.queryFeatures(query);
* });
* ```
*
* You could also use `where`, for example, to return all features with a population greater than 10,000 within
* the 2-mile buffer.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > For client side spatial queries on 3D Object SceneLayerView the [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) of the feature
* > is used when evaluating the spatial relationship with the [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry). This means that a feature might be
* > returned from the query, even though its footprint is not in a spatial relationship with the [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry).
*
* <span id="temporal"></span>
* ## Temporal queries
*
* You can query features based on a given time range by specifying the [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#timeExtent) property. The temporal query will return
* results only if the feature service is published with [FeatureLayer.timeInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#timeInfo) information. The temporal
* query can also be combined with attribute and geometry queries.
*
* For example, you can use [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#timeExtent) and [where](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where) parameters to query specified hurricane tracks
* within a given time extent.
*
* ```js
* // query katrina tracks that took place in Aug 30 - Aug 31, 2005
* const query = new Query({
* outFields: ["Name, WindSpeed"],
* where: "Name = 'Katrina'",
* timeExtent: {
* start: new Date(2005, 7, 30),
* end: new Date(2005, 7, 31)
* }
* });
* const { features } = await featureLayer.queryFeatures(query);
* ```
*
* <span id="statistic"></span>
* ## Statistic queries
*
* Rather than return individual features from a query, you can return statistics
* for field attributes and expressions. Statistic queries are defined by the [outStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outStatistics)
* parameter, which requires an array of [StatisticDefinition](https://developers.arcgis.com/javascript/latest/references/core/rest/support/StatisticDefinition/) objects.
*
* For example, you can query for the average and total population of counties in the layer mentioned above
* in the following manner:
*
* ```js
*
* // query for the sum of the population in all features
* const sumPopulation = {
* onStatisticField: "POP_2015", // service field for 2015 population
* outStatisticFieldName: "Pop_2015_sum",
* statisticType: "sum"
* };
*
* // query for the average population in all features
* const avgPopulation = {
* onStatisticField: "POP_2015", // service field for 2015 population
* outStatisticFieldName: "Pop_2015_avg",
* statisticType: "avg"
* };
*
* // Notice that you can pass a SQL expression as a field name to calculate statistics
* const populationChangeDefinition = {
* onStatisticField: "POP_2015 - POP_2010", // service field for 2015 population
* outStatisticFieldName: "avg_pop_change_2015_2010",
* statisticType: "avg"
* };
*
* const query = layer.createQuery();
* query.where = "STATE_NAME = 'Washington'";
* query.outStatistics = [sumPopulation, avgPopulation, populationChangeDefinition];
*
* const { feature } = await featureLayer.queryFeatures(query);
* const { attributes } = features[0];
*
* console.log(`The total population in WA is ${attributes.Pop_2015_sum}`);
* console.log(`The average population in WA counties is ${attributes.Pop_2015_avg}`);
* console.log(`The average population change in WA counties is ${attributes.avg_pop_change_2015_2010}`);
* ```
*
* <span id="working-with-results"></span>
* ## Working with results
*
* Query results can be used in a number of ways depending on the use case. Consider the following
* parameters which impact the format of the resulting feature set.
*
* * [returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) - Returning a geometry is useful for displaying results back
* in the view as graphics, or for conducting further spatial analysis. If the geometry isn't necessary
* in your workflow, then don't request it to improve app performance.
* * [outStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outStatistics) - Querying for statistics will never return features from the layer,
* only an object with number properties for the requested statistics.
* * [returnDistinctValues](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnDistinctValues) - Returns the unique values that exist in a field as an
* array of strings, so no features are returned when this parameter is true.
*
* > [!WARNING]
* >
* > The fields in the query needs to be available and listed in the [FeatureLayerView.availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#availableFields) or [SceneLayerView.availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/#availableFields).
* > Define them either in [FeatureLayer.outFields](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#outFields) or [SceneLayer.outFields](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#outFields).
*
* @since 4.20
* @see [FeatureLayer.createQuery()](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#createQuery)
* @see [FeatureLayer.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#queryFeatures)
* @see [FeatureLayerView.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#queryFeatures)
* @see [CSVLayer.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/#queryFeatures)
* @see [SceneLayer.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryFeatures)
* @see [SceneLayerView.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/#queryFeatures)
* @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
* @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](https://developers.arcgis.com/javascript/latest/references/core/rest/query/)
*/
export default class Query extends JSONSupport {
constructor(properties?: QueryProperties);
/**
* An array of Object IDs representing [aggregate](https://developers.arcgis.com/javascript/latest/references/core/Graphic/#isAggregate) (i.e. cluster) graphics. This property should be used to query features represented
* by one or more cluster graphics with the given Object IDs.
*
* This is useful in the following scenarios:
*
* - To display features included in the cluster as a collection of graphics.
* - To push clustered features to the view's popup for browsing.
* - To display statistics of features included in the cluster in the popup.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > This property only applies to [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) query methods. Support for server-side
* > queries is being considered for a future release.
*
* @example
* // Will execute query for features represented by the clusterGraphic
* if (clusterGraphic.isAggregate) {
* query.aggregateIds = [clusterGraphic.getObjectId()];
* }
*/
accessor aggregateIds: ObjectId[] | null | undefined;
/**
* Indicates if the service should cache the query results. It only applies if the layer's
* [capabilities.query.supportsCacheHint](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities) is set to `true`.
* Use only for queries that have the same parameters every time the app is used.
* Some examples of cacheable queries:
* * Queries that fetch [statistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outStatistics) or [features](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) on app load.
* * Queries based on [preset input](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where), for example, a drop-down list of US states.
* * Queries based on [preset extents](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry), for example bookmarks, in web maps.
*/
accessor cacheHint: boolean | null | undefined;
/**
* Datum transformation used for projecting geometries in the query results when
* [outSpatialReference](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outSpatialReference) is different from the layer's spatial reference.
* Requires ArcGIS Server service 10.5 or greater.
*/
accessor datumTransformation: DatumTransformation | GeographicTransformation | null | undefined;
/**
* Specifies a search distance from a given [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry) in a spatial query.
* The [units property](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#units) indicates the unit of measurement. In essence, setting this property
* creates a buffer at the specified size around the input [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry). The query will use that
* buffer to return features in the layer or layer view that adhere to the to the indicated [spatial relationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatialRelationship).
*
* If querying a feature service, the [supportsQueryWithDistance](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm)
* capability must be `true`.
*/
accessor distance: number | null | undefined;
/** Specifies the geodatabase version to display for feature service queries. */
accessor gdbVersion: string | null | undefined;
/**
* The geometry to apply to the spatial filter. The [spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatialRelationship)
* will indicate how the geometry should be used to query features.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > [Mesh](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/) geometry types are currently not supported.
*/
get geometry(): GeometryUnion | null | undefined;
set geometry(value: ((ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | (MeshProperties & { type: "mesh" })) | null | undefined);
/** Specifies the number of decimal places for geometries returned by the [JSON query operation](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeQueryJSON). */
accessor geometryPrecision: number | null | undefined;
/**
* Used only in [statistical queries](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#statistic). When one or more field names are provided in this property, the output
* statistics will be grouped based on unique values from those fields. This is only valid when
* [outStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outStatistics) has been defined.
*
* @example
* query.outStatistics = [{
* onStatisticField: "CUSTOMERS",
* outStatisticFieldName: "avg_customers",
* statisticType: "avg"
* }, {
* onStatisticField: "RATING",
* outStatisticFieldName: "min_rating",
* statisticType: "min"
* }, {
* onStatisticField: "1=1",
* outStatisticFieldName: "total_businesses",
* statisticType: "count"
* }];
* query.groupByFieldsForStatistics = [ "region" ];
*
* // query the above stats for each region in the layer
* layer.queryFeatures(query).then(displayResults);
*/
accessor groupByFieldsForStatistics: string[] | null | undefined;
/**
* A condition used with [outStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outStatistics) and [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#groupByFieldsForStatistics)
* to limit query results to groups that
* satisfy the aggregation function(s).
*
* The following aggregation functions are supported in this clause: `MIN` | `MAX` | `AVG` | `SUM` | `STDDEV` | `COUNT` | `VAR`
*
* Aggregation functions used in `having` must be included in the `outStatistics` as well. See the snippet below for an example
* of how this works.
*
* For service-based layer queries, this parameter applies only if the [supportsHavingClause](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities) property of the layer is `true`.
* This property is supported on all [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) queries.
*
* @see [ArcGIS Blog - Querying Feature Services: Having Clause](https://www.esri.com/arcgis-blog/products/api-rest/data-management/querying-feature-services-having-clause/)
* @see [ArcGIS REST API documentation](https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm)
* @example
* query.outStatistics = [{
* onStatisticField: "CUSTOMERS",
* outStatisticFieldName: "avg_customers",
* statisticType: "avg"
* }, {
* onStatisticField: "RATING",
* outStatisticFieldName: "min_rating",
* statisticType: "min"
* }, {
* onStatisticField: "1=1",
* outStatisticFieldName: "total_businesses",
* statisticType: "count"
* }];
* query.groupByFieldsForStatistics = [ "region" ];
* query.having = "AVG(CUSTOMERS) >= 1,000 AND MIN(RATING) >= 3";
*
* // query the above stats for all regions where
* // the average number of daily customers per business is
* // greater than 1,000 and the minimum customer rating
* // for a business within the region is 3
* layer.queryFeatures(query).then(displayResults);
*/
accessor having: string | null | undefined;
/**
* The historic moment to query. This parameter applies only if the `supportsQueryWithHistoricMoment`
* capability of the service being queried is `true`. This setting is provided in the layer resource.
*/
get historicMoment(): Date | null | undefined;
set historicMoment(value: (Date | number | string) | null | undefined);
/**
* The maximum distance in units of [outSpatialReference](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outSpatialReference) used for
* generalizing geometries returned by the query operation. It limits how far any part of the
* generalized geometry can be from the original geometry. If `outSpatialReference` is not defined,
* the spatialReference of the data is used.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > This property does not apply to [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) or [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/) queries.
*/
accessor maxAllowableOffset: number | null | undefined;
/**
* When set, the maximum number of features returned by the query will equal the
* `maxRecordCount` of the service multiplied by this factor. The value of this
* property may not exceed `5`.
*
* For example, if the `maxRecordCount` of your feature service is `2000`, and you set
* the `maxRecordCountFactor` to `5`, then the maximum number of features that could be
* returned by the query is `10000`.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Only supported with ArcGIS Online hosted services or ArcGIS Enterprise 10.6 services and higher.
*
* @default 1
*/
accessor maxRecordCountFactor: number;
/**
* Parameter dictates how the geometry of a multipatch feature will be returned.
* Currently, the only supported value is `xyFootprint`. If indicated, the xy footprint of each multipatch geometry will be
* returned in the result.
*
* @example
* // url to the layer of interest to query
* const queryUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Notes/FeatureServer/0";
*
* const queryObject = new Query({
* objectIds: [22],
* multipatchOption: "xyFootprint",
* outFields: ["*"],
* returnGeometry: true
* });
*
* // call the executeQueryJSON() method
* query.executeQueryJSON(queryUrl, queryObject).then(function(results){
* // results.graphics contains the graphics returned from query
* });
*/
accessor multipatchOption: "xyFootprint" | null | undefined;
/**
* The number of features to retrieve. This option should be used in conjunction with the [start property](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#start). Use this to
* implement paging (i.e. to retrieve "pages" of results when querying).
*
* If not provided, but an instance of Query has a `start` property, then the default value of `num` is 10.
* If neither `num` nor `start` properties are provided, then the default value of `num` is equal to the
* `maxRecordCount` of the service, which can be found at the REST endpoint of the FeatureLayer.
*/
accessor num: number | null | undefined;
/** An array of ObjectIDs to be used to query for features in a layer. */
accessor objectIds: ObjectId[] | null | undefined;
/**
* One or more field names used to order the query results. Specify `ASC` (ascending) or `DESC`
* (descending) after the field name to control the order. The default order is `ASC`.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > If querying a [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/), then `supportsAdvancedQueries` must be `true` on the service.
* > For [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/), `FeatureLayer.capabilities.queryRelated.supportsOrderBy` must be `true`.
*
* @see [FeatureLayer.capabilities](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities)
* @example query.orderByFields = ["STATE_NAME DESC"];
*/
accessor orderByFields: string[] | null | undefined;
/**
* Attribute fields to include in the [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/). Fields must exist in the service layer. You must list actual
* field names rather than field aliases. You may, however, use field aliases when you display
* the results of the query.
*
* When specifying the output fields, you should limit the fields to only those you expect to use in the
* query or the results. The fewer fields you include, the smaller the payload size, and therefore the faster the response of the query.
*
* You can also specify SQL expressions as `outFields` to calculate new values server side for the query results. See the
* example snippets below for an example of this.
*
* Each query must have access to the `Shape` and `ObjectId` fields for a layer. However, the list of outFields does
* not need to include these two fields.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > If specifying outFields as expressions on a feature service-based [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/), the service capabilities
* > `advancedQueryCapabilities.supportsOutFieldSQLExpression` and `useStandardizedQueries` must both be true.
*
* @example
* // query for field attributes
* query.outFields = [ "NAME", "STATE_ABBR", "POP04" ];
* @example
* // query for data returned from an expressions and other fields as the following field names
* // POP_CHANGE_2020, NAME, POP2020
* // where POP_CHANGE_2020 represents the population change from 2010 - 2020
* query.outFields = [ "( (POP2020 - POP2010) / POP2010 ) * 100 as POP_CHANGE_2020", "NAME", "POP2020" ]
*/
accessor outFields: string[] | null | undefined;
/**
* The spatial reference for the returned geometry. If not specified, the geometry is returned in the spatial
* reference of the queried layer.
*/
get outSpatialReference(): SpatialReference | null | undefined;
set outSpatialReference(value: SpatialReferenceProperties | null | undefined);
/**
* The definitions for one or more field-based statistics to be calculated. If `outStatistics` is specified the only other query parameters
* that should be used are [groupByFieldsForStatistics](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#groupByFieldsForStatistics), [orderByFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#orderByFields), [returnDistinctValues](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnDistinctValues),
* [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry), [text](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#text), [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#timeExtent) and [where](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#where).
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > For service-based queries, `outStatistics` is only supported on layers where `supportsStatistics = true`.
*
* @example
* let query = new Query();
* let statisticDefinition = new StatisticDefinition({
* statisticType: "sum",
* onStatisticField: "POP2000",
* outStatisticFieldName: "TotalPop"
* });
*
* query.outStatistics = [ statisticDefinition ];
*/
get outStatistics(): StatisticDefinition[] | null | undefined;
set outStatistics(value: StatisticDefinitionProperties[] | null | undefined);
/**
* Filters features from the layer based on pre-authored parameterized filters.
* When value is not specified for any parameter in a request, the default value,
* that is assigned during authoring time, gets used.
* Requires an ArcGIS Enterprise service 10.5 or greater. This parameter is only supported with
* [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/) pointing to a [map service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-map-service.htm).
*
* @see [ArcGIS Pro - creating a query layer](https://pro.arcgis.com/en/pro-app/latest/help/mapping/layer-properties/creating-a-query-layer.htm)
* @see [ArcGIS REST API - query a map service layer](https://developers.arcgis.com/rest/services-reference/enterprise/query-map-service-layer-.htm)
*/
accessor parameterValues: Record<string, ParameterValueType> | null | undefined;
/**
* Specifies the pixel level to be identified on the X and Y axis. Defaults to the base resolution of the
* dataset if not specified. Applicable only to Image Service layers.
*/
get pixelSize(): Point | null | undefined;
set pixelSize(value: PointProperties | null | undefined);
/**
* Used to project the geometry onto a virtual grid, likely representing
* pixels on the screen. Geometry coordinates are converted to integers
* by building a grid with a resolution matching the `quantizationParameters.tolerance`.
* Each coordinate is then snapped to one pixel on the grid.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Only supported with ArcGIS Online hosted services or ArcGIS Enterprise 10.6.1 services.
*
* @example
* let query = new Query();
* query.quantizationParameters = {
* mode: "view",
* originPosition: "upper-left",
* tolerance: 4820,
* extent: layer.fullExtent
* };
*/
get quantizationParameters(): QuantizationParameters | null | undefined;
set quantizationParameters(value: QuantizationParametersProperties | null | undefined);
/**
* Filters features from the layer that are within the specified range values.
* Requires ArcGIS Enterprise services 10.5 or greater. This parameter is only supported with
* [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/) pointing to a [map service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-map-service.htm).
*
* @see [ArcGIS Pro - creating a query layer](https://pro.arcgis.com/en/pro-app/latest/help/mapping/layer-properties/creating-a-query-layer.htm)
* @see [ArcGIS REST API - query a map service layer](https://developers.arcgis.com/rest/services-reference/enterprise/query-map-service-layer-.htm)
*/
accessor rangeValues: RangeValue[] | null | undefined;
/**
* The Dimensionally Extended 9 Intersection Model (DE-9IM) matrix relation (encoded as a string) to query
* the spatial relationship of the input [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry) to the layer's features. This
* string contains the test result of each intersection represented in the DE-9IM matrix. Each result is
* one character of the string and may be represented as either a number (maximum dimension returned: 0,1,2),
* a Boolean value (T or F), or a mask character (for ignoring results: '*').
*
* Set this parameter when the [spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatialRelationship) is `relation`.
* The [Relational functions for ST_Geometry](https://pro.arcgis.com/en/pro-app/latest/help/data/databases/pdf/stgeometry_reference.pdf) topic has additional details
* on how to construct these strings.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > This property does not apply to layer view or [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/) queries.
*
* @example
* let query = new Query({
* relationParameter: "FFFTTT***"
* });
*/
accessor relationParameter: string | null | undefined;
/**
* If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) will be returned with a centroid.
* This property only applies to queries against polygon [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Only supported with ArcGIS Online hosted services or ArcGIS Enterprise 10.6.1 services.
*
* @default false
*/
accessor returnCentroid: boolean;
/**
* If `true` then the query returns distinct values based on the field(s) specified in [outFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outFields).
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > For service-based queries, this parameter applies only if the `supportsAdvancedQueries` capability of the layer is `true`.
* > Make sure to set [returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) to `false` when `returnDistinctValues` is true. Otherwise, reliable results will not be returned.
*
* @default false
*/
accessor returnDistinctValues: boolean;
/**
* If `true`, then all features are returned for each tile request, even if they exceed the
* maximum record limit per query indicated on the service by `maxRecordCount`. If `false`, the
* tile request will not return any features if the `maxRecordCount` limit is exceeded.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Only supported with ArcGIS Online hosted services or ArcGIS Enterprise 10.6 services and higher.
*
* @default true
*/
accessor returnExceededLimitFeatures: boolean;
/**
* If `true`, each feature in the returned [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) includes the geometry.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > For [FeatureLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/) queries, the precision of the returned geometries will only be
* > as high as the view's scale resolution since geometries are quantized for improved performance on the view.
* > The smaller the scale, the lower the resolution of the geometries.
* >
* > This limitation does not apply to [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/), [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/),
* > and [CSVLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/CSVLayerView/) queries.
*
* @default false
*/
accessor returnGeometry: boolean;
/** If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) is `true`, then m-values are included in the geometry. */
accessor returnM: boolean | null | undefined;
/**
* If `true`, the [query geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/#queryGeometry) will be returned with the query results.
* It is useful for getting the buffer geometry generated when querying features by [distance](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#distance)
* or getting the query geometry projected in the [outSpatialReference](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outSpatialReference) of the query.
* The query geometry is returned only for [client-side queries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#queryFeatures)
* and [hosted feature services](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)
* and if the layer's [capabilities.query.supportsQueryGeometry](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities)
* is `true`.
*
* @default false
*/
accessor returnQueryGeometry: boolean;
/**
* When `true` output geometry will include curves. If `false`, curves (if any) will be converted to
* densified polylines or polygons.
*
* This option only applies when [returnGeometry](#returnGeometry) is set to `true` and the output geometry is
* non-quantized polylines or polygons.
*
* @since 5.0
* @see [ArcGIS REST API | Query Feature Service/Layer | returnTrueCurves](https://developers.arcgis.com/rest/services-reference/enterprise/query-feature-service-layer/#:~:text=returntruecurves)
*/
accessor returnTrueCurves: boolean | null | undefined;
/**
* If `true`, and [returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) is `true`, then z-values are included in the geometry.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > [FeatureLayerView.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLayerView/#queryFeatures),
* > [GeoJSONLayerView#queryFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures), and
* > [OGCFeatureLayerView#queryFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures) results do not
* > include the z-values when called in [2D MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/) even if `returnZ` is set to `true`.
*/
accessor returnZ: boolean | null | undefined;
/**
* For spatial queries, this parameter defines the spatial relationship to query features in the layer or layer view against the input [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry).
* The spatial relationships discover how features are spatially related to each other.
* For example, you may want to know if a polygon representing a county completely contains points representing settlements.
*
* The spatial relationship is determined by whether the boundaries or interiors of a geometry intersect.
* * Boundary — The endpoints of all linear parts for line features, or the linear outline of a polygon. Only lines and polygons have boundaries.
* * Interior — Points are entirely interior and have no boundary. For lines and polygons, the interior is any part of the geometry that is not part of the boundary.
*
* The possible values for this parameter are described below and the images highlight the geometries returned for the specified spatial
* relationship for given geometries.
*
* The `intersects` spatial relationship returns features in the layer view that intersect the query [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry).
*
* 
*
* The `contains` spatial relationship returns features in the layer view that are completely contained by the query [geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry).
*
* ![c