@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
293 lines (291 loc) • 15.5 kB
TypeScript
import type TimeInfo from "../support/TimeInfo.js";
import type TimeExtent from "../../time/TimeExtent.js";
import type TimeInterval from "../../time/TimeInterval.js";
import type { TimeInfoProperties } from "../support/TimeInfo.js";
import type { TimeExtentProperties } from "../../time/TimeExtent.js";
import type { TimeIntervalProperties } from "../../time/TimeInterval.js";
export interface TemporalLayerProperties extends Partial<Pick<TemporalLayer, "useViewTime">> {
/**
* The layer's time extent. When the layer's [useViewTime](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#useViewTime) is `false`, the layer
* instructs the view to show data from the layer based on this time extent.
* If the `useViewTime` is `true`, and both layer and view time extents are set, then features that fall within
* the intersection of the view and layer time extents will be displayed.
* For example, if the layer's time extent is set to display features between 1970 and 1975 and
* the view has a time extent set to 1972-1980, the effective time on the feature layer will be 1972-1975.
*
* @since 4.14
* @example
* if (!layer.useViewTime) {
* if (layer.timeExtent) {
* console.log("Current timeExtent:", layer.timeExtent.start, " - ", layer.timeExtent.end}
* } else {
* console.log("The layer will display data within the view's timeExtent.");
* console.log("Current view.timeExtent:", view.timeExtent.start, " - ", view.timeExtent.end}
* }
* }
* @example
* // set the timeExtent on the layer and useViewTime false
* // In this case, the layer will honor its timeExtent and ignore
* // the view's timeExtent
* const layer = new ImageryLayer({
* url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ScientificData/SeaTemperature/ImageServer",
* timeExtent: {
* start: new Date(2014, 4, 18),
* end: new Date(2014, 4, 19)
* },
* useViewTime: false
* });
* @example
* // timeExtent is set on the layer and the view
* // In this case, the layer will display features that fall
* // within the intersection of view and layer time extents
* // features within Jan 1, 1976 - Jan 1, 1981 will be displayed
* const view = new MapView({
* timeExtent: {
* start: new Date(1976, 0, 1),
* end: new Date(2002, 0, 1)
* }
* });
* const layer = new FeatureLayer({
* url: myUrl,
* timeExtent: {
* start: new Date(1974, 0, 1),
* end: new Date(1981, 0, 1)
* }
* });
*/
timeExtent?: TimeExtentProperties | null;
/**
* TimeInfo provides information such as date fields that store
* [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
* and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
* for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
* for the layer. The `timeInfo` property, along with its `startField` and `endField` properties, must be set at the
* time of layer initialization if it is being set for a
* [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/),
* [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/) or
* [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
* initialized from [client-side features](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#creating-a-featurelayer).
* The [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for `timeInfo` is
* automatically calculated based on its `startField` and `endField` properties.
* The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#load).
*
* TimeInfo's [TimeInfo.startField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [endField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
* can be `date`, `date-only` or `timestamp-offset` [field type](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
* and [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/).
*
* @since 4.11
* @example
* // create geojson layer from usgs earthquakes geojson feed
* const geojsonLayer = new GeoJSONLayer({
* url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson",
* copyright: "USGS Earthquakes",
* fields: [
* { "name": "mag", "type": "double" },
* { "name": "place", "type": "string" },
* { "name": "time", "type": "date" }, // date field
* { "name": "depth", "type": "double" }
* ],
* // timeInfo can be used to do temporal queries
* // set the startField and endField.
* // timeExtent is automatically calculated from the
* // the start and end date fields
* // The date values must be in milliseconds number from the UNIX epoch specified in UTC.
* timeInfo: {
* startField: "time"
* }
* });
*/
timeInfo?: TimeInfoProperties | null;
/**
* A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
* users to overlay features from two or more time-aware layers with different time extents.
* For example, if a layer has data recorded for the year 1970, an offset value of 2 years would temporarily shift the data to
* 1972. You can then overlay this data with data recorded in 1972.
* A time offset can be used for display purposes only. The query and selection are not affected by the offset.
*
* @since 4.14
* @example
* // Offset a CSV Layer containing hurricanes from 2015 so that they appear in 2019 (+4 years).
* let layer = new CSVLayer({
* url: `hurricanes-and-storms-2015.csv`,
* timeOffset: {
* value: 4,
* unit: "years"
* },
* timeInfo: {
* startField: "ISO_time"
* },
* renderer: {
* type: "simple",
* symbol: {
* type: "simple-marker",
* size: 6,
* color: "red",
* outline: {
* width: 0.5,
* color: "black"
* }
* }
* }
* });
*/
timeOffset?: TimeIntervalProperties | null;
}
/**
* TemporalLayer is a mixin that adds [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#timeExtent), [timeInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#timeInfo),
* [timeOffset](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#timeOffset) and [useViewTime](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#useViewTime) properties to layers that support temporal data.
*
* @since 4.11
*/
export abstract class TemporalLayer {
constructor(...args: any[]);
/**
* The layer's time extent. When the layer's [useViewTime](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#useViewTime) is `false`, the layer
* instructs the view to show data from the layer based on this time extent.
* If the `useViewTime` is `true`, and both layer and view time extents are set, then features that fall within
* the intersection of the view and layer time extents will be displayed.
* For example, if the layer's time extent is set to display features between 1970 and 1975 and
* the view has a time extent set to 1972-1980, the effective time on the feature layer will be 1972-1975.
*
* @since 4.14
* @example
* if (!layer.useViewTime) {
* if (layer.timeExtent) {
* console.log("Current timeExtent:", layer.timeExtent.start, " - ", layer.timeExtent.end}
* } else {
* console.log("The layer will display data within the view's timeExtent.");
* console.log("Current view.timeExtent:", view.timeExtent.start, " - ", view.timeExtent.end}
* }
* }
* @example
* // set the timeExtent on the layer and useViewTime false
* // In this case, the layer will honor its timeExtent and ignore
* // the view's timeExtent
* const layer = new ImageryLayer({
* url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ScientificData/SeaTemperature/ImageServer",
* timeExtent: {
* start: new Date(2014, 4, 18),
* end: new Date(2014, 4, 19)
* },
* useViewTime: false
* });
* @example
* // timeExtent is set on the layer and the view
* // In this case, the layer will display features that fall
* // within the intersection of view and layer time extents
* // features within Jan 1, 1976 - Jan 1, 1981 will be displayed
* const view = new MapView({
* timeExtent: {
* start: new Date(1976, 0, 1),
* end: new Date(2002, 0, 1)
* }
* });
* const layer = new FeatureLayer({
* url: myUrl,
* timeExtent: {
* start: new Date(1974, 0, 1),
* end: new Date(1981, 0, 1)
* }
* });
*/
get timeExtent(): TimeExtent | null | undefined;
set timeExtent(value: TimeExtentProperties | null | undefined);
/**
* TimeInfo provides information such as date fields that store
* [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
* and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
* for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
* for the layer. The `timeInfo` property, along with its `startField` and `endField` properties, must be set at the
* time of layer initialization if it is being set for a
* [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/),
* [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/) or
* [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
* initialized from [client-side features](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#creating-a-featurelayer).
* The [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for `timeInfo` is
* automatically calculated based on its `startField` and `endField` properties.
* The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#load).
*
* TimeInfo's [TimeInfo.startField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [endField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
* can be `date`, `date-only` or `timestamp-offset` [field type](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
* and [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/).
*
* @since 4.11
* @example
* // create geojson layer from usgs earthquakes geojson feed
* const geojsonLayer = new GeoJSONLayer({
* url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson",
* copyright: "USGS Earthquakes",
* fields: [
* { "name": "mag", "type": "double" },
* { "name": "place", "type": "string" },
* { "name": "time", "type": "date" }, // date field
* { "name": "depth", "type": "double" }
* ],
* // timeInfo can be used to do temporal queries
* // set the startField and endField.
* // timeExtent is automatically calculated from the
* // the start and end date fields
* // The date values must be in milliseconds number from the UNIX epoch specified in UTC.
* timeInfo: {
* startField: "time"
* }
* });
*/
get timeInfo(): TimeInfo | null | undefined;
set timeInfo(value: TimeInfoProperties | null | undefined);
/**
* A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
* users to overlay features from two or more time-aware layers with different time extents.
* For example, if a layer has data recorded for the year 1970, an offset value of 2 years would temporarily shift the data to
* 1972. You can then overlay this data with data recorded in 1972.
* A time offset can be used for display purposes only. The query and selection are not affected by the offset.
*
* @since 4.14
* @example
* // Offset a CSV Layer containing hurricanes from 2015 so that they appear in 2019 (+4 years).
* let layer = new CSVLayer({
* url: `hurricanes-and-storms-2015.csv`,
* timeOffset: {
* value: 4,
* unit: "years"
* },
* timeInfo: {
* startField: "ISO_time"
* },
* renderer: {
* type: "simple",
* symbol: {
* type: "simple-marker",
* size: 6,
* color: "red",
* outline: {
* width: 0.5,
* color: "black"
* }
* }
* }
* });
*/
get timeOffset(): TimeInterval | null | undefined;
set timeOffset(value: TimeIntervalProperties | null | undefined);
/**
* Determines if the time enabled layer will update its temporal data based on the view's
* [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/views/View/#timeExtent). When `false`, the layer will display its temporal
* data based on the layer's [timeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/mixins/TemporalLayer/#timeExtent), regardless of changes to the view.
* If both view and layer time extents are set while this property is `true`, then the features that fall within
* the intersection of the view and layer time extents will be displayed.
* For example, if a layer's time extent is set to display features between 1970 and 1975 and
* the view has a time extent set to 1972-1980, the effective time on the feature layer will be 1972-1975.
*
* Changing `useViewTime` to `false` does not affect layer's [visibilityTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/Layer/#visibilityTimeExtent).
*
* @default true
* @since 4.14
* @example
* if (featureLayer.useViewTime) {
* console.log("Displaying data between:", view.timeExtent.start, " - ", view.timeExtent.end);
* }
*/
accessor useViewTime: boolean;
}