diff --git a/examples/wms-image.js b/examples/wms-image.js index 2b4cea408e..74f251e2c3 100644 --- a/examples/wms-image.js +++ b/examples/wms-image.js @@ -15,6 +15,7 @@ var layers = [ source: new ol.source.ImageWMS({ url: 'https://ahocevar.com/geoserver/wms', params: {'LAYERS': 'topp:states'}, + ratio: 1, serverType: 'geoserver' }) }) diff --git a/src/ol/source/imagewms.js b/src/ol/source/imagewms.js index 73f660b80d..69c5df0825 100644 --- a/src/ol/source/imagewms.js +++ b/src/ol/source/imagewms.js @@ -194,11 +194,11 @@ ol.source.ImageWMS.prototype.getImageInternal = function(extent, resolution, pix var center = ol.extent.getCenter(extent); var viewWidth = Math.ceil(ol.extent.getWidth(extent) / imageResolution); var viewHeight = Math.ceil(ol.extent.getHeight(extent) / imageResolution); - var viewExtent = ol.extent.getForViewAndSize(center, resolution, 0, + var viewExtent = ol.extent.getForViewAndSize(center, imageResolution, 0, [viewWidth, viewHeight]); var requestWidth = Math.ceil(this.ratio_ * ol.extent.getWidth(extent) / imageResolution); var requestHeight = Math.ceil(this.ratio_ * ol.extent.getHeight(extent) / imageResolution); - var requestExtent = ol.extent.getForViewAndSize(center, resolution, 0, + var requestExtent = ol.extent.getForViewAndSize(center, imageResolution, 0, [requestWidth, requestHeight]); var image = this.image_; diff --git a/test/spec/ol/source/imagewms.test.js b/test/spec/ol/source/imagewms.test.js index 3e6ca560fb..207929b3db 100644 --- a/test/spec/ol/source/imagewms.test.js +++ b/test/spec/ol/source/imagewms.test.js @@ -35,6 +35,19 @@ describe('ol.source.ImageWMS', function() { expect(extentAspectRatio).to.roughlyEqual(imageAspectRatio, 1e-12); }); + it('uses correct WIDTH and HEIGHT for HiDPI devices', function() { + pixelRatio = 2; + options.serverType = 'geoserver'; + var source = new ol.source.ImageWMS(options); + var image = source.getImage(extent, resolution, pixelRatio, projection); + var uri = new URL(image.src_); + var queryData = uri.searchParams; + var width = Number(queryData.get('WIDTH')); + var height = Number(queryData.get('HEIGHT')); + expect(width).to.be(400); + expect(height).to.be(400); + }); + it('requests integer WIDTH and HEIGHT', function() { options.ratio = 1.5; var source = new ol.source.ImageWMS(options);