From e3409526e30fc6f74729311f99bcad364a587a59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?D'Hont=20Ren=C3=A9-Luc?= <rldhont@gmail.com>
Date: Fri, 13 Apr 2012 14:04:53 +0200
Subject: [PATCH] Implementing SCALE parameter in GetLegendGraphic

---
 src/mapserver/qgswmsserver.cpp |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/src/mapserver/qgswmsserver.cpp b/src/mapserver/qgswmsserver.cpp
index 492c427..1f7f4ad 100644
--- a/src/mapserver/qgswmsserver.cpp
+++ b/src/mapserver/qgswmsserver.cpp
@@ -299,6 +299,40 @@ QImage* QgsWMSServer::getLegendGraphics()
 
   QgsCoordinateReferenceSystem dummyCRS;
   QStringList layerIds = layerSet( layersList, stylesList, dummyCRS );
+
+  //read SCALE
+  QMap<QString, QString>::const_iterator scale_it = mParameterMap.find( "SCALE" );
+  if ( scale_it != mParameterMap.end() )
+  {
+    //converting SCALE
+    bool conversionSuccess;
+    bool scaleOk = true;
+    double scaleValue = scale_it.value().toDouble( &conversionSuccess );
+    if ( !conversionSuccess )
+      scaleOk = false;
+
+    //reducing layerIds stringList
+    if ( scaleOk )
+    {
+      QMap<QString, QgsMapLayer*>& layerMap = QgsMapLayerRegistry::instance()->mapLayers();
+      QStringList newLayerIds;
+
+      foreach( QString id, layerIds )
+      {
+        QgsMapLayer *layer = layerMap.value( id, 0 );
+        if ( layer->hasScaleBasedVisibility() ) {
+          if ( layer->minimumScale() <= scaleValue &&
+               layer->maximumScale() >= scaleValue )
+            newLayerIds.push_front( layer->id() );
+        } else {
+          newLayerIds.push_front( layer->id() );
+        }
+      }
+      layerIds = newLayerIds;
+    }
+  }
+
+
   QgsLegendModel legendModel;
   legendModel.setLayerSet( layerIds );
 
-- 
1.7.5.4

