Skip to content

Commit f800ac6

Browse files
committed
Merge pull request #1975 from rduivenvoorde/sldfix_11863
Fixes #11863 (invalid SLD with negative values)
2 parents 72eb1aa + 51c5931 commit f800ac6

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

src/core/qgsogcutils.cpp

+18-6
Original file line numberDiff line numberDiff line change
@@ -1931,27 +1931,39 @@ QDomElement QgsOgcUtils::expressionNodeToOgcFilter( const QgsExpression::Node* n
19311931

19321932
QDomElement QgsOgcUtils::expressionUnaryOperatorToOgcFilter( const QgsExpression::NodeUnaryOperator* node, QDomDocument& doc, QString& errorMessage )
19331933
{
1934+
1935+
QDomElement operandElem = expressionNodeToOgcFilter( node->operand(), doc, errorMessage );
1936+
if ( !errorMessage.isEmpty() )
1937+
return QDomElement();
1938+
19341939
QDomElement uoElem;
19351940
switch ( node->op() )
19361941
{
19371942
case QgsExpression::uoMinus:
19381943
uoElem = doc.createElement( "ogc:Literal" );
1939-
uoElem.appendChild( doc.createTextNode( "-" ) );
1944+
if ( node->operand()->nodeType() == QgsExpression::ntLiteral )
1945+
{
1946+
// operand expression already created a Literal node:
1947+
// take the literal value, prepend - and remove old literal node
1948+
uoElem.appendChild( doc.createTextNode( "-" + operandElem.text() ) );
1949+
doc.removeChild(operandElem);
1950+
}
1951+
else
1952+
{
1953+
errorMessage = QString( "This use of unary operator not implemented yet" );
1954+
return QDomElement();
1955+
}
19401956
break;
19411957
case QgsExpression::uoNot:
19421958
uoElem = doc.createElement( "ogc:Not" );
1959+
uoElem.appendChild( operandElem );
19431960
break;
19441961

19451962
default:
19461963
errorMessage = QString( "Unary operator %1 not implemented yet" ).arg( QgsExpression::UnaryOperatorText[node->op()] );
19471964
return QDomElement();
19481965
}
19491966

1950-
QDomElement operandElem = expressionNodeToOgcFilter( node->operand(), doc, errorMessage );
1951-
if ( !errorMessage.isEmpty() )
1952-
return QDomElement();
1953-
1954-
uoElem.appendChild( operandElem );
19551967
return uoElem;
19561968
}
19571969

0 commit comments

Comments
 (0)