UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

140 lines (138 loc) 8.6 kB
import type SpatialReference from "../geometry/SpatialReference.js"; import type Layer from "./Layer.js"; import type TileInfo from "./support/TileInfo.js"; import type { MultiOriginJSONSupportMixin } from "../core/MultiOriginJSONSupport.js"; import type { AbortOptions } from "../core/promiseUtils.js"; import type { BlendLayer, BlendLayerProperties } from "./mixins/BlendLayer.js"; import type { OperationalLayer, OperationalLayerProperties } from "./mixins/OperationalLayer.js"; import type { PortalLayer, PortalLayerProperties } from "./mixins/PortalLayer.js"; import type { RefreshableLayer, RefreshableLayerProperties } from "./mixins/RefreshableLayer.js"; import type { ScaleRangeLayer, ScaleRangeLayerProperties } from "./mixins/ScaleRangeLayer.js"; import type { TileInfoProperties } from "./support/TileInfo.js"; import type { LayerProperties } from "./Layer.js"; export interface WebTileLayerProperties extends LayerProperties, PortalLayerProperties, OperationalLayerProperties, ScaleRangeLayerProperties, RefreshableLayerProperties, BlendLayerProperties, Partial<Pick<WebTileLayer, "copyright" | "subDomains" | "urlTemplate">> { /** The tiling scheme information for the layer. */ tileInfo?: TileInfoProperties; } /** * WebTileLayer provides a simple way to add non-ArcGIS Server map tiles as a layer to a map. * The constructor takes a URL template that usually follows a pattern of * `http://some.domain.com/{level}/{col}/{row}/` where `level` corresponds to a zoom level, and * `column` and `row` represent tile column and row, respectively. This pattern is not required, but * is the most common one currently on the web. * * The [subDomains](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#subDomains) property can be used to specify subDomains where tiles are served to * speed up tile retrieval (using subDomains gets around the browser limit of the max number of concurrent * requests to a domain). If subDomains are specified, the [urlTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#urlTemplate) should include a `{subDomain}` place * holder. The [copyright](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#copyright) property can be used to define attribution information that will be displayed * in the map's Attribution widget. * * If the service is requested from a different domain, a [CORS enabled server](https://developers.arcgis.com/javascript/latest/cors/) or a [proxy](https://developers.arcgis.com/javascript/latest/proxies/) is * required. * * > [!WARNING] * > * > When adding a WebTileLayer to a map in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/) with local * > [SceneView.viewingMode](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#viewingMode), the [fullExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#fullExtent) property must be set * > on the layer. * * > [!WARNING] * > * > Esri requires that when you use an ArcGIS Online basemap in your app, the map must include Esri attribution and you must be licensed to use the content. * > For detailed guidelines on working with attribution, please visit the official [attribution in your app](https://developers.arcgis.com/documentation/mapping-and-location-services/reference/basemap-attribution/) documentation. * > For information, see the [Terms of Use documentation](https://developers.arcgis.com/documentation/terms-of-use/). * * @since 4.0 * @see [Sample - WebTileLayer (3D)](https://developers.arcgis.com/javascript/latest/sample-code/layers-webtile-3d/) * @see [TileLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/TileLayer/) */ export default class WebTileLayer extends WebTileLayerSuperclass { constructor(properties?: WebTileLayerProperties); /** * The attribution information for the layer. * * @default "" */ accessor copyright: string; /** * Indicates whether the layer instance has loaded. * When `true`, all the properties of the object can be accessed. * * @default false */ get loaded(): boolean; /** * The spatial reference of the layer. * * @default SpatialReference.WebMercator // wkid: 3857 */ get spatialReference(): SpatialReference; /** * A string of subDomain names where tiles are served to speed up tile retrieval. * If subDomains are specified, the [urlTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#urlTemplate) should include a * `{subDomain}` place holder. * * @see [WebTileLayer.urlTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#urlTemplate) * @example * // add an open street map layer * new WebTileLayer({ * "https://{subDomain}.tile.openstreetmap.org/{z}/{x}/{y}.png", * subDomains: ["a", "b", "c"], * }); */ accessor subDomains: string[] | null | undefined; /** The tiling scheme information for the layer. */ get tileInfo(): TileInfo; set tileInfo(value: TileInfoProperties); /** * The list of tile server urls for the layer. * It's computed from the [urlTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#urlTemplate) and the list of [subDomains](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#subDomains) */ get tileServers(): string[] | null | undefined; /** * For [WebTileLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/) the type is `web-tile`. * * @default "web-tile" */ get type(): "web-tile" | "open-street-map"; /** * The url template is a string that specifies the URL of the hosted tile images to load. The url template resembles an absolute URL but with a number * of placeholder strings that the source evaluates to decide which tiles to load. * * The url template can follow a pattern of `https://some.domain.com/{level}/{col}/{row}/` where `level` corresponds to a zoom level, and `column` and `row` represent a * tile column and row, respectively. It can also follow a pattern of `https://some.domain.com/{z}/{x}/{y}/` where `z` corresponds to a zoom level, and `x` and `y` represent * a tile location along x and y axis. * * The `urlTemplate` should contain a `{subDomain}` place holder if [subDomains](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#subDomains) are specified. * * @see [WebTileLayer.subDomains](https://developers.arcgis.com/javascript/latest/references/core/layers/WebTileLayer/#subDomains) * @example * // add an open street map layer * new WebTileLayer({ * "https://{subDomain}.tile.openstreetmap.org/{z}/{x}/{y}.png", * subDomains: ["a", "b", "c"], * }); */ accessor urlTemplate: string | null | undefined; /** * This method fetches a tile for the given level, row and column present in the view. * * @param level - Level of detail of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/). * @param row - The row(y) position of the tile fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/). * @param col - The column(x) position of the tile to fetch. This value is provided by [LayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LayerView/). * @param options - Optional settings for the tile request. The options have the following properties. * @returns Returns a promise that resolves to an * [HTMLImageElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement). */ fetchTile(level: number, row: number, col: number, options?: AbortOptions): Promise<HTMLImageElement>; /** * This method returns a URL to a tile for a given level, row and column. * * @param level - The requested tile's level. * @param row - The requested tile's row. * @param col - The requested tile's column. * @returns Returns the tile URL. */ getTileUrl(level: number, row: number, col: number): string; } declare const WebTileLayerSuperclass: typeof Layer & typeof MultiOriginJSONSupportMixin & typeof PortalLayer & typeof OperationalLayer & typeof ScaleRangeLayer & typeof RefreshableLayer & typeof BlendLayer