@@ -480,6 +480,7 @@ void QgsGmlStreamingParser::startElement( const XML_Char *el, const XML_Char **a
480
480
const int nsLen = ( pszSep ) ? ( int )( pszSep - el ) : 0 ;
481
481
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
482
482
ParseMode parseMode ( mParseModeStack .isEmpty () ? None : mParseModeStack .top () );
483
+ int elDimension = 0 ;
483
484
484
485
// Figure out if the GML namespace is GML_NAMESPACE or GML32_NAMESPACE
485
486
if ( !mGMLNameSpaceURIPtr && pszSep )
@@ -538,14 +539,14 @@ void QgsGmlStreamingParser::startElement( const XML_Char *el, const XML_Char **a
538
539
mParseModeStack .push ( QgsGmlStreamingParser::PosList );
539
540
mCoorMode = QgsGmlStreamingParser::PosList;
540
541
mStringCash .clear ();
541
- if ( mDimension == 0 )
542
+ if ( elDimension == 0 )
542
543
{
543
544
QString srsDimension = readAttribute ( QStringLiteral ( " srsDimension" ), attr );
544
545
bool ok;
545
546
int dimension = srsDimension.toInt ( &ok );
546
547
if ( ok )
547
548
{
548
- mDimension = dimension;
549
+ elDimension = dimension;
549
550
}
550
551
}
551
552
}
@@ -803,7 +804,7 @@ void QgsGmlStreamingParser::startElement( const XML_Char *el, const XML_Char **a
803
804
if ( !mGeometryString .empty () )
804
805
isGeom = true ;
805
806
806
- if ( mDimension == 0 && isGeom )
807
+ if ( elDimension == 0 && isGeom )
807
808
{
808
809
// srsDimension can also be set on the top geometry element
809
810
// e.g. https://data.linz.govt.nz/services;key=XXXXXXXX/wfs?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=data.linz.govt.nz:layer-524
@@ -812,10 +813,16 @@ void QgsGmlStreamingParser::startElement( const XML_Char *el, const XML_Char **a
812
813
int dimension = srsDimension.toInt ( &ok );
813
814
if ( ok )
814
815
{
815
- mDimension = dimension;
816
+ elDimension = dimension;
816
817
}
817
818
}
818
819
820
+ if ( elDimension != 0 )
821
+ {
822
+ mDimension = elDimension;
823
+ }
824
+ mDimensionStack .push ( mDimension );
825
+
819
826
if ( mEpsg == 0 && isGeom )
820
827
{
821
828
if ( readEpsgFromAttribute ( mEpsg , attr ) != 0 )
@@ -842,6 +849,8 @@ void QgsGmlStreamingParser::endElement( const XML_Char *el )
842
849
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
843
850
ParseMode parseMode ( mParseModeStack .isEmpty () ? None : mParseModeStack .top () );
844
851
852
+ mDimension = mDimensionStack .isEmpty () ? 0 : mDimensionStack .top () ;
853
+
845
854
const bool isGMLNS = ( nsLen == mGMLNameSpaceURI .size () && mGMLNameSpaceURIPtr && memcmp ( el, mGMLNameSpaceURIPtr , nsLen ) == 0 );
846
855
847
856
if ( parseMode == Coordinate && isGMLNS && LOCALNAME_EQUALS ( " coordinates" ) )
0 commit comments