@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
170 lines (166 loc) • 11.6 kB
TypeScript
import type EsriError from "../../core/Error.js";
import type FeatureSet from "../../rest/support/FeatureSet.js";
import type Query from "../../rest/support/Query.js";
import type FeatureLikeLayerView from "./FeatureLikeLayerView.js";
import type { AbortOptions } from "../../core/promiseUtils.js";
import type { Message } from "../../layers/support/StreamConnection.js";
import type { Feature } from "../../portal/jsonTypes.js";
/**
* The [update-event](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#event-update-rate)'s payload.
* The update rate of features being processed on the client and pushed from the server.
*
* @see [@update-rate](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#event-update-rate)
*/
export interface StreamUpdateRateEvent {
/** The client update rate per second. Returns number of features being processed on the client. */
client: number;
/** Update rate per second for websocket/service. Returns number of features being pushed from the server. */
websocket: number;
}
export interface StreamLayerViewEvents {
/**
* Fires when the layer view receives a message sent to the websocket connection.
*
* @since 4.26
*/
"message-received": Message;
/**
* Fires when the layer view receives features. The event payload contains
* the attributes and geometry of a feature received from the stream service.
*/
"data-received": Pick<Feature, "attributes" | "geometry">;
/**
* Fires after the layer starts receiving updates from the stream service. It will return the websocket and the client update rates per second.
* The update rate indicates number of features are being pushed from the server and being processed on the client side.
* The client update rate will be approximately equal to the websocket update rate unless the service is pushing updates at a rate faster
* than the client can handle. In which case, the API will down-throttle the update rate and will cause the client update rate to be lower.
*
* @since 4.17
*/
"update-rate": StreamUpdateRateEvent;
}
/**
* Represents the [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/) of a [StreamLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/)
* after it has been added to a [Map](https://developers.arcgis.com/javascript/latest/references/core/Map/) in either a [MapView](https://developers.arcgis.com/javascript/latest/references/core/views/MapView/), [Map component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-map/),
* [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) or [Scene component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-scene/).
*
* The StreamLayerView is responsible for rendering a [StreamLayer's](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/)
* features as [graphics](https://developers.arcgis.com/javascript/latest/references/core/Graphic/) in the [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/). The [methods](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#queryExtent)
* in the StreamLayerView provide developers with the ability to query and highlight graphics in the view. See the
* code snippets in the [methods](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#queryExtent) below for examples of how to access client-side graphics from the
* view.
*
* It connects to a server that emits geographic features continuously. The stream layer is suitable when you would like
* to map dynamic streams of data that are unbounded and
* continuous. When a StreamLayer is added to a map, users are able to see any real-time updates
* pushed out by the server. For more information, read the documentation of
* [StreamLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/).
*
* @since 4.4
* @see [StreamLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/)
* @see [Sample - Add StreamLayer to your Map](https://developers.arcgis.com/javascript/latest/sample-code/layers-streamlayer/)
*/
export default abstract class StreamLayerView extends FeatureLikeLayerView {
/**
* @deprecated
* Do not directly reference this property.
* Use EventNames and EventTypes helpers from \@arcgis/core/Evented
*/
"@eventTypes": StreamLayerViewEvents;
/**
* The error that explains an unsuccessful attempt to connect to the
* stream service or an unexpected disconnection from the stream service.
*/
get connectionError(): EsriError | null;
/**
* The status of the Web Socket connection with the stream service. This property
* can be watched to see if the connection is lost unexpectedly.
*
* Release specific changes:
* * At version 4.29, [connect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connect) and [disconnect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#disconnect) methods were added. Consequently, invoking the `disconnect()`
* method following a `pause` will transition the connection status from `paused` to `disconnected`. Subsequent use of the `connect()` method
* will then change the connection status to `connected`.
* * At version 4.26, the `connectionStatus` can be `paused` if the [pause()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#pause) method is called or
* if the layer becomes [suspended](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/#suspended).
*/
get connectionStatus(): StreamLayerViewConnectionStatus;
/**
* Connects to a stream service web socket. The web socket will start streaming new observations.
* It changes the [connectionStatus](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connectionStatus) to `connected`.
*
* @since 4.29
* @see [disconnect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#disconnect)
*/
connect(): void;
/**
* Disconnects from a stream service web socket. New observations will not be streamed until [connect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connect) method is called.
* It changes the [connectionStatus](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connectionStatus) to `disconnected`.
*
* @since 4.29
* @see [connect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connect)
*/
disconnect(): void;
/**
* Pauses the connection and stops new observations from being applied until [resume()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#resume) is called.
* The web socket is open and is still sending data but the layer view will not update.
* It changes the [connectionStatus](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connectionStatus) to `paused`.
*
* At version 4.29, invoking the [disconnect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#disconnect) method following a `pause` will transition the [connectionStatus](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connectionStatus) from `paused` to `disconnected`.
* Subsequent use of the [connect()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connect) method will then change the connectionStatus to `connected`.
*
* @since 4.26
* @see [resume()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#resume)
*/
pause(): void;
/**
* If a [TimeInfo.trackIdField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#trackIdField) is specified on the stream service,
* this method executes a [Query](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/) against features available for drawing in the layerView and
* returns a [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) of the latest observations for each `trackId`
* that satisfy the query. Otherwise, an [Error](https://developers.arcgis.com/javascript/latest/references/core/core/Error/) will be thrown when the method is called.
*
* > [!WARNING]
* >
* > **Known Limitations**
* >
* > Spatial queries have the same limitations as those listed in the [projectOperator](https://developers.arcgis.com/javascript/latest/references/core/geometry/operators/projectOperator/)
* > documentation.
* > Spatial queries are not currently supported if the layerView has any of the following [SpatialReferences](https://developers.arcgis.com/javascript/latest/references/core/geometry/SpatialReference/):
* > - GDM 2000 (4742) – Malaysia
* > - Gusterberg (Ferro) (8042) – Austria/Czech Republic
* > - ISN2016 (8086) - Iceland
* > - SVY21 (4757) - Singapore
*
* @param query - Specifies the attributes, spatial, and temporal filter of the query.
* When no parameters are passed to this method, all features in the client are returned. To only return features
* visible in the view, set the `geometry` parameter in the query object to the view's extent.
* @param options - An object with the following properties.
* @returns When resolved, returns the [FeatureSet](https://developers.arcgis.com/javascript/latest/references/core/rest/support/FeatureSet/) that satisfy the input query.
* @since 4.9
* @example
* let layer = new StreamLayer({
* url: streamLayerUrl // URL to a Stream Service
* });
*
* const layerView = await view.whenLayerView(layer);
* await reactiveUtils.whenOnce(() => !layerView.updating);
*
* const results = await layerView.queryLatestObservations()
* console.log(results.features); // prints all the client-side graphics to the console
*/
abstract queryLatestObservations(query?: Query, options?: AbortOptions): Promise<FeatureSet>;
/**
* Resumes the connection and the new observations will be applied. The layer view will update to show changes.
* It changes the [connectionStatus](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connectionStatus) to `connected` if the connection is successful.
* If the `connectionStatus` is set to `disconnected`, invoking this method will have no impact.
*
* @since 4.26
* @see [pause()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#pause)
*/
resume(): void;
}
/**
* The status of the Web Socket connection with the stream service.
*
* @see [connectionStatus](https://developers.arcgis.com/javascript/latest/references/core/views/layers/StreamLayerView/#connectionStatus)
*/
export type StreamLayerViewConnectionStatus = "connected" | "disconnected" | "paused";