@@ -351,7 +351,11 @@ void QgsWFSData::endElement( const XML_Char* el )
351351 {
352352 // error
353353 }
354- *mWkbType = QGis::WKBPoint;
354+
355+ if ( *mWkbType != QGis::WKBMultiPoint ) // keep multitype in case of geometry type mix
356+ {
357+ *mWkbType = QGis::WKBPoint;
358+ }
355359 }
356360 else // multipoint, add WKB as fragment
357361 {
@@ -386,7 +390,11 @@ void QgsWFSData::endElement( const XML_Char* el )
386390 {
387391 // error
388392 }
389- *mWkbType = QGis::WKBLineString;
393+
394+ if ( *mWkbType != QGis::WKBMultiLineString )// keep multitype in case of geometry type mix
395+ {
396+ *mWkbType = QGis::WKBLineString;
397+ }
390398 }
391399 else // multiline, add WKB as fragment
392400 {
@@ -424,14 +432,18 @@ void QgsWFSData::endElement( const XML_Char* el )
424432 }
425433 else if ( elementName == GML_NAMESPACE + NS_SEPARATOR + " Polygon" )
426434 {
427- *mWkbType = QGis::WKBPolygon;
435+ if ( *mWkbType != QGis::WKBMultiPolygon )// keep multitype in case of geometry type mix
436+ {
437+ *mWkbType = QGis::WKBPolygon;
438+ }
428439 if ( mParseModeStack .top () != QgsWFSData::multiPolygon )
429440 {
430441 createPolygonFromFragments ();
431442 }
432443 }
433444 else if ( elementName == GML_NAMESPACE + NS_SEPARATOR + " MultiPoint" )
434445 {
446+ *mWkbType = QGis::WKBMultiPoint;
435447 if ( !mParseModeStack .empty () )
436448 {
437449 mParseModeStack .pop ();
@@ -440,6 +452,7 @@ void QgsWFSData::endElement( const XML_Char* el )
440452 }
441453 else if ( elementName == GML_NAMESPACE + NS_SEPARATOR + " MultiLineString" )
442454 {
455+ *mWkbType = QGis::WKBMultiLineString;
443456 if ( !mParseModeStack .empty () )
444457 {
445458 mParseModeStack .pop ();
@@ -448,6 +461,7 @@ void QgsWFSData::endElement( const XML_Char* el )
448461 }
449462 else if ( elementName == GML_NAMESPACE + NS_SEPARATOR + " MultiPolygon" )
450463 {
464+ *mWkbType = QGis::WKBMultiPolygon;
451465 if ( !mParseModeStack .empty () )
452466 {
453467 mParseModeStack .pop ();
0 commit comments