diff --git a/src/core/layertree/qgslayertreemodellegendnode.cpp b/src/core/layertree/qgslayertreemodellegendnode.cpp index 0c8612c292d..bacb4765486 100644 --- a/src/core/layertree/qgslayertreemodellegendnode.cpp +++ b/src/core/layertree/qgslayertreemodellegendnode.cpp @@ -716,6 +716,15 @@ QJsonObject QgsSymbolLegendNode::exportSymbolToJson( const QgsLegendSettings &se QJsonObject json; json[ QStringLiteral( "icon" ) ] = base64; + if ( mItem.scaleMaxDenom() > 0 ) + { + json[ QStringLiteral( "scaleMaxDenom" ) ] = mItem.scaleMaxDenom(); + } + if ( mItem.scaleMinDenom() > 0 ) + { + json[ QStringLiteral( "scaleMinDenom" ) ] = mItem.scaleMinDenom(); + } + mItem.scaleMaxDenom(); return json; } diff --git a/tests/src/python/test_qgsserver_wms_getlegendgraphic.py b/tests/src/python/test_qgsserver_wms_getlegendgraphic.py index 4f872bf2b5a..54cd59c796e 100644 --- a/tests/src/python/test_qgsserver_wms_getlegendgraphic.py +++ b/tests/src/python/test_qgsserver_wms_getlegendgraphic.py @@ -20,6 +20,7 @@ import os os.environ['QT_HASH_SEED'] = '1' import re +import json import urllib.request import urllib.parse import urllib.error @@ -30,7 +31,19 @@ from qgis.PyQt.QtCore import QSize import osgeo.gdal # NOQA from test_qgsserver_wms import TestQgsServerWMSTestBase -from qgis.core import QgsProject +from qgis.core import ( + QgsProject, + QgsMarkerSymbol, + QgsRuleBasedRenderer, + QgsVectorLayer, +) + +from qgis.server import ( + QgsBufferServerRequest, + QgsBufferServerResponse, + QgsServer, + QgsServerRequest, +) # Strip path and content length because path may vary RE_STRIP_UNCHECKABLE = br'MAP=[^"]+|Content-Length: \d+' @@ -1002,6 +1015,36 @@ class TestQgsServerWMSGetLegendGraphic(TestQgsServerWMSTestBase): "&FORMAT=application/json", "wms_getlegendgraphic_json_multiple_layers") + def testJsonSymbolMaxMinScale(self): + """Test min/max scale in symbol json export""" + + project = QgsProject() + layer = QgsVectorLayer("Point?field=fldtxt:string", + "layer1", "memory") + + symbol = QgsMarkerSymbol.createSimple( + {'name': 'square', 'color': 'red'}) + + scale_min = 10000 + scale_max = 1000 + rule = QgsRuleBasedRenderer.Rule(symbol, scale_min, scale_max, '') + rootrule = QgsRuleBasedRenderer.Rule(None) + rootrule.appendChild(rule) + layer.setRenderer(QgsRuleBasedRenderer(rootrule)) + + project.addMapLayers([layer]) + + server = QgsServer() + request = QgsBufferServerRequest("/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetLegendGraphic" + + "&LAYERS=layer1" + + "&FORMAT=application/json") + response = QgsBufferServerResponse() + server.handleRequest(request, response, project) + j = json.loads(bytes(response.body())) + node = j['nodes'][0] + self.assertEqual(node['scaleMaxDenom'], 1000) + self.assertEqual(node['scaleMinDenom'], 10000) + if __name__ == '__main__': unittest.main()