@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
366 lines (355 loc) • 24.1 kB
TypeScript
/**
* Executes different types of query operations on a layer. The most common
* method used is [executeQueryJSON()](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeQueryJSON), which executes the query for JSON results as defined in the
* [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) object that is passed as a parameter to the function.
* `executeQueryJSON()` returns a Promise that resolves to a
* [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/), which contains the features in the layer
* that satisfy the [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/).
*
* You can also obtain the [number of features](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeForCount) that satisfy the
* query, the [extent](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeForExtent) of features, [related features or records](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeRelationshipQuery)
* associated with a feature, [attachments](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeAttachmentQuery) for features or the [featureIds](https://developers.arcgis.com/javascript/latest/references/core/rest/query/#executeForIds)
* of features.
*
* For example, when working with a feature layer of world cities, to obtain a
* [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) of cities with a population greater than
* one million people, use the code below.
*
* @since 4.19
* @see [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/)
* @see [AttachmentQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttachmentQuery/)
* @see [RelationshipQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RelationshipQuery/)
* @see [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/)
* @example
* // query featureLayer for cities with a population greater than one million people
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* // url to the layer of interest to query
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer/0";
*
* const { features } = await query.executeQueryJSON(url, {
* where: "POP > 1000000"
* });
*/
import type Extent from "../geometry/Extent.js";
import type SpatialReference from "../geometry/SpatialReference.js";
import type AttachmentInfo from "./query/support/AttachmentInfo.js";
import type AttachmentQuery from "./support/AttachmentQuery.js";
import type FeatureSet from "./support/FeatureSet.js";
import type Query from "./support/Query.js";
import type RelationshipQuery from "./support/RelationshipQuery.js";
import type TopFeaturesQuery from "./support/TopFeaturesQuery.js";
import type { RequestOptions } from "../request/types.js";
import type { LayerMetadata } from "./types.js";
import type { QueryProperties } from "./support/Query.js";
import type { ObjectId } from "../views/types.js";
/**
* Query information about attachments associated with features from a
* [feature layer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/) specified in the url parameter. It will return an error if
* the layer's [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities) is set to false.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param attachmentQuery - Specifies the attachment parameters for query.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @returns When resolved, returns an object containing
* [AttachmentInfos](https://developers.arcgis.com/javascript/latest/references/core/rest/query/support/AttachmentInfo/) grouped by the source
* feature objectIds.
* @see [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities)
* @see [capabilities.operations.supportsQueryAttachments](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#capabilities)
*/
export function executeAttachmentQuery(url: string, attachmentQuery: AttachmentQuery, requestOptions?: RequestOptions): Promise<Record<string, AttachmentInfo[]>>;
/**
* Gets a count of the number of features that satisfy the input query.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param query - Specifies the attributes and spatial filter of the query.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @returns When resolved, the result is the number of features that satisfy the input query.
* @example
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* // url to the layer of interest to query
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
*
* const count = await query.executeForCount(url, {
* where: "POP07_SQMI > 100"
* });
*/
export function executeForCount(url: string, query: Query | QueryProperties, requestOptions?: RequestOptions): Promise<number>;
/**
* Gets the extent of the features that satisfy the input query. The count of features that
* satisfy the input query is returned upon resolution as well.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param query - Specifies the attributes and spatial filter of the query.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @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.
*/
export function executeForExtent(url: string, query: Query | QueryProperties, requestOptions?: RequestOptions): Promise<{
count: number;
extent: Extent | null;
}>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the layer specified in the url parameter.
* The result is an array of the object IDs of features that satisfy the input query.
* There is no limit to the number of object IDs returned in the ID array response.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param query - Specifies the attributes and spatial filter of the query.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @param layerMetadata - Additional query options.
* @returns When resolved, the result is an array of object IDs for
* features that satisfy the input query.
* @example
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* // url to the layer of interest to query
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
*
* const ids = await query.executeForIds(url, {
* where: "SUB_REGION = 'Pacific'"
* });
* console.log(ids); // an array of object IDs
*/
export function executeForIds(url: string, query: Query | QueryProperties, requestOptions?: RequestOptions, layerMetadata?: LayerMetadata): Promise<ObjectId[]>;
/**
* Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/) against a feature service and returns
* the count of features or records that satisfy the query.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Currently, the `executeForTopCount` is only supported with server-side [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param topFeaturesQuery - Specifies the attributes, spatial, temporal, and top
* filter of the query. The [TopFeaturesQuery.topFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/#topFilter) parameter must be set.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @returns When resolved, returns the number of features satisfying the query.
* @since 4.25
* @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
* @see [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/)
* @see [TopFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFilter/)
* @example
* // set the query to return a count
* // of features that has most sales grouped by regions.
* // top query will run against all features available in the service
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* const count = await query.executeForTopCount(url, { // autocast to TopFeaturesQuery
* where: "mag >= 6",
* topFilter: { // autocast to TopFilter
* topCount: 1,
* groupByFields: ["Region"],
* orderByFields: ["Sales DESC"],
* },
* });
*/
export function executeForTopCount(url: string, topFeaturesQuery: TopFeaturesQuery, requestOptions?: RequestOptions): Promise<number>;
/**
* Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/) against a feature service and returns
* the [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) of features that satisfy the query.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Currently, the `executeForTopExtents` is only supported with server-side [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param topFeaturesQuery - Specifies the attributes, spatial, temporal, and top
* filter of the query. The [TopFeaturesQuery.topFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/#topFilter) parameter must be set.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @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 query.
* extent | [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) \| null | The extent of features that satisfy the query.
* @since 4.25
* @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
* @see [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/)
* @see [TopFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFilter/)
* @example
* // Get the count and extent of the three highest magnitude earthquakes in each region.
*
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* const { count, extent } = await query.executeForTopExtents(url, { // autocast to TopFeaturesQuery
* where: "mag >= 6",
* topFilter: { // autocast to TopFilter
* topCount: 3,
* groupByFields: ["region"],
* orderByFields: ["mag DESC"]
* }
* });
*/
export function executeForTopExtents(url: string, topFeaturesQuery: TopFeaturesQuery, requestOptions?: RequestOptions): Promise<{
count: number;
extent: Extent | null;
}>;
/**
* Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/) against a feature service and returns an
* array of Object IDs of features that satisfy the query.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Currently, the `executeForTopIds` is only supported with server-side [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param topFeaturesQuery - Specifies the attributes, spatial, temporal, and top
* filter of the query. The [TopFeaturesQuery.topFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/#topFilter) parameter must be set.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @returns When resolved, returns an array of numbers representing the object IDs of features
* satisfying the query.
* @since 4.25
* @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
* @see [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/)
* @see [TopFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFilter/)
* @example
* // Get the objectIds top three earthquakes
* // grouped by regions and ordered by their magnitude levels
* // top query will only run against earthquakes that have mag >=6.
*
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* const ids = await query.executeForTopIds(url, { // autocast to TopFeaturesQuery
* where: "mag >= 6",
* topFilter: { // autocast to TopFilter
* topCount: 3,
* groupByFields: ["region"],
* orderByFields: ["mag DESC"]
* }
* });
*/
export function executeForTopIds(url: string, topFeaturesQuery: TopFeaturesQuery, requestOptions?: RequestOptions): Promise<number[]>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the layer specified in the url parameter. The result is returned as a
* [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing an array of [Graphic](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
* features, which can be added to the map. This array will not be populated if no results are found.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param query - Specifies the attributes and spatial filter of the query.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @param layerMetadata - Additional query options.
* @returns When resolved, a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing
* an array of graphic features is returned.
* @example
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
* const { features } = await query.executeQueryJSON(url, {
* where: "STATE_NAME = 'Washington'",
* outSpatialReference: { wkid: 4269 },
* returnGeometry: true,
* outFields: ["HOUSEHOLDS"],
* });
*/
export function executeQueryJSON(url: string, query: Query | QueryProperties, requestOptions?: RequestOptions, layerMetadata?: LayerMetadata): Promise<FeatureSet>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the layer specified in the url parameter. The result is returned as a
* [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/). A [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) contains an array of [Graphic](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
* features, which can be added to the map. This array will not be populated if no results are found.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param query - Specifies the attributes and spatial filter of the query.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @param layerMetadata - Additional query options.
* @returns When resolved, a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing
* an array of graphics is returned.
* @example
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
* const { features } = await query.executeQueryPBF(url, {
* where: "STATE_NAME = 'Washington'",
* outSpatialReference: { wkid: 4269 },
* returnGeometry: true,
* outFields: ["HOUSEHOLDS"],
* });
*/
export function executeQueryPBF(url: string, query: Query | QueryProperties, requestOptions?: RequestOptions, layerMetadata?: LayerMetadata): Promise<FeatureSet>;
/**
* Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RelationshipQuery/) against the layer or table specified in the url parameter.
* If the query is successful, the returned results are
* [FeatureSets](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) grouped by source layer or table objectIds.
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param relationshipQuery - Specifies relationship parameters
* for querying related features or records from a layer or a table.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @returns When resolved, the results are [FeatureSets](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/)
* grouped by source layer or table objectIds. Each [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) contains an array of [Graphic](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
* features including the values of the fields requested by the user.
* @example
* const [query, RelationshipQuery] = await $arcgis.import([
* "@arcgis/core/rest/query.js",
* "@arcgis/core/rest/support/RelationshipQuery.js",
* ]);
*
* // url to the layer of interest to query
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/0";
*
* // specify relationship query parameter
* const queryRelationship = new RelationshipQuery({
* outFields: ["*"],
* relationshipId: relationshipId,
* objectIds: [11, 22]
* });
*
* // query related features that meet the query parameters
* const featureSet = await query.executeRelationshipQuery(url, queryRelationship);
* console.log("query results", featureSet);
*/
export function executeRelationshipQuery(url: string, relationshipQuery: RelationshipQuery, requestOptions?: RequestOptions): Promise<Record<string, FeatureSet>>;
/**
* Executes a [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/) against a feature service and returns a
* [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) once the promise resolves.
* The [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) contains an array of top [features](https://developers.arcgis.com/javascript/latest/references/core/Graphic/)
* grouped and ordered by specified fields. For example, you can call this method to query top three counties grouped
* by state names while ordering them based on their populations in a descending order.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Currently, the `executeTopFeaturesQuery` is only supported with server-side [FeatureLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/).
*
* @param url - URL to the ArcGIS Server REST resource that represents a feature layer (usually of a Feature Service Layer or Map Service Layer).
* @param topFeaturesQuery - Specifies the attributes, spatial, temporal, and top
* filter of the query. The [TopFeaturesQuery.topFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/#topFilter) parameter must be set.
* @param outSpatialReference - The desired output spatial reference.
* @param requestOptions - Additional [options](https://developers.arcgis.com/javascript/latest/references/core/request/#request) to be used for the data request.
* @returns When resolved, returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) containing
* an array of features that are grouped and ordered specified fields.
* @since 4.25
* @see [Sample - Aggregate spatial statistics](https://developers.arcgis.com/javascript/latest/sample-code/featurelayer-query-aggregate/)
* @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
* @see [TopFeaturesQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFeaturesQuery/)
* @see [TopFilter](https://developers.arcgis.com/javascript/latest/references/core/rest/support/TopFilter/)
* @example
* // Query the most visited national parks in each state
* // and order them by the most visited
* // query will run against all features available in the service
*
* const query = await $arcgis.import("@arcgis/core/rest/query");
*
* const url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
* const { features } = await query.executeTopFeaturesQuery(url, { // autocast to TopFeaturesQuery
* outFields: ["State, TOTAL, Park"],
* topFilter: { // autocast to TopFilter
* topCount: 1,
* groupByFields: ["State"],
* orderByFields: ["TOTAL DESC"]
* },
* });
*/
export function executeTopFeaturesQuery(url: string, topFeaturesQuery: TopFeaturesQuery, outSpatialReference: SpatialReference, requestOptions?: RequestOptions): Promise<FeatureSet>;