Skip to content

Commit 1bde6c5

Browse files
committedDec 5, 2012
SL provider: convert geometries to multipart when necessary (fix #6257)
1 parent e169735 commit 1bde6c5

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed
 

‎src/providers/spatialite/qgsspatialiteprovider.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3720,6 +3720,49 @@ void QgsSpatiaLiteProvider::uniqueValues( int index, QList < QVariant > &uniqueV
37203720
return;
37213721
}
37223722

3723+
QString QgsSpatiaLiteProvider::geomParam() const
3724+
{
3725+
QString geometry;
3726+
3727+
bool forceMulti = false;
3728+
3729+
switch ( geometryType() )
3730+
{
3731+
case QGis::WKBPoint:
3732+
case QGis::WKBLineString:
3733+
case QGis::WKBPolygon:
3734+
case QGis::WKBPoint25D:
3735+
case QGis::WKBLineString25D:
3736+
case QGis::WKBPolygon25D:
3737+
case QGis::WKBUnknown:
3738+
case QGis::WKBNoGeometry:
3739+
forceMulti = false;
3740+
break;
3741+
3742+
case QGis::WKBMultiPoint:
3743+
case QGis::WKBMultiLineString:
3744+
case QGis::WKBMultiPolygon:
3745+
case QGis::WKBMultiPoint25D:
3746+
case QGis::WKBMultiLineString25D:
3747+
case QGis::WKBMultiPolygon25D:
3748+
forceMulti = true;
3749+
break;
3750+
}
3751+
3752+
if ( forceMulti )
3753+
{
3754+
geometry += "ST_Multi(";
3755+
}
3756+
3757+
geometry += QString( "GeomFromWKB(?, %2)" ).arg( mSrid );
3758+
3759+
if ( forceMulti )
3760+
{
3761+
geometry += ")";
3762+
}
3763+
3764+
return geometry;
3765+
}
37233766

37243767
bool QgsSpatiaLiteProvider::addFeatures( QgsFeatureList & flist )
37253768
{
@@ -3750,7 +3793,7 @@ bool QgsSpatiaLiteProvider::addFeatures( QgsFeatureList & flist )
37503793
if ( !mGeometryColumn.isNull() )
37513794
{
37523795
sql += separator + quotedIdentifier( mGeometryColumn );
3753-
values += separator + QString( "GeomFromWKB(?, %2)" ).arg( mSrid );
3796+
values += separator + geomParam();
37543797
separator = ",";
37553798
}
37563799

‎src/providers/spatialite/qgsspatialiteprovider.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,8 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
286286
/** convert a QgsField to work with SL */
287287
static bool convertField( QgsField &field );
288288

289+
QString geomParam() const;
290+
289291
QgsFieldMap attributeFields;
290292
/**
291293
* Flag indicating if the layer data source is a valid SpatiaLite layer

0 commit comments

Comments
 (0)
Please sign in to comment.