UNPKG

c8y-openlayer

Version:

This module is designed to help integrate Openlayer with Cumulocity IoT

95 lines (81 loc) 2.81 kB
import _ol_ from '../index.js'; import _ol_Image_ from '../image.js'; import _ol_ImageState_ from '../imagestate.js'; import _ol_dom_ from '../dom.js'; import _ol_events_ from '../events.js'; import _ol_events_EventType_ from '../events/eventtype.js'; import _ol_extent_ from '../extent.js'; import _ol_proj_ from '../proj.js'; import _ol_source_Image_ from '../source/image.js'; /** * @classdesc * A layer source for displaying a single, static image. * * @constructor * @extends {ol.source.Image} * @param {olx.source.ImageStaticOptions} options Options. * @api */ var _ol_source_ImageStatic_ = function(options) { var imageExtent = options.imageExtent; var crossOrigin = options.crossOrigin !== undefined ? options.crossOrigin : null; var /** @type {ol.ImageLoadFunctionType} */ imageLoadFunction = options.imageLoadFunction !== undefined ? options.imageLoadFunction : _ol_source_Image_.defaultImageLoadFunction; _ol_source_Image_.call(this, { attributions: options.attributions, logo: options.logo, projection: _ol_proj_.get(options.projection) }); /** * @private * @type {ol.Image} */ this.image_ = new _ol_Image_(imageExtent, undefined, 1, options.url, crossOrigin, imageLoadFunction); /** * @private * @type {ol.Size} */ this.imageSize_ = options.imageSize ? options.imageSize : null; _ol_events_.listen(this.image_, _ol_events_EventType_.CHANGE, this.handleImageChange, this); }; _ol_.inherits(_ol_source_ImageStatic_, _ol_source_Image_); /** * @inheritDoc */ _ol_source_ImageStatic_.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) { if (_ol_extent_.intersects(extent, this.image_.getExtent())) { return this.image_; } return null; }; /** * @inheritDoc */ _ol_source_ImageStatic_.prototype.handleImageChange = function(evt) { if (this.image_.getState() == _ol_ImageState_.LOADED) { var imageExtent = this.image_.getExtent(); var image = this.image_.getImage(); var imageWidth, imageHeight; if (this.imageSize_) { imageWidth = this.imageSize_[0]; imageHeight = this.imageSize_[1]; } else { imageWidth = image.width; imageHeight = image.height; } var resolution = _ol_extent_.getHeight(imageExtent) / imageHeight; var targetWidth = Math.ceil(_ol_extent_.getWidth(imageExtent) / resolution); if (targetWidth != imageWidth) { var context = _ol_dom_.createCanvasContext2D(targetWidth, imageHeight); var canvas = context.canvas; context.drawImage(image, 0, 0, imageWidth, imageHeight, 0, 0, canvas.width, canvas.height); this.image_.setImage(canvas); } } _ol_source_Image_.prototype.handleImageChange.call(this, evt); }; export default _ol_source_ImageStatic_;