Skip to content

Commit 8ad579b

Browse files
committed
[FEATURE] Offline editing support for Z and M coordinates
1 parent b64a958 commit 8ad579b

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/core/qgsofflineediting.cpp

+26-6
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,10 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
518518
// add geometry column
519519
if ( layer->isSpatial() )
520520
{
521+
const QgsWkbTypes::Type sourceWkbType = layer->wkbType();
522+
521523
QString geomType;
522-
switch ( layer->wkbType() )
524+
switch ( QgsWkbTypes::flatType( sourceWkbType ) )
523525
{
524526
case QgsWkbTypes::Point:
525527
geomType = QStringLiteral( "POINT" );
@@ -540,13 +542,31 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
540542
geomType = QStringLiteral( "MULTIPOLYGON" );
541543
break;
542544
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() ) ) );
544546
break;
545547
};
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 );
550570

551571
// create spatial index
552572
QString sqlCreateIndex = QStringLiteral( "SELECT CreateSpatialIndex('%1', 'Geometry')" ).arg( tableName );

0 commit comments

Comments
 (0)