Skip to content

Commit 4aaa652

Browse files
authored
Merge pull request #6870 from m-kuhn/offlineediting_zm
[FEATURE] Offline editing support for Z and M coordinates
2 parents c1552e7 + fb14214 commit 4aaa652

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

src/core/qgsofflineediting.cpp

+26-10
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,6 @@ extern "C"
4848
#include <spatialite.h>
4949
}
5050

51-
// TODO: DEBUG
52-
#include <QDebug>
53-
// END
54-
5551
#define CUSTOM_PROPERTY_IS_OFFLINE_EDITABLE "isOfflineEditable"
5652
#define CUSTOM_PROPERTY_REMOTE_SOURCE "remoteSource"
5753
#define CUSTOM_PROPERTY_REMOTE_PROVIDER "remoteProvider"
@@ -518,8 +514,10 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
518514
// add geometry column
519515
if ( layer->isSpatial() )
520516
{
517+
const QgsWkbTypes::Type sourceWkbType = layer->wkbType();
518+
521519
QString geomType;
522-
switch ( layer->wkbType() )
520+
switch ( QgsWkbTypes::flatType( sourceWkbType ) )
523521
{
524522
case QgsWkbTypes::Point:
525523
geomType = QStringLiteral( "POINT" );
@@ -540,13 +538,31 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
540538
geomType = QStringLiteral( "MULTIPOLYGON" );
541539
break;
542540
default:
543-
showWarning( tr( "QGIS wkbType %1 not supported" ).arg( layer->wkbType() ) );
541+
showWarning( tr( "Layer %1 has unsupported geometry type %2." ).arg( layer->name(), QgsWkbTypes::displayString( layer->wkbType() ) ) );
544542
break;
545543
};
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 );
544+
545+
QString zmInfo = QStringLiteral( "XY" );
546+
547+
if ( QgsWkbTypes::hasZ( sourceWkbType ) )
548+
zmInfo += 'Z';
549+
if ( QgsWkbTypes::hasM( sourceWkbType ) )
550+
zmInfo += 'M';
551+
552+
QString epsgCode;
553+
554+
if ( layer->crs().authid().startsWith( QLatin1String( "EPSG:" ), Qt::CaseInsensitive ) )
555+
{
556+
epsgCode = layer->crs().authid().mid( 5 );
557+
}
558+
else
559+
{
560+
epsgCode = '0';
561+
showWarning( tr( "Layer %1 has unsupported Coordinate Reference System (%2)." ).arg( layer->name(), layer->crs().authid() ) );
562+
}
563+
564+
QString sqlAddGeom = QStringLiteral( "SELECT AddGeometryColumn('%1', 'Geometry', %2, '%3', '%4')" )
565+
.arg( tableName, epsgCode, geomType, zmInfo );
550566

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

0 commit comments

Comments
 (0)