Add ol.renderer.canvas.ImageLayer
This commit is contained in:
121
src/ol/renderer/canvas/canvasimagelayerrenderer.js
Normal file
121
src/ol/renderer/canvas/canvasimagelayerrenderer.js
Normal file
@@ -0,0 +1,121 @@
|
||||
goog.provide('ol.renderer.canvas.ImageLayer');
|
||||
|
||||
goog.require('goog.vec.Mat4');
|
||||
goog.require('ol.Image');
|
||||
goog.require('ol.ImageState');
|
||||
goog.require('ol.ViewHint');
|
||||
goog.require('ol.layer.ImageLayer');
|
||||
goog.require('ol.renderer.Map');
|
||||
goog.require('ol.renderer.canvas.Layer');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @extends {ol.renderer.canvas.Layer}
|
||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
||||
* @param {ol.layer.ImageLayer} imageLayer Single image layer.
|
||||
*/
|
||||
ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) {
|
||||
|
||||
goog.base(this, mapRenderer, imageLayer);
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {?ol.Image}
|
||||
*/
|
||||
this.image_ = null;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {!goog.vec.Mat4.Number}
|
||||
*/
|
||||
this.transform_ = goog.vec.Mat4.createNumber();
|
||||
|
||||
};
|
||||
goog.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.Layer);
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.canvas.ImageLayer.prototype.getImage = function() {
|
||||
return goog.isNull(this.image_) ?
|
||||
null : this.image_.getImageElement(this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.layer.ImageLayer} Single image layer.
|
||||
*/
|
||||
ol.renderer.canvas.ImageLayer.prototype.getImageLayer = function() {
|
||||
return /** @type {ol.layer.ImageLayer} */ (this.getLayer());
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.canvas.ImageLayer.prototype.getTransform = function() {
|
||||
return this.transform_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.canvas.ImageLayer.prototype.renderFrame =
|
||||
function(frameState, layerState) {
|
||||
|
||||
var view2DState = frameState.view2DState;
|
||||
var viewCenter = view2DState.center;
|
||||
var viewResolution = view2DState.resolution;
|
||||
var viewRotation = view2DState.rotation;
|
||||
|
||||
var image;
|
||||
var imageLayer = this.getImageLayer();
|
||||
var imageSource = imageLayer.getImageSource();
|
||||
|
||||
var hints = frameState.viewHints;
|
||||
|
||||
if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.PANNING]) {
|
||||
image = imageSource.getImage(
|
||||
frameState.extent, viewResolution);
|
||||
var imageState = image.getState();
|
||||
var animate = false;
|
||||
if (imageState == ol.ImageState.ERROR) {
|
||||
// pass
|
||||
} else if (imageState == ol.ImageState.IDLE) {
|
||||
animate = true;
|
||||
image.load();
|
||||
} else if (imageState == ol.ImageState.LOADING) {
|
||||
animate = true;
|
||||
} else if (imageState == ol.ImageState.LOADED) {
|
||||
this.image_ = image;
|
||||
}
|
||||
if (animate) {
|
||||
frameState.animate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!goog.isNull(this.image_)) {
|
||||
image = this.image_;
|
||||
var imageExtent = image.getExtent();
|
||||
var imageResolution = image.getResolution();
|
||||
var transform = this.transform_;
|
||||
goog.vec.Mat4.makeIdentity(transform);
|
||||
goog.vec.Mat4.translate(transform,
|
||||
frameState.size.width / 2, frameState.size.height / 2, 0);
|
||||
goog.vec.Mat4.rotateZ(transform, viewRotation);
|
||||
goog.vec.Mat4.scale(
|
||||
transform,
|
||||
imageResolution / viewResolution,
|
||||
imageResolution / viewResolution,
|
||||
1);
|
||||
goog.vec.Mat4.translate(
|
||||
transform,
|
||||
(imageExtent.minX - viewCenter.x) / imageResolution,
|
||||
(viewCenter.y - imageExtent.maxY) / imageResolution,
|
||||
0);
|
||||
}
|
||||
};
|
||||
@@ -7,8 +7,10 @@ goog.require('goog.dom');
|
||||
goog.require('goog.style');
|
||||
goog.require('goog.vec.Mat4');
|
||||
goog.require('ol.Size');
|
||||
goog.require('ol.layer.ImageLayer');
|
||||
goog.require('ol.layer.TileLayer');
|
||||
goog.require('ol.renderer.Map');
|
||||
goog.require('ol.renderer.canvas.ImageLayer');
|
||||
goog.require('ol.renderer.canvas.TileLayer');
|
||||
|
||||
|
||||
@@ -59,7 +61,9 @@ goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) {
|
||||
if (layer instanceof ol.layer.TileLayer) {
|
||||
if (layer instanceof ol.layer.ImageLayer) {
|
||||
return new ol.renderer.canvas.ImageLayer(this, layer);
|
||||
} else if (layer instanceof ol.layer.TileLayer) {
|
||||
return new ol.renderer.canvas.TileLayer(this, layer);
|
||||
} else {
|
||||
goog.asserts.assert(false);
|
||||
|
||||
Reference in New Issue
Block a user