Skip to content

Commit

Permalink
Merge pull request #6285 from tudorbarascu/dpi
Browse files Browse the repository at this point in the history
fix server issue for double devicePixelRatio leading to DPI requests with decimals
  • Loading branch information
rldhont committed Feb 12, 2018
2 parents 6096e5c + fbc6e4d commit a9d61ff
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/server/services/wms/qgswmsparameters.cpp
Expand Up @@ -685,9 +685,9 @@ namespace QgsWms
return value( ParameterName::DPI ).toString();
}

int QgsWmsParameters::dpiAsInt() const
double QgsWmsParameters::dpiAsDouble() const
{
return toInt( ParameterName::DPI );
return toDouble( ParameterName::DPI );
}

QString QgsWmsParameters::version() const
Expand Down
2 changes: 1 addition & 1 deletion src/server/services/wms/qgswmsparameters.h
Expand Up @@ -892,7 +892,7 @@ namespace QgsWms
* \returns dpi parameter
* \throws QgsBadRequestException
*/
int dpiAsInt() const;
double dpiAsDouble() const;

/**
* Returns TEMPLATE parameter or an empty string if not defined.
Expand Down
2 changes: 1 addition & 1 deletion src/server/services/wms/qgswmsrenderer.cpp
Expand Up @@ -1046,7 +1046,7 @@ namespace QgsWms
double OGC_PX_M = 0.00028; // OGC reference pixel size in meter, also used by qgis
int dpm = 1 / OGC_PX_M;
if ( !mWmsParameters.dpi().isEmpty() )
dpm = mWmsParameters.dpiAsInt() / 0.0254;
dpm = mWmsParameters.dpiAsDouble() / 0.0254;

image->setDotsPerMeterX( dpm );
image->setDotsPerMeterY( dpm );
Expand Down
19 changes: 19 additions & 0 deletions tests/src/python/test_qgsserver_wms_getmap.py
Expand Up @@ -184,6 +184,25 @@ def test_wms_getmap_basic(self):
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Basic4")

def test_wms_getmap_dpi(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Country",
"STYLES": "",
"FORMAT": "image/png",
"BBOX": "-16817707,-4710778,5696513,14587125",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"DPI": "112.5"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Basic5")

def test_wms_getmap_invalid_parameters(self):
# height should be an int
qs = "?" + "&".join(["%s=%s" % i for i in list({
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit a9d61ff

Please sign in to comment.