From ca0b77d0e30ae79a826d510ad8e0032d499c5325 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Thu, 12 Dec 2013 15:16:59 +0100 Subject: [PATCH 1/6] Add pixelRatio to ol.source.Image#getImage --- src/ol/renderer/canvas/canvasimagelayerrenderer.js | 4 ++-- src/ol/renderer/dom/domimagelayerrenderer.js | 4 ++-- src/ol/renderer/webgl/webglimagelayerrenderer.js | 4 ++-- src/ol/source/imagesource.js | 1 + src/ol/source/imagestaticsource.js | 2 +- src/ol/source/imagewmssource.js | 2 +- src/ol/source/mapguidesource.js | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index dc6a94d298..4b7e4eb534 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -78,8 +78,8 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = var hints = frameState.viewHints; if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { - image = imageSource.getImage( - frameState.extent, viewResolution, view2DState.projection); + image = imageSource.getImage(frameState.extent, viewResolution, + frameState.devicePixelRatio, view2DState.projection); if (!goog.isNull(image)) { var imageState = image.getState(); if (imageState == ol.ImageState.IDLE) { diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js index 47d7845b7a..3e82b6bac3 100644 --- a/src/ol/renderer/dom/domimagelayerrenderer.js +++ b/src/ol/renderer/dom/domimagelayerrenderer.js @@ -66,8 +66,8 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame = var hints = frameState.viewHints; if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { - var image_ = imageSource.getImage( - frameState.extent, viewResolution, view2DState.projection); + var image_ = imageSource.getImage(frameState.extent, viewResolution, + frameState.devicePixelRatio, view2DState.projection); if (!goog.isNull(image_)) { var imageState = image_.getState(); if (imageState == ol.ImageState.IDLE) { diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index 9915739da3..7a3485febc 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -95,8 +95,8 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame = var hints = frameState.viewHints; if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { - var image_ = imageSource.getImage( - frameState.extent, viewResolution, view2DState.projection); + var image_ = imageSource.getImage(frameState.extent, viewResolution, + frameState.devicePixelRatio, view2DState.projection); if (!goog.isNull(image_)) { var imageState = image_.getState(); if (imageState == ol.ImageState.IDLE) { diff --git a/src/ol/source/imagesource.js b/src/ol/source/imagesource.js index 31b9c1d384..04c111af63 100644 --- a/src/ol/source/imagesource.js +++ b/src/ol/source/imagesource.js @@ -113,6 +113,7 @@ ol.source.Image.prototype.findNearestResolution = /** * @param {ol.Extent} extent Extent. * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. * @param {ol.proj.Projection} projection Projection. * @return {ol.Image} Single image. */ diff --git a/src/ol/source/imagestaticsource.js b/src/ol/source/imagestaticsource.js index 43ce4f62bd..fd51f361be 100644 --- a/src/ol/source/imagestaticsource.js +++ b/src/ol/source/imagestaticsource.js @@ -48,7 +48,7 @@ goog.inherits(ol.source.ImageStatic, ol.source.Image); * @inheritDoc */ ol.source.ImageStatic.prototype.getImage = - function(extent, resolution, projection) { + function(extent, resolution, pixelRatio, projection) { if (ol.extent.intersects(extent, this.image_.getExtent())) { return this.image_; } diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index 3a123f93b8..7f6e25ba99 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -69,7 +69,7 @@ ol.source.ImageWMS.prototype.getParams = function() { * @inheritDoc */ ol.source.ImageWMS.prototype.getImage = - function(extent, resolution, projection) { + function(extent, resolution, pixelRatio, projection) { resolution = this.findNearestResolution(resolution); var image = this.image_; diff --git a/src/ol/source/mapguidesource.js b/src/ol/source/mapguidesource.js index 8389f17f10..52913f93cf 100644 --- a/src/ol/source/mapguidesource.js +++ b/src/ol/source/mapguidesource.js @@ -72,7 +72,7 @@ goog.inherits(ol.source.MapGuide, ol.source.Image); * @inheritDoc */ ol.source.MapGuide.prototype.getImage = - function(extent, resolution, projection) { + function(extent, resolution, pixelRatio, projection) { resolution = this.findNearestResolution(resolution); var image = this.image_; From 78ec21fb8531cfc4c25140a5a8a5e9328a893ae8 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 16 Dec 2013 12:08:11 +0100 Subject: [PATCH 2/6] Add pixelRatio to ol.source.Image#createImage --- src/ol/source/imagesource.js | 3 ++- src/ol/source/imagestaticsource.js | 2 +- src/ol/source/imagewmssource.js | 3 ++- src/ol/source/mapguidesource.js | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ol/source/imagesource.js b/src/ol/source/imagesource.js index 04c111af63..66fd16e24f 100644 --- a/src/ol/source/imagesource.js +++ b/src/ol/source/imagesource.js @@ -78,12 +78,13 @@ goog.inherits(ol.source.Image, ol.source.Source); * @protected * @param {ol.Extent} extent Extent. * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. * @param {ol.Size} size Size. * @param {ol.proj.Projection} projection Projection. * @return {ol.Image} Single image. */ ol.source.Image.prototype.createImage = - function(extent, resolution, size, projection) { + function(extent, resolution, pixelRatio, size, projection) { var image = null; var imageUrl = this.imageUrlFunction(extent, size, projection); if (goog.isDef(imageUrl)) { diff --git a/src/ol/source/imagestaticsource.js b/src/ol/source/imagestaticsource.js index fd51f361be..38e534035c 100644 --- a/src/ol/source/imagestaticsource.js +++ b/src/ol/source/imagestaticsource.js @@ -38,7 +38,7 @@ ol.source.ImageStatic = function(options) { * @type {ol.Image} */ this.image_ = this.createImage( - imageExtent, imageResolution, imageSize, projection); + imageExtent, imageResolution, 1, imageSize, projection); }; goog.inherits(ol.source.ImageStatic, ol.source.Image); diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index 7f6e25ba99..84431b58fa 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -85,7 +85,8 @@ ol.source.ImageWMS.prototype.getImage = var height = (extent[3] - extent[1]) / resolution; var size = [width, height]; - this.image_ = this.createImage(extent, resolution, size, projection); + this.image_ = this.createImage( + extent, resolution, pixelRatio, size, projection); return this.image_; }; diff --git a/src/ol/source/mapguidesource.js b/src/ol/source/mapguidesource.js index 52913f93cf..c07cbeb18c 100644 --- a/src/ol/source/mapguidesource.js +++ b/src/ol/source/mapguidesource.js @@ -90,7 +90,8 @@ ol.source.MapGuide.prototype.getImage = var height = (extent[3] - extent[1]) / resolution; var size = [width, height]; - this.image_ = this.createImage(extent, resolution, size, projection); + this.image_ = this.createImage( + extent, resolution, pixelRatio, size, projection); return this.image_; }; From db322f9ade6bbf725e625b92ae14b1166891743d Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 16 Dec 2013 12:48:58 +0100 Subject: [PATCH 3/6] Add pixelRatio param to ol.Image constructor --- src/ol/image.js | 18 +++++++++++++++++- src/ol/source/imagesource.js | 2 +- src/ol/source/imagewmssource.js | 1 + src/ol/source/mapguidesource.js | 1 + 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ol/image.js b/src/ol/image.js index adea4b9d16..ba5d6dcc52 100644 --- a/src/ol/image.js +++ b/src/ol/image.js @@ -28,11 +28,13 @@ ol.ImageState = { * @extends {goog.events.EventTarget} * @param {ol.Extent} extent Extent. * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. * @param {string} src Image source URI. * @param {?string} crossOrigin Cross origin. * @param {Array.} attributions Attributions. */ -ol.Image = function(extent, resolution, src, crossOrigin, attributions) { +ol.Image = + function(extent, resolution, pixelRatio, src, crossOrigin, attributions) { goog.base(this); @@ -54,6 +56,12 @@ ol.Image = function(extent, resolution, src, crossOrigin, attributions) { */ this.src_ = src; + /** + * @private + * @type {number} + */ + this.pixelRatio_ = pixelRatio; + /** * @private * @type {number} @@ -137,6 +145,14 @@ ol.Image.prototype.getImageElement = function(opt_context) { }; +/** + * @return {number} PixelRatio. + */ +ol.Image.prototype.getPixelRatio = function() { + return this.pixelRatio_; +}; + + /** * @return {number} Resolution. */ diff --git a/src/ol/source/imagesource.js b/src/ol/source/imagesource.js index 66fd16e24f..2fbcb87bb1 100644 --- a/src/ol/source/imagesource.js +++ b/src/ol/source/imagesource.js @@ -89,7 +89,7 @@ ol.source.Image.prototype.createImage = var imageUrl = this.imageUrlFunction(extent, size, projection); if (goog.isDef(imageUrl)) { image = new ol.Image( - extent, resolution, imageUrl, this.crossOrigin_, + extent, resolution, pixelRatio, imageUrl, this.crossOrigin_, this.getAttributions()); } return image; diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index 84431b58fa..21c3deeed7 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -75,6 +75,7 @@ ol.source.ImageWMS.prototype.getImage = var image = this.image_; if (!goog.isNull(image) && image.getResolution() == resolution && + image.getPixelRatio() == pixelRatio && ol.extent.containsExtent(image.getExtent(), extent)) { return image; } diff --git a/src/ol/source/mapguidesource.js b/src/ol/source/mapguidesource.js index c07cbeb18c..4d7d8001ca 100644 --- a/src/ol/source/mapguidesource.js +++ b/src/ol/source/mapguidesource.js @@ -78,6 +78,7 @@ ol.source.MapGuide.prototype.getImage = var image = this.image_; if (!goog.isNull(image) && image.getResolution() == resolution && + image.getPixelRatio() == pixelRatio && ol.extent.containsExtent(image.getExtent(), extent)) { return image; } From c84782bfc6bf56d96d994dd0afce10586e3d6300 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 16 Dec 2013 17:07:37 +0100 Subject: [PATCH 4/6] Use the image pixelRatio in ol.renderer.canvas.ImageLayer --- src/ol/renderer/canvas/canvasimagelayerrenderer.js | 2 +- src/ol/source/imagewmssource.js | 2 +- src/ol/source/mapguidesource.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 4b7e4eb534..69a41c6eb5 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -95,7 +95,7 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = if (!goog.isNull(this.image_)) { image = this.image_; var imageExtent = image.getExtent(); - var imageResolution = image.getResolution(); + var imageResolution = image.getResolution() / image.getPixelRatio(); var devicePixelRatio = frameState.devicePixelRatio; ol.vec.Mat4.makeTransform2D(this.imageTransform_, devicePixelRatio * frameState.size[0] / 2, diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index 21c3deeed7..752351fb2a 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -84,7 +84,7 @@ ol.source.ImageWMS.prototype.getImage = ol.extent.scaleFromCenter(extent, this.ratio_); var width = (extent[2] - extent[0]) / resolution; var height = (extent[3] - extent[1]) / resolution; - var size = [width, height]; + var size = [width * pixelRatio, height * pixelRatio]; this.image_ = this.createImage( extent, resolution, pixelRatio, size, projection); diff --git a/src/ol/source/mapguidesource.js b/src/ol/source/mapguidesource.js index 4d7d8001ca..2e9ba8aa44 100644 --- a/src/ol/source/mapguidesource.js +++ b/src/ol/source/mapguidesource.js @@ -89,7 +89,7 @@ ol.source.MapGuide.prototype.getImage = } var width = (extent[2] - extent[0]) / resolution; var height = (extent[3] - extent[1]) / resolution; - var size = [width, height]; + var size = [width * pixelRatio, height * pixelRatio]; this.image_ = this.createImage( extent, resolution, pixelRatio, size, projection); From 8e6b686f3dafcb5d5eb68272e5ca465d9d384874 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 17 Dec 2013 09:43:21 +0100 Subject: [PATCH 5/6] Add hidpi option to ol.source.ImageWMS and ol.source.MapGuide --- src/objectliterals.jsdoc | 4 ++++ src/ol/source/imagewmssource.js | 10 ++++++++-- src/ol/source/mapguidesource.js | 7 +++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc index df4e7c4e28..375d0ea464 100644 --- a/src/objectliterals.jsdoc +++ b/src/objectliterals.jsdoc @@ -514,6 +514,8 @@ * @property {number|undefined} displayDpi The display resolution. Default is `96`. * @property {number|undefined} metersPerUnit The meters-per-unit value. Default is `1`. * @property {ol.Extent|undefined} extent Extent. + * @property {boolean|undefined} hidpi Use the `ol.Map#devicePixelRatio` value when + * requesting the image from the remote server. Default is `true`. * @property {boolean|undefined} useOverlay If `true`, will use * `GETDYNAMICMAPOVERLAYIMAGE`. * @property {ol.proj.ProjectionLike} projection Projection. @@ -560,6 +562,8 @@ * @property {null|string|undefined} crossOrigin crossOrigin setting for image * requests. * @property {ol.Extent|undefined} extent Extent. + * @property {boolean|undefined} hidpi Use the `ol.Map#devicePixelRatio` value when + * requesting the image from the remote server. Default is `true`. * @property {Object.} params WMS request parameters. At least a * `LAYERS` param is required. `STYLES` is `` by default. `VERSION` is * `1.3.0` by default. `WIDTH`, `HEIGHT`, `BBOX` and `CRS` (`SRS` for WMS diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index 752351fb2a..a52a8b698f 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -38,6 +38,12 @@ ol.source.ImageWMS = function(options) { imageUrlFunction: imageUrlFunction }); + /** + * @private + * @type {boolean} + */ + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + /** * @private * @type {ol.Image} @@ -48,8 +54,7 @@ ol.source.ImageWMS = function(options) { * @private * @type {number} */ - this.ratio_ = goog.isDef(options.ratio) ? - options.ratio : 1.5; + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5; }; goog.inherits(ol.source.ImageWMS, ol.source.Image); @@ -71,6 +76,7 @@ ol.source.ImageWMS.prototype.getParams = function() { ol.source.ImageWMS.prototype.getImage = function(extent, resolution, pixelRatio, projection) { resolution = this.findNearestResolution(resolution); + pixelRatio = this.hidpi_ ? pixelRatio : 1; var image = this.image_; if (!goog.isNull(image) && diff --git a/src/ol/source/mapguidesource.js b/src/ol/source/mapguidesource.js index 2e9ba8aa44..cd831e629d 100644 --- a/src/ol/source/mapguidesource.js +++ b/src/ol/source/mapguidesource.js @@ -31,6 +31,12 @@ ol.source.MapGuide = function(options) { imageUrlFunction: imageUrlFunction }); + /** + * @private + * @type {boolean} + */ + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + /** * @private * @type {number} @@ -74,6 +80,7 @@ goog.inherits(ol.source.MapGuide, ol.source.Image); ol.source.MapGuide.prototype.getImage = function(extent, resolution, pixelRatio, projection) { resolution = this.findNearestResolution(resolution); + pixelRatio = this.hidpi_ ? pixelRatio : 1; var image = this.image_; if (!goog.isNull(image) && From 3e83809880ad19b393f707ec891be3f757ce4659 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 17 Dec 2013 17:51:37 +0100 Subject: [PATCH 6/6] Add serverType option to ol.source.ImageWMS constructor --- examples/wms-image-custom-proj.js | 2 ++ examples/wms-image.js | 1 + examples/wms-no-proj.js | 1 + src/objectliterals.jsdoc | 3 +++ src/ol/source/imagewmssource.js | 11 ++++++++++ src/ol/source/wmssource.js | 34 +++++++++++++++++++++++++++++-- 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/examples/wms-image-custom-proj.js b/examples/wms-image-custom-proj.js index 80262a7c03..4548247b84 100644 --- a/examples/wms-image-custom-proj.js +++ b/examples/wms-image-custom-proj.js @@ -28,6 +28,7 @@ var layers = [ 'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale', 'FORMAT': 'image/jpeg' }, + serverType: 'mapserver', extent: extent }) }), @@ -42,6 +43,7 @@ var layers = [ 'National parks / geo.admin.ch' })], params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'}, + serverType: 'mapserver', extent: extent }) }) diff --git a/examples/wms-image.js b/examples/wms-image.js index f6c753779e..dd495aac46 100644 --- a/examples/wms-image.js +++ b/examples/wms-image.js @@ -15,6 +15,7 @@ var layers = [ source: new ol.source.ImageWMS({ url: 'http://demo.opengeo.org/geoserver/wms', params: {'LAYERS': 'topp:states'}, + serverType: 'geoserver', extent: [-13884991, 2870341, -7455066, 6338219] }) }) diff --git a/examples/wms-no-proj.js b/examples/wms-no-proj.js index 09e7da57a8..260961b6b6 100644 --- a/examples/wms-no-proj.js +++ b/examples/wms-no-proj.js @@ -37,6 +37,7 @@ var layers = [ })], crossOrigin: 'anonymous', params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'}, + serverType: 'mapserver', url: 'http://wms.geo.admin.ch/' }) }) diff --git a/src/objectliterals.jsdoc b/src/objectliterals.jsdoc index 375d0ea464..3fb309839e 100644 --- a/src/objectliterals.jsdoc +++ b/src/objectliterals.jsdoc @@ -516,6 +516,9 @@ * @property {ol.Extent|undefined} extent Extent. * @property {boolean|undefined} hidpi Use the `ol.Map#devicePixelRatio` value when * requesting the image from the remote server. Default is `true`. + * @property {ol.source.wms.ServerType|undefined} serverType The type of the remote WMS + * server: `mapserver`, `geoserver` or `qgis`. Only needed if `hidpi` is `true`. + * Default is `undefined`. * @property {boolean|undefined} useOverlay If `true`, will use * `GETDYNAMICMAPOVERLAYIMAGE`. * @property {ol.proj.ProjectionLike} projection Projection. diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index a52a8b698f..89b228408c 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -38,6 +38,12 @@ ol.source.ImageWMS = function(options) { imageUrlFunction: imageUrlFunction }); + /** + * @private + * @type {ol.source.wms.ServerType|undefined} + */ + this.serverType_ = options.serverType; + /** * @private * @type {boolean} @@ -92,6 +98,11 @@ ol.source.ImageWMS.prototype.getImage = var height = (extent[3] - extent[1]) / resolution; var size = [width * pixelRatio, height * pixelRatio]; + if (goog.isDef(this.serverType_) && pixelRatio > 1) { + var param = ol.source.wms.getDpiParam(this.serverType_, pixelRatio); + goog.object.extend(this.params_, param); + } + this.image_ = this.createImage( extent, resolution, pixelRatio, size, projection); return this.image_; diff --git a/src/ol/source/wmssource.js b/src/ol/source/wmssource.js index 9fdd7a80ad..47e8968d1e 100644 --- a/src/ol/source/wmssource.js +++ b/src/ol/source/wmssource.js @@ -1,9 +1,20 @@ goog.provide('ol.source.wms'); +goog.require('goog.asserts'); goog.require('goog.object'); goog.require('goog.uri.utils'); +/** + * @enum {string} + */ +ol.source.wms.ServerType = { + MAPSERVER: 'mapserver', + GEOSERVER: 'geoserver', + QGIS: 'qgis' +}; + + /** * @param {string} baseUrl WMS base URL. * @param {Object.} params Request parameters. @@ -12,8 +23,7 @@ goog.require('goog.uri.utils'); * @param {ol.proj.Projection} projection Projection. * @return {string} WMS GetMap request URL. */ -ol.source.wms.getUrl = - function(baseUrl, params, extent, size, projection) { +ol.source.wms.getUrl = function(baseUrl, params, extent, size, projection) { var baseParams = { 'SERVICE': 'WMS', 'VERSION': '1.3.0', @@ -40,3 +50,23 @@ ol.source.wms.getUrl = return goog.uri.utils.appendParamsFromMap(baseUrl, baseParams); }; + + +/** + * @param {ol.source.wms.ServerType} serverType Server name. + * @param {number} pixelRatio Pixel ratio. + * @return {Object.} + */ +ol.source.wms.getDpiParam = function(serverType, pixelRatio) { + var param = {}; + if (serverType == ol.source.wms.ServerType.MAPSERVER) { + param['MAP_RESOLUTION'] = 90 * pixelRatio; + } else if (serverType == ol.source.wms.ServerType.GEOSERVER) { + param['FORMAT_OPTION'] = 'dpi:' + 90 * pixelRatio; + } else if (serverType == ol.source.wms.ServerType.QGIS) { + param['DPI'] = 90 * pixelRatio; + } else { + goog.asserts.fail(); + } + return param; +};