Skip to content

Commit c88c38c

Browse files
committedMar 28, 2012
Use new symbology SLD import for QGIS server
1 parent 04e8268 commit c88c38c

File tree

2 files changed

+21
-49
lines changed

2 files changed

+21
-49
lines changed
 

‎src/mapserver/qgssldparser.cpp

Lines changed: 19 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
#include "qgscoordinatetransform.h"
2222
#include "qgsftptransaction.h"
2323
#include "qgshttptransaction.h"
24-
#include "qgssinglesymbolrenderer.h"
25-
#include "qgssldrenderer.h"
26-
#include "qgssymbol.h"
24+
#include "qgsrendererv2.h"
25+
#include "qgssinglesymbolrendererv2.h"
26+
#include "qgssymbolv2.h"
2727
#include "qgsvectordataprovider.h"
2828
#include "qgsvectorlayer.h"
2929
#include "qgsmapserviceexception.h"
@@ -274,9 +274,9 @@ QList<QgsMapLayer*> QgsSLDParser::mapLayerFromStyle( const QString& layerName, c
274274
QgsVectorLayer* v = dynamic_cast<QgsVectorLayer*>( fallbackLayerList.at( 0 ) );
275275
if ( v )
276276
{
277-
QgsRenderer* r = rendererFromUserStyle( userStyleElement, v );
278-
v->setRenderer( r );
279-
v->setUsingRendererV2( false );
277+
QgsFeatureRendererV2* r = rendererFromUserStyle( userStyleElement, v );
278+
v->setRendererV2( r );
279+
v->setUsingRendererV2( true );
280280
labelSettingsFromUserStyle( userStyleElement, v );
281281
#ifdef DIAGRAMSERVER
282282
overlaysFromUserStyle( userStyleElement, v );
@@ -337,7 +337,7 @@ QList<QgsMapLayer*> QgsSLDParser::mapLayerFromStyle( const QString& layerName, c
337337
return resultList;
338338
}
339339

340-
QgsRenderer* theRenderer = 0;
340+
QgsFeatureRendererV2* theRenderer = 0;
341341

342342
QgsVectorLayer* theVectorLayer = dynamic_cast<QgsVectorLayer*>( theMapLayer );
343343
if ( !theVectorLayer )
@@ -370,15 +370,8 @@ QList<QgsMapLayer*> QgsSLDParser::mapLayerFromStyle( const QString& layerName, c
370370

371371
if ( userStyleElement.isNull() )//apply a default style
372372
{
373-
theRenderer = new QgsSingleSymbolRenderer( theVectorLayer->geometryType() );
374-
QgsSymbol* defaultSymbol = new QgsSymbol( theVectorLayer->geometryType() );
375-
QPen defaultPen;
376-
defaultPen.setWidth( 1 );
377-
defaultSymbol->setPen( defaultPen );
378-
QBrush defaultBrush;
379-
defaultBrush.setStyle( Qt::NoBrush );
380-
defaultSymbol->setBrush( defaultBrush );
381-
( static_cast<QgsSingleSymbolRenderer*>( theRenderer ) )->addSymbol( defaultSymbol );
373+
QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( theVectorLayer->geometryType() );
374+
theRenderer = new QgsSingleSymbolRendererV2( symbol );
382375
}
383376
else
384377
{
@@ -399,48 +392,26 @@ QList<QgsMapLayer*> QgsSLDParser::mapLayerFromStyle( const QString& layerName, c
399392
delete theVectorLayer;
400393
return resultList;
401394
}
402-
theVectorLayer->setRenderer( theRenderer );
403-
theVectorLayer->setUsingRendererV2( false );
395+
theVectorLayer->setRendererV2( theRenderer );
396+
theVectorLayer->setUsingRendererV2( true );
404397
QgsDebugMsg( "Returning the vectorlayer" );
405398
setOpacityForLayer( userLayerElement, theVectorLayer );
406399
resultList.push_back( theVectorLayer );
407400
return resultList;
408401
}
409402

410-
QgsRenderer* QgsSLDParser::rendererFromUserStyle( const QDomElement& userStyleElement, QgsVectorLayer* vec ) const
403+
QgsFeatureRendererV2* QgsSLDParser::rendererFromUserStyle( const QDomElement& userStyleElement, QgsVectorLayer* vec ) const
411404
{
412-
if ( !vec )
405+
if ( !vec || userStyleElement.isNull() )
413406
{
414407
return 0;
415408
}
416409

417410
QgsDebugMsg( "Entering" );
418411

419-
QgsSLDRenderer* theRenderer = new QgsSLDRenderer( vec->geometryType() );
420-
theRenderer->setScaleDenominator( mScaleDenominator );
421-
422-
if ( !userStyleElement.isNull() )
423-
{
424-
QDomNodeList featureTypeList = userStyleElement.elementsByTagName( "FeatureTypeStyle" );
425-
for ( int i = 0; i < featureTypeList.size(); ++i )
426-
{
427-
QDomNodeList ruleNodeList = featureTypeList.item( i ).toElement().elementsByTagName( "Rule" );
428-
for ( int j = 0; j < ruleNodeList.size(); ++j )
429-
{
430-
QDomElement ruleElement = ruleNodeList.item( j ).toElement();
431-
QgsSLDRule* r = new QgsSLDRule();
432-
if ( r->setFromXml( ruleElement, vec, mFilesToRemove ) == 0 )
433-
{
434-
theRenderer->addRule( r );
435-
}
436-
else
437-
{
438-
delete r;
439-
}
440-
}
441-
}
442-
}
443-
return theRenderer;
412+
QString errorMessage;
413+
QgsFeatureRendererV2* renderer = QgsFeatureRendererV2::loadSld( userStyleElement.parentNode(), vec->geometryType(), errorMessage );
414+
return renderer;
444415
}
445416

446417
bool QgsSLDParser::rasterSymbologyFromUserStyle( const QDomElement& userStyleElement, QgsRasterLayer* r ) const
@@ -1405,8 +1376,9 @@ QgsVectorLayer* QgsSLDParser::contourLayerFromRaster( const QDomElement& userSty
14051376
QgsVectorLayer* contourLayer = new QgsVectorLayer( tmpFileName, "layer", "ogr" );
14061377

14071378
//create renderer
1408-
QgsRenderer* theRenderer = rendererFromUserStyle( userStyleElem, contourLayer );
1409-
contourLayer->setRenderer( theRenderer );
1379+
QgsFeatureRendererV2* theRenderer = rendererFromUserStyle( userStyleElem, contourLayer );
1380+
contourLayer->setRendererV2( theRenderer );
1381+
contourLayer->setUsingRendererV2( true );
14101382

14111383
//add labelling if requested
14121384
labelSettingsFromUserStyle( userStyleElem, contourLayer );

‎src/mapserver/qgssldparser.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class QPen;
2727
class QgsMapLayer;
2828
class QgsVectorLayer;
2929
class QgsRasterLayer;
30-
class QgsRenderer;
30+
class QgsFeatureRendererV2;
3131

3232
#include "qgsconfigparser.h"
3333
#include "qgsmaprenderer.h"
@@ -85,7 +85,7 @@ class QgsSLDParser: public QgsConfigParser
8585
/**Don't use the default constructor*/
8686
QgsSLDParser();
8787
/**Creates a Renderer from a UserStyle SLD node. Returns 0 in case of error*/
88-
QgsRenderer* rendererFromUserStyle( const QDomElement& userStyleElement, QgsVectorLayer* vec ) const;
88+
QgsFeatureRendererV2* rendererFromUserStyle( const QDomElement& userStyleElement, QgsVectorLayer* vec ) const;
8989
/**Searches for a <TextSymbolizer> element and applies the settings to the vector layer
9090
@return true if settings have been applied, false in case of <TextSymbolizer> element not present or error*/
9191
bool labelSettingsFromUserStyle( const QDomElement& userStyleElement, QgsVectorLayer* vec ) const;

0 commit comments

Comments
 (0)
Please sign in to comment.