UNPKG

heli-agri

Version:

HeliAgri is a high-performance, feature-packed library for creating interactive maps on the web. It can display map tiles, vector data and markers loaded from any source on any web page. OpenLayers has been developed to further the use of geographic infor

96 lines (88 loc) 4.03 kB
/** * @module ol/source/OGCMapTile */ import TileImage from './TileImage.js'; import {getTileSetInfo} from './ogcTileUtil.js'; import {error as logError} from '../console.js'; /** * @typedef {Object} Options * @property {string} url URL to the OGC Map Tileset endpoint. * @property {Object} [context] A lookup of values to use in the tile URL template. The `{tileMatrix}` * (zoom level), `{tileRow}`, and `{tileCol}` variables in the URL will always be provided by the source. * @property {string} [mediaType] The content type for the tiles (e.g. "image/png"). If not provided, * the source will try to find a link with rel="item" that uses a supported image type. * @property {import("../proj.js").ProjectionLike} [projection] Projection. By default, the projection * will be derived from the `crs` of the `tileMatrixSet`. You can override this by supplying * a projection to the constructor. * @property {import("./Source.js").AttributionLike} [attributions] Attributions. * @property {number} [cacheSize] Tile cache size. The default depends on the screen size. Will be ignored if too small. * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer. * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail. * @property {boolean} [interpolate=true] Use interpolated values when resampling. By default, * linear interpolation is used when resampling. Set to false to use the nearest neighbor instead. * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels). * Higher values can increase reprojection performance, but decrease precision. * @property {import("../Tile.js").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is * ```js * function(tile, src) { * tile.getImage().src = src; * }; * ``` * @property {boolean} [wrapX=true] Whether to wrap the world horizontally. * @property {number} [transition] Duration of the opacity transition for rendering. * To disable the opacity transition, pass `transition: 0`. */ /** * @classdesc * Layer source for map tiles from an [OGC API - Tiles](https://ogcapi.ogc.org/tiles/) service that provides "map" type tiles. * The service must conform to at least the core (http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/core) * and tileset (http://www.opengis.net/spec/ogcapi-tiles-1/1.0/conf/tileset) conformance classes. * @api */ class OGCMapTile extends TileImage { /** * @param {Options} options OGC map tile options. */ constructor(options) { super({ attributions: options.attributions, cacheSize: options.cacheSize, crossOrigin: options.crossOrigin, interpolate: options.interpolate, projection: options.projection, reprojectionErrorThreshold: options.reprojectionErrorThreshold, state: 'loading', tileLoadFunction: options.tileLoadFunction, wrapX: options.wrapX !== undefined ? options.wrapX : true, transition: options.transition, }); const sourceInfo = { url: options.url, projection: this.getProjection(), mediaType: options.mediaType, context: options.context || null, }; getTileSetInfo(sourceInfo) .then(this.handleTileSetInfo_.bind(this)) .catch(this.handleError_.bind(this)); } /** * @param {import("./ogcTileUtil.js").TileSetInfo} tileSetInfo Tile set info. * @private */ handleTileSetInfo_(tileSetInfo) { this.tileGrid = tileSetInfo.grid; this.setTileUrlFunction(tileSetInfo.urlFunction, tileSetInfo.urlTemplate); this.setState('ready'); } /** * @private * @param {Error} error The error. */ handleError_(error) { logError(error); this.setState('error'); } } export default OGCMapTile;