@@ -518,8 +518,10 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
518
518
// add geometry column
519
519
if ( layer->isSpatial () )
520
520
{
521
+ const QgsWkbTypes::Type sourceWkbType = layer->wkbType ();
522
+
521
523
QString geomType;
522
- switch ( layer-> wkbType ( ) )
524
+ switch ( QgsWkbTypes::flatType ( sourceWkbType ) )
523
525
{
524
526
case QgsWkbTypes::Point :
525
527
geomType = QStringLiteral ( " POINT" );
@@ -540,13 +542,31 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
540
542
geomType = QStringLiteral ( " MULTIPOLYGON" );
541
543
break ;
542
544
default :
543
- showWarning ( tr ( " QGIS wkbType %1 not supported" ).arg ( layer->wkbType () ) );
545
+ showWarning ( tr ( " Layer %1 has unsupported WkbType %2 not supported" ).arg ( layer->name (), QgsWkbTypes::displayString ( layer-> wkbType () ) ) );
544
546
break ;
545
547
};
546
- QString sqlAddGeom = QStringLiteral ( " SELECT AddGeometryColumn('%1', 'Geometry', %2, '%3', 2)" )
547
- .arg ( tableName )
548
- .arg ( layer->crs ().authid ().startsWith ( QLatin1String ( " EPSG:" ), Qt::CaseInsensitive ) ? layer->crs ().authid ().mid ( 5 ).toLong () : 0 )
549
- .arg ( geomType );
548
+
549
+ QString zmInfo = QStringLiteral ( " XY" );
550
+
551
+ if ( QgsWkbTypes::hasZ ( sourceWkbType ) )
552
+ zmInfo += ' Z' ;
553
+ if ( QgsWkbTypes::hasM ( sourceWkbType ) )
554
+ zmInfo += ' M' ;
555
+
556
+ QString epsgCode;
557
+
558
+ if ( layer->crs ().authid ().startsWith ( QLatin1String ( " EPSG:" ), Qt::CaseInsensitive ) )
559
+ {
560
+ epsgCode = layer->crs ().authid ().mid ( 5 );
561
+ }
562
+ else
563
+ {
564
+ epsgCode = ' 0' ;
565
+ showWarning ( tr ( " Layer %1 has unsupported Coordinate Reference System (%2)." ).arg ( layer->name (), layer->crs ().authid () ) );
566
+ }
567
+
568
+ QString sqlAddGeom = QStringLiteral ( " SELECT AddGeometryColumn('%1', 'Geometry', %2, '%3', '%4')" )
569
+ .arg ( tableName, epsgCode, geomType, zmInfo );
550
570
551
571
// create spatial index
552
572
QString sqlCreateIndex = QStringLiteral ( " SELECT CreateSpatialIndex('%1', 'Geometry')" ).arg ( tableName );
0 commit comments