@@ -689,31 +689,38 @@ QgsExpression::Node* QgsExpression::Node::createFromOgcFilter( QDomElement &elem
689
689
else if ( element.localName () == " PropertyIsBetween" )
690
690
{
691
691
// <ogc:PropertyIsBetween> encode a Range check
692
- QgsExpression::Node *operand = 0 , *lowerBound = 0 , *upperBound = 0 ;
692
+ QgsExpression::Node *operand = 0 , *lowerBound = 0 ;
693
+ QgsExpression::Node *operand2 = 0 , *upperBound = 0 ;
693
694
694
- QDomElement operandElem = element.firstChildElement ( " LowerBoundary" );
695
- if ( !operandElem.isNull () )
696
- lowerBound = createFromOgcFilter ( operandElem, errorMessage );
697
-
698
- operandElem = element.firstChildElement ( " UpperBoundary" );
699
- if ( !operandElem.isNull () )
700
- upperBound = createFromOgcFilter ( operandElem, errorMessage );
701
-
702
- // <ogc:expression>
703
- operandElem = element.firstChildElement ();
704
- while ( !operandElem.isNull () )
695
+ QDomElement operandElem = element.firstChildElement ();
696
+ while ( !operandElem.isNull () )
705
697
{
706
- if ( operandElem.localName () != " LowerBoundary" &&
707
- operandElem.localName () != " UpperBoundary" )
698
+ if ( operandElem.localName () == " LowerBoundary" )
699
+ {
700
+ QDomElement lowerBoundElem = operandElem.firstChildElement ();
701
+ lowerBound = createFromOgcFilter ( lowerBoundElem, errorMessage );
702
+ }
703
+ else if ( operandElem.localName () == " UpperBoundary" )
708
704
{
705
+ QDomElement upperBoundElem = operandElem.firstChildElement ();
706
+ upperBound = createFromOgcFilter ( upperBoundElem, errorMessage );
707
+ }
708
+ else
709
+ {
710
+ // <ogc:expression>
711
+ // both operand and operand2 contain the same expression,
712
+ // they are respectively compared to lower bound and upper bound
709
713
operand = createFromOgcFilter ( operandElem, errorMessage );
710
- break ;
714
+ operand2 = createFromOgcFilter ( operandElem, errorMessage ) ;
711
715
}
712
716
717
+ if ( operand && lowerBound && operand2 && upperBound )
718
+ break ;
719
+
713
720
operandElem = operandElem.nextSiblingElement ();
714
721
}
715
722
716
- if ( !operand || !lowerBound || !upperBound )
723
+ if ( !operand || !lowerBound || !operand2 || ! upperBound )
717
724
{
718
725
if ( operand )
719
726
delete operand;
@@ -729,7 +736,7 @@ QgsExpression::Node* QgsExpression::Node::createFromOgcFilter( QDomElement &elem
729
736
}
730
737
731
738
QgsExpression::Node *geOperator = new QgsExpression::NodeBinaryOperator ( boGE, operand, lowerBound );
732
- QgsExpression::Node *leOperator = new QgsExpression::NodeBinaryOperator ( boLE, operand , upperBound );
739
+ QgsExpression::Node *leOperator = new QgsExpression::NodeBinaryOperator ( boLE, operand2 , upperBound );
733
740
return new QgsExpression::NodeBinaryOperator ( boAnd, geOperator, leOperator );
734
741
}
735
742
0 commit comments