@@ -214,7 +214,11 @@ QgsPointV2 QgsLineStringV2::pointN( int i ) const
214
214
}
215
215
216
216
QgsWKBTypes::Type t = QgsWKBTypes::Point ;
217
- if ( hasZ && hasM )
217
+ if ( mWkbType == QgsWKBTypes::LineString25D )
218
+ {
219
+ t = QgsWKBTypes::Point25D;
220
+ }
221
+ else if ( hasZ && hasM )
218
222
{
219
223
t = QgsWKBTypes::PointZM;
220
224
}
@@ -481,6 +485,12 @@ bool QgsLineStringV2::insertVertex( const QgsVertexId& position, const QgsPointV
481
485
{
482
486
return false ;
483
487
}
488
+
489
+ if ( mWkbType == QgsWKBTypes::Unknown || mX .isEmpty () )
490
+ {
491
+ setZMTypeFromSubGeometry ( &vertex, QgsWKBTypes::LineString );
492
+ }
493
+
484
494
mX .insert ( position.vertex , vertex.x () );
485
495
mY .insert ( position.vertex , vertex.y () );
486
496
if ( is3D () )
@@ -682,6 +692,12 @@ bool QgsLineStringV2::addZValue( double zValue )
682
692
if ( QgsWKBTypes::hasZ ( mWkbType ) )
683
693
return false ;
684
694
695
+ if ( mWkbType == QgsWKBTypes::Unknown )
696
+ {
697
+ mWkbType = QgsWKBTypes::LineStringZ;
698
+ return true ;
699
+ }
700
+
685
701
mWkbType = QgsWKBTypes::addZ ( mWkbType );
686
702
687
703
mZ .clear ();
@@ -699,7 +715,20 @@ bool QgsLineStringV2::addMValue( double mValue )
699
715
if ( QgsWKBTypes::hasM ( mWkbType ) )
700
716
return false ;
701
717
702
- mWkbType = QgsWKBTypes::addM ( mWkbType );
718
+ if ( mWkbType == QgsWKBTypes::Unknown )
719
+ {
720
+ mWkbType = QgsWKBTypes::LineStringM;
721
+ return true ;
722
+ }
723
+
724
+ if ( mWkbType == QgsWKBTypes::LineString25D )
725
+ {
726
+ mWkbType = QgsWKBTypes::LineStringZM;
727
+ }
728
+ else
729
+ {
730
+ mWkbType = QgsWKBTypes::addM ( mWkbType );
731
+ }
703
732
704
733
mM .clear ();
705
734
int nPoints = numPoints ();
0 commit comments