@@ -485,6 +485,7 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
485
485
const int nsLen = ( pszSep ) ? ( int )( pszSep - el ) : 0 ;
486
486
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
487
487
ParseMode theParseMode ( mParseModeStack .isEmpty () ? none : mParseModeStack .top () );
488
+ int elDimension = 0 ;
488
489
489
490
// Figure out if the GML namespace is GML_NAMESPACE or GML32_NAMESPACE
490
491
if ( !mGMLNameSpaceURIPtr && pszSep )
@@ -543,14 +544,14 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
543
544
mParseModeStack .push ( QgsGmlStreamingParser::posList );
544
545
mCoorMode = QgsGmlStreamingParser::posList;
545
546
mStringCash .clear ();
546
- if ( mDimension == 0 )
547
+ if ( elDimension == 0 )
547
548
{
548
549
QString srsDimension = readAttribute ( " srsDimension" , attr );
549
550
bool ok;
550
551
int dimension = srsDimension.toInt ( &ok );
551
552
if ( ok )
552
553
{
553
- mDimension = dimension;
554
+ elDimension = dimension;
554
555
}
555
556
}
556
557
}
@@ -808,7 +809,7 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
808
809
if ( !mGeometryString .empty () )
809
810
isGeom = true ;
810
811
811
- if ( mDimension == 0 && isGeom )
812
+ if ( elDimension == 0 && isGeom )
812
813
{
813
814
// srsDimension can also be set on the top geometry element
814
815
// 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
@@ -817,10 +818,16 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
817
818
int dimension = srsDimension.toInt ( &ok );
818
819
if ( ok )
819
820
{
820
- mDimension = dimension;
821
+ elDimension = dimension;
821
822
}
822
823
}
823
824
825
+ if ( elDimension != 0 )
826
+ {
827
+ mDimension = elDimension;
828
+ }
829
+ mDimensionStack .push ( mDimension );
830
+
824
831
if ( mEpsg == 0 && isGeom )
825
832
{
826
833
if ( readEpsgFromAttribute ( mEpsg , attr ) != 0 )
@@ -847,6 +854,8 @@ void QgsGmlStreamingParser::endElement( const XML_Char* el )
847
854
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
848
855
ParseMode theParseMode ( mParseModeStack .isEmpty () ? none : mParseModeStack .top () );
849
856
857
+ mDimension = mDimensionStack .isEmpty () ? 0 : mDimensionStack .top () ;
858
+
850
859
const bool isGMLNS = ( nsLen == mGMLNameSpaceURI .size () && mGMLNameSpaceURIPtr && memcmp ( el, mGMLNameSpaceURIPtr , nsLen ) == 0 );
851
860
852
861
if ( theParseMode == coordinate && isGMLNS && LOCALNAME_EQUALS ( " coordinates" ) )
0 commit comments