@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
125 lines (119 loc) • 5.97 kB
TypeScript
import type GeolocationPositioning from "../support/GeolocationPositioning.js";
import type { PositionFilterFunction } from "./types.js";
import type { GeolocationPositioningProperties } from "../support/GeolocationPositioning.js";
export interface TrackViewModelProperties extends GeolocationPositioningProperties, Partial<Pick<TrackViewModel, "error" | "positionFilterFunction" | "rotationEnabled">> {}
export type TrackViewModelState = "error" | "disabled" | "ready" | "waiting" | "tracking" | "feature-unsupported";
export interface TrackViewModelEvents {
/**
* Fires after the [Track.start()](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/#start) method is called and a position is found.
*
* @example
* track.on("track", ({ position }) => {
* const { longitude, latitude } = position.coords;
* console.log("Track", `${longitude.toFixed(4)}, ${latitude.toFixed(4)}`);
* });
*/
track: TrackViewModelTrackEvent;
/** Fires after the [Track.start()](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/#start) method is called and an error is returned. */
"track-error": TrackViewModelTrackErrorEvent;
}
export interface TrackViewModelTrackEvent {
/** Geolocation coordinates returned from the [Geolocation API](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/#geolocationOptions). */
position: GeolocationPosition;
}
export interface TrackViewModelTrackErrorEvent {
/** The Error object returned if an error occurred while tracking. */
error: GeolocationPositionError | Error;
}
/**
* Provides the logic for the [Track](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-track/) component and [Track](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/) widget, which
* animates the [View](https://developers.arcgis.com/javascript/latest/references/core/views/View/)
* to the user's location when clicked and tracks it as the location is updated.
*
* > [!WARNING]
* >
* > The Track widget is only available in [secure contexts](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts), such as HTTPS.
* > Note that localhost is considered "potentially secure" and can be used for easy testing in browsers that support
* > [Window.isSecureContext](https://developer.mozilla.org/en-US/docs/Web/API/isSecureContext#browser_compatibility).
* >
* > For additional information regarding this, visit the ArcGIS blog,
* > [Increased web API security in Google Chrome](https://blogs.esri.com/esri/arcgis/2016/04/14/increased-web-api-security-in-google-chrome/).
*
* @since 4.0
* @see [Track](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-track/) component
* @see [Track](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/) widget - _Deprecated since 4.32. Use the [Track component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-track/) instead._
* @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern)
* @example
* let trackWidget = new Track({
* viewModel: { // autocasts as new TrackViewModel()
* view: view, // attaches the Track to the view
* }
* };
*/
export default class TrackViewModel extends GeolocationPositioning {
/**
* @deprecated
* Do not directly reference this property.
* Use EventNames and EventTypes helpers from \@arcgis/core/Evented
*/
"@eventTypes": TrackViewModelEvents;
constructor(properties?: TrackViewModelProperties);
/**
* Error that caused the last [track-error](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/TrackViewModel/#event:track-error) event to fire.
*
* @since 4.29
* @example
* if(track.viewModel.state === 'error')
* console.error(track.viewModel.error);
*/
accessor error: GeolocationPositionError | Error | null | undefined;
/**
* A function that is used as an expression to evaluate geolocation points, and returns a boolean
* value. If the function returns `true`, the widget will draw a graphic and navigate to the position.
* The widget will ignore `false` values and not draw a graphic and not navigate to the position.
*
* Example use cases include smoothing out geolocation anomalies and geofencing.
*
* @since 4.27
* @example
* // Exclude locations that full outside an extent.
* track.viewModel.positionFilterFunction = (value) => {
* const { longitude, latitude } = value.position.coords;
* const myLocation = new Point({ longitude, latitude });
* const geofenceExtent = new Extent({
* // whatever
* });
* return geometryEngine.within(myLocation, geofenceExtent);
* };
*/
accessor positionFilterFunction: PositionFilterFunction | null | undefined;
/**
* Indicates whether the component will automatically rotate to the device heading based on
* the Geolocation APIs [`GeolocationCoordinates.heading`](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationCoordinates/heading)
* property. The map will not rotate if the speed is `0`,
* or if the device is unable to provide heading information.
*
* @default true
* @since 4.33
*/
rotationEnabled: boolean;
/**
* The current state of the widget.
*
* @default "disabled"
*/
get state(): TrackViewModelState;
/**
* Indicates whether new positions are being watched.
*
* @default false
*/
get tracking(): boolean;
/**
* When executed, [tracking](https://developers.arcgis.com/javascript/latest/references/core/widgets/Track/TrackViewModel/#tracking) starts at the
* user's location.
*/
start(): void;
/** Stops tracking the user's location when executed. */
stop(): void;
}