mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
SL provider: convert geometries to multipart when necessary (fix #6257)
This commit is contained in:
parent
e1697359d1
commit
1bde6c58df
@ -3720,6 +3720,49 @@ void QgsSpatiaLiteProvider::uniqueValues( int index, QList < QVariant > &uniqueV
|
||||
return;
|
||||
}
|
||||
|
||||
QString QgsSpatiaLiteProvider::geomParam() const
|
||||
{
|
||||
QString geometry;
|
||||
|
||||
bool forceMulti = false;
|
||||
|
||||
switch ( geometryType() )
|
||||
{
|
||||
case QGis::WKBPoint:
|
||||
case QGis::WKBLineString:
|
||||
case QGis::WKBPolygon:
|
||||
case QGis::WKBPoint25D:
|
||||
case QGis::WKBLineString25D:
|
||||
case QGis::WKBPolygon25D:
|
||||
case QGis::WKBUnknown:
|
||||
case QGis::WKBNoGeometry:
|
||||
forceMulti = false;
|
||||
break;
|
||||
|
||||
case QGis::WKBMultiPoint:
|
||||
case QGis::WKBMultiLineString:
|
||||
case QGis::WKBMultiPolygon:
|
||||
case QGis::WKBMultiPoint25D:
|
||||
case QGis::WKBMultiLineString25D:
|
||||
case QGis::WKBMultiPolygon25D:
|
||||
forceMulti = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( forceMulti )
|
||||
{
|
||||
geometry += "ST_Multi(";
|
||||
}
|
||||
|
||||
geometry += QString( "GeomFromWKB(?, %2)" ).arg( mSrid );
|
||||
|
||||
if ( forceMulti )
|
||||
{
|
||||
geometry += ")";
|
||||
}
|
||||
|
||||
return geometry;
|
||||
}
|
||||
|
||||
bool QgsSpatiaLiteProvider::addFeatures( QgsFeatureList & flist )
|
||||
{
|
||||
@ -3750,7 +3793,7 @@ bool QgsSpatiaLiteProvider::addFeatures( QgsFeatureList & flist )
|
||||
if ( !mGeometryColumn.isNull() )
|
||||
{
|
||||
sql += separator + quotedIdentifier( mGeometryColumn );
|
||||
values += separator + QString( "GeomFromWKB(?, %2)" ).arg( mSrid );
|
||||
values += separator + geomParam();
|
||||
separator = ",";
|
||||
}
|
||||
|
||||
|
@ -286,6 +286,8 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
|
||||
/** convert a QgsField to work with SL */
|
||||
static bool convertField( QgsField &field );
|
||||
|
||||
QString geomParam() const;
|
||||
|
||||
QgsFieldMap attributeFields;
|
||||
/**
|
||||
* Flag indicating if the layer data source is a valid SpatiaLite layer
|
||||
|
Loading…
x
Reference in New Issue
Block a user