Skip to content

Commit 08e844f

Browse files
committed
create multipart layers whether the input is a singlepart shapefile (fix #5547)
1 parent 796a15a commit 08e844f

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

src/core/qgsvectorlayerimport.cpp

+30-2
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,41 @@ QgsVectorLayerImport::importLayer( QgsVectorLayer* layer,
204204
}
205205

206206
QgsFieldMap fields = skipAttributeCreation ? QgsFieldMap() : layer->pendingFields();
207+
QGis::WkbType wkbType = layer->wkbType();
208+
209+
// Special handling for Shapefiles
207210
if ( layer->providerType() == "ogr" && layer->storageType() == "ESRI Shapefile" )
208211
{
209212
// convert field names to lowercase
210213
for ( QgsFieldMap::iterator fldIt = fields.begin(); fldIt != fields.end(); ++fldIt )
211214
{
212215
fldIt.value().setName( fldIt.value().name().toLower() );
213216
}
217+
218+
// convert wkbtype to multipart (see #5547)
219+
switch ( wkbType )
220+
{
221+
case QGis::WKBPoint:
222+
wkbType = QGis::WKBMultiPoint;
223+
break;
224+
case QGis::WKBLineString:
225+
wkbType = QGis::WKBMultiLineString;
226+
break;
227+
case QGis::WKBPolygon:
228+
wkbType = QGis::WKBMultiPolygon;
229+
break;
230+
case QGis::WKBPoint25D:
231+
wkbType = QGis::WKBMultiPoint25D;
232+
break;
233+
case QGis::WKBLineString25D:
234+
wkbType = QGis::WKBMultiLineString25D;
235+
break;
236+
case QGis::WKBPolygon25D:
237+
wkbType = QGis::WKBMultiPolygon25D;
238+
break;
239+
default:
240+
break;
241+
}
214242
}
215243

216244
bool overwrite = false;
@@ -220,7 +248,7 @@ QgsVectorLayerImport::importLayer( QgsVectorLayer* layer,
220248
}
221249

222250
QgsVectorLayerImport * writer =
223-
new QgsVectorLayerImport( uri, providerKey, fields, layer->wkbType(), outputCRS, overwrite, options );
251+
new QgsVectorLayerImport( uri, providerKey, fields, wkbType, outputCRS, overwrite, options );
224252

225253
// check whether file creation was successful
226254
ImportError err = writer->hasError();
@@ -240,7 +268,7 @@ QgsVectorLayerImport::importLayer( QgsVectorLayer* layer,
240268
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->pendingAllAttributesList();
241269
QgsFeature fet;
242270

243-
layer->select( allAttr, QgsRectangle(), layer->wkbType() != QGis::WKBNoGeometry );
271+
layer->select( allAttr, QgsRectangle(), wkbType != QGis::WKBNoGeometry );
244272

245273
const QgsFeatureIds& ids = layer->selectedFeaturesIds();
246274

0 commit comments

Comments
 (0)