@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
865 lines (862 loc) • 52.2 kB
TypeScript
import type Graphic from "../Graphic.js";
import type Collection from "../core/Collection.js";
import type Extent from "../geometry/Extent.js";
import type Layer from "./Layer.js";
import type Field from "./support/Field.js";
import type SubtypeSublayer from "./support/SubtypeSublayer.js";
import type PortalItem from "../portal/PortalItem.js";
import type AttachmentInfo from "../rest/query/support/AttachmentInfo.js";
import type FeatureSet from "../rest/support/FeatureSet.js";
import type Query from "../rest/support/Query.js";
import type { ClonableMixin } from "../core/Clonable.js";
import type { MultiOriginJSONSupportMixin } from "../core/MultiOriginJSONSupport.js";
import type { EditOptions, Edits, EditsResult, FeatureEditResult } from "../editing/types.js";
import type { LayerEvents, LayerProperties } from "./Layer.js";
import type { LayerSaveAsOptions, LayerSaveOptions } from "./types.js";
import type { APIKeyMixin, APIKeyMixinProperties } from "./mixins/APIKeyMixin.js";
import type { BlendLayer, BlendLayerProperties } from "./mixins/BlendLayer.js";
import type { CustomParametersMixin, CustomParametersMixinProperties } from "./mixins/CustomParametersMixin.js";
import type { DisplayFilteredLayer, DisplayFilteredLayerProperties } from "./mixins/DisplayFilteredLayer.js";
import type { EditBusLayer, EditBusLayerEvents } from "./mixins/EditBusLayer.js";
import type { FeatureLayerBase, FeatureLayerBaseProperties } from "./mixins/FeatureLayerBase.js";
import type { OperationalLayer, OperationalLayerProperties } from "./mixins/OperationalLayer.js";
import type { PortalLayer, PortalLayerProperties } from "./mixins/PortalLayer.js";
import type { RefreshableLayerEvents, RefreshableLayer, RefreshableLayerProperties } from "./mixins/RefreshableLayer.js";
import type { ScaleRangeLayer, ScaleRangeLayerProperties } from "./mixins/ScaleRangeLayer.js";
import type { TemporalLayer, TemporalLayerProperties } from "./mixins/TemporalLayer.js";
import type { PortalItemProperties } from "../portal/PortalItem.js";
import type { RequestOptions } from "../request/types.js";
import type { AttachmentQueryProperties } from "../rest/support/AttachmentQuery.js";
import type { QueryProperties } from "../rest/support/Query.js";
import type { RelationshipQueryProperties } from "../rest/support/RelationshipQuery.js";
import type { SubtypeSublayerProperties } from "./support/SubtypeSublayer.js";
import type { ReadonlyArrayOrCollection } from "../core/Collection.js";
export interface SubtypeGroupLayerProperties extends LayerProperties, APIKeyMixinProperties, CustomParametersMixinProperties, PortalLayerProperties, OperationalLayerProperties, RefreshableLayerProperties, ScaleRangeLayerProperties, TemporalLayerProperties, BlendLayerProperties, DisplayFilteredLayerProperties, FeatureLayerBaseProperties, Partial<Pick<SubtypeGroupLayer, "outFields">> {
/**
* A [Collection](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/) of [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/) objects that allow
* you to alter the properties of one or more sublayers of the SubtypeGroupLayer.
* If this property is not specified, all the sublayers from the feature service are displayed as defined in the service.
*
* All sublayers must be referenced using the [SubtypeSublayer.subtypeCode](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/#subtypeCode) to identify the sublayer. The sublayers may be [added](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/#add),
* [removed](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/#remove), or
* [reordered](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/#reorder) using the
* [Collection](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/) methods. Because [Sublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Sublayer/) extends
* [Accessor](https://developers.arcgis.com/javascript/latest/references/core/core/Accessor/), its properties may be
* [watched](https://developers.arcgis.com/javascript/latest/watch-for-changes/#watch-for-changes-in-the-api).
*
* @example
* // Only includes the first SubtypeSublayer from the SubtypeGroupLayer
* let layer = new SuptypeGroupLayer({
* url: "https://sampleserver7.arcgisonline.com/server/rest/services/UtilityNetwork/NapervilleElectric/FeatureServer/0",
* sublayers: [{
* subtypeCode: 0,
* visible: true,
* renderer: {
* type: "simple",
* symbol: {
* type: "simple-marker",
* style: "circle",
* color: [120, 120, 120, 255],
* size: 6
* }
* }
* }]
* });
*/
sublayers?: ReadonlyArrayOrCollection<SubtypeSublayerProperties>;
}
export interface SubtypeGroupLayerEvents extends EditBusLayerEvents, LayerEvents, RefreshableLayerEvents {}
/**
* ## Overview
*
* The SubtypeGroupLayer is a single layer that automatically creates a [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/) for
* each subtype in its corresponding [feature service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-feature-service-.htm). This allows for each
* subtype to have its own configured layer properties, and as a result, each sublayer can visualize its feature data with a distinct visibility,
* renderer, and popup properties. This allows for interaction of the sublayers as if they were individual layers, when in reality, they all share the same feature source.
*
* The SubtypeGroupLayer takes advantage of the fact that all of its [sublayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#sublayers) share a single feature service in order to draw more efficiently, and optimize
* its queries across all sublayers. For instance, a single request is sent when panning or zooming in the [Map](https://developers.arcgis.com/javascript/latest/references/core/Map/), keeping in mind that each sublayer can have its own renderer.
* This approach eliminates the need to require multiple feature layers to be
* published. This would result in each feature layer sending its own request when panning and zooming the map.
*
* The SubtypeGroupLayer will be useful for data, such as the utility network datasets, which currently contain feature layers with numerous subtypes.
*
* ## Creating a SubtypeGroupLayer
*
* A SubtypeGroupLayer can be created from a [service URL](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#url), or an ArcGIS portal [item id](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#portalItem).
*
* > [!WARNING]
* >
* > **Note**
* >
* > The feature service must be published with subtypes to use the `SubtypeGroupLayer`. To learn more about publishing a feature service with subtypes and how to create a subtype group layer using ArcGIS Pro, please read the following documentation:
* > - [Introduction to subtypes](https://pro.arcgis.com/en/pro-app/2.8/help/data/geodatabases/overview/an-overview-of-subtypes.htm)
* > - [Subtype group layers](https://pro.arcgis.com/en/pro-app/latest/help/mapping/layer-properties/subtype-layers.htm#GUID-0CC6ED6A-15B2-4F96-9CB6-0D108D5D37C5).
*
* ### Reference a service URL
*
* To create a SubtypeGroupLayer instance from a service, you must set the [url](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#url) property to the REST endpoint of
* a layer in a feature service. The feature service must have a [subtype field](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#subtypeField), otherwise the layer will fail to load.
*
* ```js
* const SubtypeGroupLayer = await $arcgis.import("@arcgis/core/layers/SubtypeGroupLayer.js");
* const stgl = new SubtypeGroupLayer({
* url: "https://sampleserver7.arcgisonline.com/server/rest/services/UtilityNetwork/NapervilleElectric/FeatureServer/0"
* });
* map.add(stgl); // adds the layer to the map
* ```
*
* ### Reference an ArcGIS portal Item ID
*
* You can also create a SubtypeGroupLayer from its [portalItem](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#portalItem) property if it exists as an item in ArcGIS Online
* or ArcGIS Enterprise.
*
* ```js
* const stgl = new SubtypeGroupLayer({
* portalItem: { // autocasts as esri/portal/PortalItem
* id: "8444e275037549c1acab02d2626daae"
* }
* });
* map.add(stgl);
* ```
*
* ## Sublayers
*
* The [sublayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#sublayers) of the SubtypeGroupLayer are known as [SubtypeSublayers](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/).
* These sublayers do not correspond to individual services, but rather are created dynamically by the SubtypeGroupLayer. Each
* sublayer corresponds to a subtype in the SubtypeGroupLayer feature service. One can configure each layer's properties including the
* renderer and popup. The sublayers' layer properties can be defined via the [sublayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#sublayers) property. The following demonstrates
* an example of configuring the layer properties of the sublayers.
*
* ```js
* const stgl = new SubtypeGroupLayer({
* url: "https://sampleserver7.arcgisonline.com/server/rest/services/UtilityNetwork/NapervilleElectric/FeatureServer/0",
* sublayers: [ // autocasts as a Collection of SubtypeSublayers
* {
* subtypeCode: 12,
* visible: true,
* renderer: simpleRenderer
* },
* {
* subtypeCode: 14,
* visible: false,
* renderer: classBreaksRenderer
* },
* {
* subtypeCode: 16,
* visible: true,
* renderer: classBreaksRenderer,
* popupTemplate: popupTemplate
* }
* ]
* });
* map.add(stgl);
* ```
*
* ## Data Visualization
* Features in a SubtypeGroupLayer are visualized by setting a [Renderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/Renderer/) to the
* [SubtypeSublayer.renderer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/#renderer) property of each sublayer. Features may be visualized with the same symbol using
* [SimpleRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/SimpleRenderer/), by type with [UniqueValueRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/UniqueValueRenderer/), or
* with class breaks using [ClassBreaksRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/ClassBreaksRenderer/).
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > SubtypeGroupLayer is only supported in 2D [MapViews](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/).
* > [Clustering](https://developers.arcgis.com/javascript/latest/references/core/layers/support/FeatureReductionCluster/) is currently not supported.
* > [DotDensityRenderer](https://developers.arcgis.com/javascript/latest/references/core/renderers/DotDensityRenderer/) is currently not supported.
*
* @since 4.20
* @see [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/)
* @see [Sample - Intro to SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/sample-code/layers-subtypegrouplayer/)
* @see [How to use the SubtypeGroupLayer with the ArcGIS Maps SDK for JavaScript](https://www.esri.com/arcgis-blog/products/js-api-arcgis/developers/subtypegrouplayer-with-arcgis-api-for-javascript/)
* @see [Subtype group layers](https://pro.arcgis.com/en/pro-app/latest/help/mapping/layer-properties/subtype-layers.htm)
*/
export default class SubtypeGroupLayer extends SubtypeGroupLayerSuperclass {
/**
* @deprecated
* Do not directly reference this property.
* Use EventNames and EventTypes helpers from \@arcgis/core/Evented
*/
"@eventTypes": SubtypeGroupLayerEvents;
constructor(properties?: SubtypeGroupLayerProperties);
/**
* Determines if the layer is editable.
*
* @default true
* @see [applyEdits()](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#applyEdits)
*/
get editingEnabled(): boolean;
/**
* An array of fields in the layer. Each field represents an attribute
* that may contain a value for each feature in the layer. For example,
* a field named `POP_2015`, stores information about total population as a
* numeric value for each feature; this value represents the total number
* of people living within the geographic bounds of the feature.
*
* @example
* // define each field's schema
* const fields = [
* new Field({
* name: "ObjectID",
* alias: "ObjectID",
* type: "oid"
* }), new Field({
* name: "description",
* alias: "Description",
* type: "string"
* }), new Field ({
* name: "title",
* alias: "Title",
* type: "string"
* })
* ];
*
* // See the sample snippet for the source property
* const layer = new SubtypeSublayer({
* // Object ID field is inferred from the fields array
* fields: fields
* });
*/
get fields(): Field[];
/**
* An array of field names from the service to include with each feature.
* To fetch the values from all fields in the layer, use `["*"]`. Fields specified in
* `outFields` will be requested alongside with required fields for rendering,
* and setting the [elevation info](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#elevationInfo) for the layer.
* The required fields and `outFields` are used to populate
* [FeatureLikeLayerView.availableFields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields).
* Set this property to include the fields that will be used for client-side
* [queries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures)
* if the fields are not part of required fields used for rendering.
*
* @see [fieldUtils](https://developers.arcgis.com/javascript/latest/references/core/layers/support/fieldUtils/)
* @example
* // Includes all fields from the service in the layer
* fl.outFields = ["*"];
* @example
* // Get the specified fields from the service in the layer
* // These fields will be added to SubtypeGroupLayerView.availableFields
* // along with rendering and labeling fields. Use these fields
* // for client-side filtering and querying.
* fl.outFields = ["NAME", "POP_2010", "FIPS", "AREA"];
* @example
* // set the outFields for the layer coming from webmap
* webmap.when(function () {
* layer = webmap.layers.at(1);
* layer.outFields = ["*"];
* });
*/
accessor outFields: string[] | null | undefined;
/**
* A [Collection](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/) of [SubtypeSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/) objects that allow
* you to alter the properties of one or more sublayers of the SubtypeGroupLayer.
* If this property is not specified, all the sublayers from the feature service are displayed as defined in the service.
*
* All sublayers must be referenced using the [SubtypeSublayer.subtypeCode](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/#subtypeCode) to identify the sublayer. The sublayers may be [added](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/#add),
* [removed](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/#remove), or
* [reordered](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/#reorder) using the
* [Collection](https://developers.arcgis.com/javascript/latest/references/core/core/Collection/) methods. Because [Sublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Sublayer/) extends
* [Accessor](https://developers.arcgis.com/javascript/latest/references/core/core/Accessor/), its properties may be
* [watched](https://developers.arcgis.com/javascript/latest/watch-for-changes/#watch-for-changes-in-the-api).
*
* @example
* // Only includes the first SubtypeSublayer from the SubtypeGroupLayer
* let layer = new SuptypeGroupLayer({
* url: "https://sampleserver7.arcgisonline.com/server/rest/services/UtilityNetwork/NapervilleElectric/FeatureServer/0",
* sublayers: [{
* subtypeCode: 0,
* visible: true,
* renderer: {
* type: "simple",
* symbol: {
* type: "simple-marker",
* style: "circle",
* color: [120, 120, 120, 255],
* size: 6
* }
* }
* }]
* });
*/
get sublayers(): Collection<SubtypeSublayer>;
set sublayers(value: ReadonlyArrayOrCollection<SubtypeSublayerProperties>);
/** The layer type provides a convenient way to check the type of the layer without the need to import specific layer modules. */
get type(): "subtype-group";
/**
* Adds an attachment to a feature. This operation is available only if the layer's
* [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities) is set to `true`.
*
* @param feature - Feature to which the attachment is to be added.
* @param attachment - HTML form that contains a file upload field pointing to the file to be added as an attachment.
* @returns When resolved, a [FeatureEditResult](https://developers.arcgis.com/javascript/latest/references/core/editing/types/#FeatureEditResult)
* object is returned. FeatureEditResult indicates whether or not the edit was successful. If successful, the `objectId` of the result is the Id of
* the new attachment. If unsuccessful, it also includes an error `name` and error `message`.
* @see [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities)
* @example
* view.when(function () {
* view.on("click", function (event) {
*
* view.hitTest(event).then(function (response) {
* const feature = response.results[0].graphic;
*
* // The form is defined as below in the html.
* // For enterprise services:
* // 1. File input name must be "attachment"
* // <form id="attachmentForm">
* // Select a file: <input type="file" name="attachment">
* // </form>
* const attachmentForm = document.getElementById("attachmentForm");
* const formData = new FormData(attachmentForm);
*
* // For enterprise services - add input with name:f and value:json
* formData.append("f","json");
* const form = new FormData();
* form.set("attachment", file);
* form.append("f","json")
* let form = document.getElementById("myForm");
*
* // Add an attachment to the clicked feature.
* // The attachment is taken from the form.
* layer.addAttachment(feature, form).then(function (result) {
* console.log("attachment added: ", result);
* })
* .catch(function (err) {
* console.log("attachment adding failed: ", err);
* });
* });
* });
* });
*/
addAttachment(feature: Graphic, attachment: HTMLFormElement | FormData): Promise<FeatureEditResult>;
/**
* Applies edits to features in a layer. New features can be created and existing features can be updated or deleted. Feature geometries and/or attributes may be modified.
* Only applicable to layers in a [feature service](https://developers.arcgis.com/rest/services-reference/feature-service.htm)
* and client-side features set through the FeatureLayer's [FeatureLayer.source](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#source) property. Attachments can also be added, updated or deleted.
*
* If client-side features are added, removed or updated at runtime using [applyEdits()](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#applyEdits) then use FeatureLayer's
* [FeatureLayer.queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#queryFeatures) method to return updated features.
*
* > [!WARNING]
* >
* > **Notes**
* >
* > FeatureLayers are not optimized for high-frequency, dynamic data, or real-time streaming use cases. As a result, they may not perform efficiently with rapidly updating data streams.
* > For real-time or dynamic data updates, use [StreamLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/), which are designed for efficient handling of high-frequency streaming data and dynamic features.
* >
* > When calling the applyEdits method on a service that does not have [vertical coordinate system](https://pro.arcgis.com/en/pro-app/help/mapping/properties/vertical-coordinate-systems.htm) information,
* > the z-values of the geometries in the `edits` object will automatically be converted to match the spatial reference of the layer.
* > Example: The service has a horizontal spatial reference with `feet` units, and `applyEdits()` is called with z-values based on `meter` units,
* > then the method will automatically convert the z values from `meter` to `feet` units.
* >
* > As of version 4.17, using applyEdits to add geometries with z-values to a FeatureLayer with `hasZ: false` no longer silently drops the z-value and now throws an error.
*
* @param edits - Object containing features and attachments to be added, updated or deleted.
* @param options - Additional edit options to specify when editing features or attachments.
* @returns When resolved, an [EditsResult](https://developers.arcgis.com/javascript/latest/references/core/editing/types/#EditsResult)
* object is returned.
* @see [Sample - Edit features](https://developers.arcgis.com/javascript/latest/sample-code/editing-applyedits/)
* @example
* function addFeature(geometry) {
* const attributes = {};
* attributes["Description"] = "This is the description";
* attributes["Address"] = "380 New York St";
*
* // Date.now() returns number of milliseconds elapsed
* // since 1 January 1970 00:00:00 UTC.
* attributes["Report_Date"] = Date.now();
*
* const addFeature = new Graphic({
* geometry: geometry,
* attributes: attributes
* });
*
* const deleteFeatures = [
* { objectId: 467 },
* { objectId: 500 }
* ];
*
* // or specify globalIds of features to be deleted
* // const deleteFeature = [
* // { globalId: "18633204-1801-4d35-a73a-174563608ad9" }
* // ];
*
* const promise = featureLayer.applyEdits({
* addFeatures: [addFeature],
* deleteFeatures: deleteFeatures
* });
* }
*/
applyEdits(edits: Edits, options?: EditOptions): Promise<EditsResult>;
/**
* Creates query parameter object that can be used to fetch features that
* satisfy the layer's configurations such as [definitionExpression](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#definitionExpression),
* [gdbVersion](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#gdbVersion), and [historicMoment](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#historicMoment).
* It will return `Z` and `M` values based on the layer's [data capabilities](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities).
* It sets the query parameter's [Query.outFields](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outFields) property to `["*"]`.
* The results will include geometries of features and values for all
* [available fields](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#availableFields) for
* [client-side queries](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures)
* or all fields in the layer for [server side queries](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#queryFeatures).
*
* @returns The query object representing the layer's definition expression
* and other configurations.
* @see [Sample - Query features from a SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/sample-code/featurelayer-query/)
* @example
* // this snippet shows the query parameter object that is returned
* // from SubtypeGroupLayer.createQuery().
* const queryParams = new Query();
* const dataCapabilities = layer.get<DataCapabilities>("capabilities.data");
*
* queryParams.gdbVersion = layer.gdbVersion;
* queryParams.historicMoment = layer.historicMoment;
* queryParams.returnGeometry = true;
*
* if (dataCapabilities) {
* if (dataCapabilities.supportsZ && layer.returnZ != null) {
* queryParams.returnZ = layer.returnZ;
* }
*
* if (dataCapabilities.supportsM && layer.returnM != null) {
* queryParams.returnM = layer.returnM;
* }
* }
*
* queryParams.outFields = ["*"];
* queryParams.where = layer.definitionExpression || "1=1";
* queryParams.multipatchOption = layer.geometryType === "multipatch" ? "xyFootprint" : null;
* @example
* // Get a query object for the layer's current configuration
* // queryParams.outFields will be set to ["*"] to get values
* // for all available fields.
* const queryParams = layer.createQuery();
* // set a geometry for filtering features by a region of interest
* queryParams.geometry = extentForRegionOfInterest;
* // Add to the layer's current definitionExpression
* queryParams.where = queryParams.where + " AND TYPE = 'Extreme'";
*
* // query the layer with the modified params object
* layer.queryFeatures(queryParams).then(function(results){
* // prints the array of result graphics to the console
* console.log(results.features);
* });
*/
createQuery(): Query;
/**
* Deletes attachments from a feature. This operation is available only if the layer's
* [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities) is set to `true`.
*
* @param feature - Feature containing attachments to be deleted.
* @param attachmentIds - Ids of the attachments to be deleted.
* @returns When resolved, an array of [FeatureEditResults](https://developers.arcgis.com/javascript/latest/references/core/editing/types/#FeatureEditResult)
* is returned. FeatureEditResult indicates whether or not the edit was successful. If successful, the `objectId` of the result is the Id of
* the new attachment. If unsuccessful, it also includes an error `name` and error `message`.
* @see [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities)
*/
deleteAttachments(feature: Graphic, attachmentIds: number[]): Promise<FeatureEditResult[]>;
/**
* Returns the sublayer to which the given feature belongs.
*
* @param feature - The feature whose sublayer will be returned.
* @returns The sublayer from the `SubtypeGroupLayer` to which the feature belongs to.
* @since 4.27
*/
findSublayerForFeature(feature: Graphic): SubtypeSublayer | null | undefined;
/**
* Returns the sublayer with the [SubtypeSublayer.subtypeCode](https://developers.arcgis.com/javascript/latest/references/core/layers/support/SubtypeSublayer/#subtypeCode) that matches the number passed as an argument.
*
* @param subtypeCode - The subtype coded value.
* @returns The sublayer from the `SubtypeGroupLayer` to which the feature belongs to.
* @since 4.27
* @example
* // Updates the renderer of a sublayer after first finding
* // the sublayer from the subtypeCode.
* const subtypeCode = 5;
* const subtypeSublayer = subtypeGroupLayer.findSublayerForSubtypeCode(subtypeCode);
*
* subtypeSublayer.renderer = new SimpleMarkerSymbol({
* color: "#ffffff",
* size: 12,
* outline: {
* color: "#000000",
* width: 1
* }
* });
*/
findSublayerForSubtypeCode(subtypeCode: number): SubtypeSublayer | null | undefined;
/**
* Loads all of the sublayers. See [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#loaded) or [loadStatus](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#loadStatus)
* properties to check the status.
*
* @returns Resolves when all the sublayers have been [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#loaded).
* Rejects if one or more of the sublayers failed to load.
* @see [load()](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#load)
* @example
* // Load all resources but ignore if one or more of them failed to load
* subtypeGroupLayer.loadAll()
* .catch(function(error) {
* // Ignore any failed sublayers
* })
* .then(function() {
* console.log("All loaded");
* });
*/
loadAll(): Promise<this>;
/**
* Query information about attachments associated with features. It will return an error if the layer's
* [capabilities.data.supportsAttachment](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities) property is `false`.
* Attachments for multiple features can be queried if the layer's [capabilities.operations.supportsQueryAttachments](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities)
* is `true`.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > When the layer's[capabilities.operations.supportsQueryAttachments](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities) property is
* > `false`, [AttachmentQuery.objectIds](https://developers.arcgis.com/javascript/latest/references/core/rest/support/AttachmentQuery/#objectIds) property only accepts a single
* > `objectId`.
*
* @param attachmentQuery - Specifies the attachment parameters for query.
* @param options - An object with the following properties.
* @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/SubtypeGroupLayer/#capabilities)
* @see [capabilities.operations.supportsQueryAttachments](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#capabilities)
* @example
* layer.when(function () {
* // queryObjectIds for all features within the layer
* layer.queryObjectIds().then(function (objectIds) {
* // Define parameters for querying attachments,
* // query features where objectIds are less than 735,
* // and only query jpeg attachments for these features.
* let attachmentQuery = {
* objectIds: objectIds,
* definitionExpression: "OBJECTID < 735",
* attachmentTypes: ["image/jpeg"]
* };
*
* // Only pass in one objectId for attachmentQuery.objectIds
* // if the layer's capabilities.operations.supportsQueryAttachments is false
* layer.queryAttachments(attachmentQuery).then(function (attachments) {
* // Print out all returned attachment infos to the console.
* attachmentQuery.objectIds.forEach(function (objectId) {
* if (attachments[objectId]) {
* let attachment = attachments[objectId];
* console.group("attachment for", objectId);
* attachment.forEach(function (item) {
* console.log("attachment id", item.id);
* console.log("content type", item.contentType);
* console.log("name", item.name);
* console.log("size", item.size);
* console.log("url", item.url);
* console.groupEnd();
* });
* }
* });
* })
* .catch(function (error) {
* console.log("attachment query error", error);
* })
* });
* });
*/
queryAttachments(attachmentQuery: AttachmentQueryProperties, options?: RequestOptions): Promise<Record<string, AttachmentInfo[]>>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the feature service and
* returns the [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) of features that satisfy the query. If no
* parameters are specified, then the extent and count of all features
* satisfying the layer's configuration/filters are returned. This is valid only for
* [hosted feature services](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)
* on [arcgis.com](https://arcgis.com) and for ArcGIS Server 10.3.1 and later.
*
* > [!WARNING]
* >
* > To query for the extent of features/graphics available to or visible in the
* > [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/) on the client rather than making a server-side query, you must
* > use the
* > [SubtypeGroupLayerView#queryExtent](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryExtent)
* > method.
*
* @param query - Specifies the attributes and spatial
* filter of the query. If no parameters are specified, then the extent and count of all features
* satisfying the layer's configuration/filters are returned.
* @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
* // Queries for the extent of all features matching the layer's configurations
* // e.g. definitionExpression
* layer.queryExtent().then(function(results){
* // go to the extent of the results satisfying the query
* view.goTo(results.extent);
* });
* @example
* const layer = new SubtypeGroupLayer({
* url: fsUrl // points to a Feature Service layer url
* });
*
* const query = new Query();
* query.where = "region = 'Southern California'";
*
* layer.queryExtent(query).then(function(results){
* view.goTo(results.extent); // go to the extent of the results satisfying the query
* });
*/
queryExtent(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<{
count: number;
extent: Extent | null;
}>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the feature service and
* returns the number of features that satisfy the query. If no parameters are specified,
* the total number of features satisfying the layer's configuration/filters is returned.
*
* > [!WARNING]
* >
* > To query for the count of features/graphics available to or visible in the
* > [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/) on the client rather than making a server-side query, you must
* > use the
* > [SubtypeGroupLayerView#queryFeatureCount](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatureCount)
* > method.
*
* @param query - Specifies the attributes and
* spatial filter of the query. If no parameters are specified, the total number of features
* satisfying the layer's configuration/filters is returned.
* @param options - An object with the following properties.
* @returns When resolved, returns the number of features that satisfy the query.
* @example
* // Queries for the count of all features matching the layer's configurations
* // e.g. definitionExpression
* layer.queryFeatureCount().then(function(numFeatures){
* // prints the total count to the console
* console.log(numFeatures);
* });
* @example
* const layer = new SubtypeGroupLayer({
* url: fsUrl // points to a Feature Service layer url
* });
*
* const query = new Query();
* query.where = "region = 'Southern California'";
*
* layer.queryFeatureCount(query).then(function(numResults){
* console.log(numResults); // prints the number of results satisfying the query
* });
*/
queryFeatureCount(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<number>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the feature service and returns a
* [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) once the promise resolves.
* 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.
*
* > [!WARNING]
* >
* > To query features/graphics available to or visible in the
* > [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/) on the client rather than making a server-side query, you must
* > use the
* > [SubtypeGroupLayerView#queryFeatures](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryFeatures)
* > method.
* >
* > When querying a service with z-values and no [vertical coordinate system](https://pro.arcgis.com/en/pro-app/help/mapping/properties/vertical-coordinate-systems.htm) information,
* > the z-values will automatically be converted to match the [Query.outSpatialReference](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#outSpatialReference) units.
* > Example: The service has a horizontal spatial reference using `feet` units and the query is made with `outSpatialReference`
* > based on `meter` units, then [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#queryFeatures) automatically converts the values from `feet` to `meter` units.
*
* @param query - Specifies the attributes and spatial
* filter of the query. If no parameters are specified, then all features satisfying the layer's
* configuration/filters are returned.
* @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 features from a SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/sample-code/featurelayer-query/)
* @see [Query and filter guide](https://developers.arcgis.com/javascript/latest/query-filter/)
* @example
* // Queries for all the features matching the layer's configurations
* // e.g. definitionExpression
* layer.queryFeatures().then(function(results){
* // prints the array of result graphics to the console
* console.log(results.features);
* });
* @example
* const layer = new SubtypeGroupLayer({
* url: fsUrl // points to a Feature Service layer url
* });
*
* const query = new Query();
* query.where = "STATE_NAME = 'Washington'";
* query.outSpatialReference = { wkid: 102100 };
* query.returnGeometry = true;
* query.outFields = [ "CITY_NAME" ];
*
* layer.queryFeatures(query).then(function(results){
* console.log(results.features); // prints the array of features to the console
* });
* @example
* // Get a query object for the layer's current configuration
* const queryParams = layer.createQuery();
* // set a geometry for filtering features by a region of interest
* queryParams.geometry = extentForRegionOfInterest;
* // Add to the layer's current definitionExpression
* queryParams.where = queryParams.where + " AND TYPE = 'Extreme'";
*
* // query the layer with the modified params object
* layer.queryFeatures(queryParams).then(function(results){
* // prints the array of result graphics to the console
* console.log(results.features);
* });
* @example
* const layer = new SubtypeGroupLayer({
* url: fsUrl // points to a Feature Service layer url
* });
*
* // query all features from the layer and only return
* // attributes specified in outFields.
* const query = { // autocasts as Query
* where: "1=1", // select all features
* returnGeometry: false,
* outFields: ["State_Name", "City_Name", "pop2010"]
* };
*
* layer.queryFeatures(query).then(function(results){
* console.log(results.features); // prints the array of features to the console
* });
*/
queryFeatures(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<FeatureSet>;
/**
* Executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against the feature service and returns an
* array of Object IDs for features that satisfy the input query. If no parameters are specified,
* then the Object IDs of all features satisfying the layer's configuration/filters are returned.
*
* > [!WARNING]
* >
* > To query for ObjectIDs of features/graphics available to or visible in the
* > [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/) on the client rather than making a server-side query, you must
* > use the
* > [SubtypeGroupLayerView#queryObjectIds](https://developers.arcgis.com/javascript/latest/references/core/views/layers/FeatureLikeLayerView/#queryObjectIds)
* > method.
*
* @param query - Specifies the attributes and spatial
* filter of the query. If no parameters are specified, then the Object IDs of all features
* satisfying the layer's configuration/filters are returned.
* @param options - An object with the following properties.
* @returns When resolved, returns an array of numbers representing the object IDs of the features
* satisfying the query.
* @example
* // Queries for all the Object IDs of features matching the layer's configurations
* // e.g. definitionExpression
* layer.queryObjectIds().then(function(results){
* // prints the array of Object IDs to the console
* console.log(results);
* });
* @example
* const layer = new SubtypeGroupLayer({
* url: fsUrl // points to a Feature Service layer url
* });
*
* const query = new Query();
* query.where = "region = 'Southern California'";
*
* layer.queryObjectIds(query).then(function(ids){
* console.log(ids); // an array of object IDs
* });
*/
queryObjectIds(query?: QueryProperties | null | undefined, options?: RequestOptions): Promise<number[]>;
/**
* Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RelationshipQuery/) against the feature service and
* returns [FeatureSets](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) grouped by source layer or table objectIds.
*
* @param relationshipQuery - Specifies relationship parameters
* for querying related features or records from a layer or a table.
* @param options - An object with the following properties.
* @returns When resolved, returns [FeatureSets](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) grouped
* by source layer/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.
* @see [relationships property](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#relationships)
* @see [Sample - Query Related Features](https://developers.arcgis.com/javascript/latest/sample-code/query-related-features/)
* @example
* const objectIds = [385, 416];
*
* // relationship query parameter
* const query = {
* outFields: ["*"],
* relationshipId: relationshipId,
* objectIds: objectIds
* }
*
* // query related features for given objectIds
* layer.queryRelatedFeatures(query).then(function (result) {
* objectIds.forEach(function (objectId) {
* // print out the attributes of related features if the result
* // is returned for the specified objectId
* if (result[objectId]) {
* console.group("relationship for feature:", objectId)
* result[objectId].features.forEach(function (feature) {
* console.log("attributes", JSON.stringify(feature.attributes));
* });
* console.groupEnd();
* }
* });
* }).catch(function (error) {
* console.log("error from queryRelatedFeatures", error);
* });
*/
queryRelatedFeatures(relationshipQuery: RelationshipQueryProperties, options?: RequestOptions): Promise<Record<string, FeatureSet>>;
/**
* Executes a [RelationshipQuery](https://developers.arcgis.com/javascript/latest/references/core/rest/support/RelationshipQuery/) against the feature service and
* when resolved, it returns an `object` containing key value pairs. Key in this case is the `objectId`
* of the feature and value is the number of related features associated with the feature.
*
* @param relationshipQuery - Specifies relationship parameters
* for querying related features or records from a layer or a table.
* @param options - An object with the following properties.
* @returns When resolved, returns a hashmap containing key value pairs. Key in this case is the `objectId`
* of the feature and value is the number of related features.
* @see [relationships property](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#relationships)
* @see [Sample - Query Related Features](https://developers.arcgis.com/javascript/latest/sample-code/query-related-features/)
* @example
* const objectIds = [385, 416];
*
* // relationship query parameter
* const query = {
* outFields: ["*"],
* relationshipId: relationshipId,
* objectIds: objectIds
* }
*
* // query related features for given objectIds
* layer.queryRelatedFeaturesCount(query).then(function (count) {
* console.log("queryRelatedFeaturesCount", count);
* // this will print out
* // {385: 91, 416: 23}
* }).catch(function (error) {
* console.log("error from queryRelatedFeatures", error);
* });
*/
queryRelatedFeaturesCount(relationshipQuery: RelationshipQueryProperties, options?: RequestOptions): Promise<Record<string, number>>;
/**
* Saves the layer to its existing portal item in the [Portal](https://developers.arcgis.com/javascript/latest/references/core/portal/Portal/)
* authenticated within the user's current session. If the layer is not saved to a
* [PortalItem](https://developers.arcgis.com/javascript/latest/references/core/portal/PortalItem/), then you should use [saveAs()](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/#saveAs).
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > You can only save service-backed FeatureLayers. Client-side layers cannot be saved.
*
* @param options - Various options for saving the layer.
* @returns When resolved, returns the portal item to which the layer is saved.
* @since 4.24
* @example const portalItem = await layer.save();
*/
save(options?: LayerSaveOptions): Promise<PortalItem>;
/**
* Saves the layer to a new portal item in the [Portal](https://developers.arcgis.com/javascript/latest/references/core/portal/Portal/)
* authenticated within the user's current s