Skip to content

Commit f290109

Browse files
committedDec 9, 2017
Fix and update mapping of ogr wkt types to QGIS wkb types
1 parent 6ed44ff commit f290109

File tree

3 files changed

+301
-55
lines changed

3 files changed

+301
-55
lines changed
 

‎src/providers/ogr/qgsogrdataitems.cpp

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -361,34 +361,23 @@ static QgsOgrLayerItem *dataItemForLayer( QgsDataItem *parentItem, QString name,
361361

362362
QgsLayerItem::LayerType layerType = QgsLayerItem::Vector;
363363
OGRwkbGeometryType ogrType = QgsOgrProvider::getOgrGeomType( hLayer );
364-
switch ( ogrType )
364+
QgsWkbTypes::Type wkbType = QgsOgrProviderUtils::qgisTypeFromOgrType( ogrType );
365+
switch ( QgsWkbTypes::geometryType( wkbType ) )
365366
{
366-
case wkbUnknown:
367-
case wkbGeometryCollection:
367+
case QgsWkbTypes::UnknownGeometry:
368368
break;
369-
case wkbNone:
369+
case QgsWkbTypes::NullGeometry:
370370
layerType = QgsLayerItem::TableLayer;
371371
break;
372-
case wkbPoint:
373-
case wkbMultiPoint:
374-
case wkbPoint25D:
375-
case wkbMultiPoint25D:
372+
case QgsWkbTypes::PointGeometry:
376373
layerType = QgsLayerItem::Point;
377374
break;
378-
case wkbLineString:
379-
case wkbMultiLineString:
380-
case wkbLineString25D:
381-
case wkbMultiLineString25D:
375+
case QgsWkbTypes::LineGeometry:
382376
layerType = QgsLayerItem::Line;
383377
break;
384-
case wkbPolygon:
385-
case wkbMultiPolygon:
386-
case wkbPolygon25D:
387-
case wkbMultiPolygon25D:
378+
case QgsWkbTypes::PolygonGeometry:
388379
layerType = QgsLayerItem::Polygon;
389380
break;
390-
default:
391-
break;
392381
}
393382

394383
QgsDebugMsgLevel( QString( "ogrType = %1 layertype = %2" ).arg( ogrType ).arg( layerType ), 2 );

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 287 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2993,47 +2993,18 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
29932993
OGRwkbGeometryType OGRvectortype = wkbUnknown;
29942994
switch ( vectortype )
29952995
{
2996-
case QgsWkbTypes::Point:
2997-
OGRvectortype = wkbPoint;
2998-
break;
2999-
case QgsWkbTypes::Point25D:
3000-
OGRvectortype = wkbPoint25D;
3001-
break;
3002-
case QgsWkbTypes::LineString:
3003-
OGRvectortype = wkbLineString;
3004-
break;
3005-
case QgsWkbTypes::LineString25D:
3006-
OGRvectortype = wkbLineString25D;
3007-
break;
3008-
case QgsWkbTypes::Polygon:
3009-
OGRvectortype = wkbPolygon;
3010-
break;
3011-
case QgsWkbTypes::Polygon25D:
3012-
OGRvectortype = wkbPolygon25D;
3013-
break;
3014-
case QgsWkbTypes::MultiPoint:
3015-
OGRvectortype = wkbMultiPoint;
3016-
break;
3017-
case QgsWkbTypes::MultiPoint25D:
3018-
OGRvectortype = wkbMultiPoint25D;
3019-
break;
3020-
case QgsWkbTypes::MultiLineString:
3021-
OGRvectortype = wkbMultiLineString;
3022-
break;
3023-
case QgsWkbTypes::MultiLineString25D:
3024-
OGRvectortype = wkbMultiLineString25D;
3025-
break;
3026-
case QgsWkbTypes::MultiPolygon:
3027-
OGRvectortype = wkbMultiPolygon;
3028-
break;
3029-
case QgsWkbTypes::MultiPolygon25D:
3030-
OGRvectortype = wkbMultiPolygon25D;
3031-
break;
3032-
default:
2996+
case QgsWkbTypes::GeometryCollection:
2997+
case QgsWkbTypes::GeometryCollectionZ:
2998+
case QgsWkbTypes::GeometryCollectionM:
2999+
case QgsWkbTypes::GeometryCollectionZM:
3000+
case QgsWkbTypes::Unknown:
30333001
{
30343002
QgsMessageLog::logMessage( QObject::tr( "Unknown vector type of %1" ).arg( ( int )( vectortype ) ), QObject::tr( "OGR" ) );
30353003
return false;
30363004
}
3005+
3006+
default:
3007+
OGRvectortype = QgsOgrProviderUtils::ogrTypeFromQgisType( vectortype );
30373008
}
30383009

30393010
char **papszOptions = nullptr;
@@ -4390,6 +4361,285 @@ void QgsOgrProviderUtils::invalidateCachedLastModifiedDate( const QString &dsNam
43904361
}
43914362
}
43924363

4364+
OGRwkbGeometryType QgsOgrProviderUtils::ogrTypeFromQgisType( QgsWkbTypes::Type type )
4365+
{
4366+
switch ( type )
4367+
{
4368+
case QgsWkbTypes::Point:
4369+
return wkbPoint;
4370+
case QgsWkbTypes::Point25D:
4371+
case QgsWkbTypes::PointZ:
4372+
return wkbPoint25D;
4373+
case QgsWkbTypes::PointM:
4374+
return wkbPointM;
4375+
case QgsWkbTypes::PointZM:
4376+
return wkbPointZM;
4377+
4378+
case QgsWkbTypes::LineString:
4379+
return wkbLineString;
4380+
case QgsWkbTypes::LineString25D:
4381+
case QgsWkbTypes::LineStringZ:
4382+
return wkbLineString25D;
4383+
case QgsWkbTypes::LineStringM:
4384+
return wkbLineStringM;
4385+
case QgsWkbTypes::LineStringZM:
4386+
return wkbLineStringZM;
4387+
4388+
case QgsWkbTypes::Polygon:
4389+
return wkbPolygon;
4390+
case QgsWkbTypes::Polygon25D:
4391+
case QgsWkbTypes::PolygonZ:
4392+
return wkbPolygon25D;
4393+
case QgsWkbTypes::PolygonM:
4394+
return wkbPolygonM;
4395+
case QgsWkbTypes::PolygonZM:
4396+
return wkbPolygonZM;
4397+
4398+
case QgsWkbTypes::MultiPoint:
4399+
return wkbMultiPoint;
4400+
case QgsWkbTypes::MultiPoint25D:
4401+
case QgsWkbTypes::MultiPointZ:
4402+
return wkbMultiPoint25D;
4403+
case QgsWkbTypes::MultiPointM:
4404+
return wkbMultiPointM;
4405+
case QgsWkbTypes::MultiPointZM:
4406+
return wkbMultiPointZM;
4407+
4408+
case QgsWkbTypes::MultiLineString:
4409+
return wkbMultiLineString;
4410+
case QgsWkbTypes::MultiLineString25D:
4411+
case QgsWkbTypes::MultiLineStringZ:
4412+
return wkbMultiLineString25D;
4413+
case QgsWkbTypes::MultiLineStringM:
4414+
return wkbMultiLineStringM;
4415+
case QgsWkbTypes::MultiLineStringZM:
4416+
return wkbMultiLineStringZM;
4417+
4418+
case QgsWkbTypes::MultiPolygon:
4419+
return wkbMultiPolygon;
4420+
case QgsWkbTypes::MultiPolygon25D:
4421+
case QgsWkbTypes::MultiPolygonZ:
4422+
return wkbMultiPolygon25D;
4423+
case QgsWkbTypes::MultiPolygonM:
4424+
return wkbMultiPolygonM;
4425+
case QgsWkbTypes::MultiPolygonZM:
4426+
return wkbMultiPolygonZM;
4427+
4428+
case QgsWkbTypes::CircularString:
4429+
return wkbCircularString;
4430+
case QgsWkbTypes::CircularStringZ:
4431+
return wkbCircularStringZ;
4432+
case QgsWkbTypes::CircularStringM:
4433+
return wkbCircularStringM;
4434+
case QgsWkbTypes::CircularStringZM:
4435+
return wkbCircularStringZM;
4436+
4437+
case QgsWkbTypes::CompoundCurve:
4438+
return wkbCompoundCurve;
4439+
case QgsWkbTypes::CompoundCurveZ:
4440+
return wkbCompoundCurveZ;
4441+
case QgsWkbTypes::CompoundCurveM:
4442+
return wkbCompoundCurveM;
4443+
case QgsWkbTypes::CompoundCurveZM:
4444+
return wkbCompoundCurveZM;
4445+
4446+
case QgsWkbTypes::CurvePolygon:
4447+
return wkbCurvePolygon;
4448+
case QgsWkbTypes::CurvePolygonZ:
4449+
return wkbCurvePolygonZ;
4450+
case QgsWkbTypes::CurvePolygonM:
4451+
return wkbCurvePolygonM;
4452+
case QgsWkbTypes::CurvePolygonZM:
4453+
return wkbCurvePolygonZM;
4454+
4455+
case QgsWkbTypes::MultiCurve:
4456+
return wkbMultiCurve;
4457+
case QgsWkbTypes::MultiCurveZ:
4458+
return wkbMultiCurveZ;
4459+
case QgsWkbTypes::MultiCurveM:
4460+
return wkbMultiCurveM;
4461+
case QgsWkbTypes::MultiCurveZM:
4462+
return wkbMultiCurveZM;
4463+
4464+
case QgsWkbTypes::MultiSurface:
4465+
return wkbMultiSurface;
4466+
case QgsWkbTypes::MultiSurfaceZ:
4467+
return wkbMultiSurfaceZ;
4468+
case QgsWkbTypes::MultiSurfaceM:
4469+
return wkbMultiSurfaceM;
4470+
case QgsWkbTypes::MultiSurfaceZM:
4471+
return wkbMultiSurfaceZM;
4472+
4473+
case QgsWkbTypes::Triangle:
4474+
return wkbTriangle;
4475+
case QgsWkbTypes::TriangleZ:
4476+
return wkbTriangleZ;
4477+
case QgsWkbTypes::TriangleM:
4478+
return wkbTriangleM;
4479+
case QgsWkbTypes::TriangleZM:
4480+
return wkbTriangleZM;
4481+
4482+
case QgsWkbTypes::NoGeometry:
4483+
return wkbNone;
4484+
4485+
case QgsWkbTypes::GeometryCollection:
4486+
return wkbGeometryCollection;
4487+
case QgsWkbTypes::GeometryCollectionZ:
4488+
return wkbGeometryCollection25D;
4489+
case QgsWkbTypes::GeometryCollectionM:
4490+
return wkbGeometryCollectionM;
4491+
case QgsWkbTypes::GeometryCollectionZM:
4492+
return wkbGeometryCollectionZM;
4493+
4494+
case QgsWkbTypes::Unknown:
4495+
return wkbUnknown;
4496+
}
4497+
// no warnings!
4498+
return wkbUnknown;
4499+
}
4500+
4501+
QgsWkbTypes::Type QgsOgrProviderUtils::qgisTypeFromOgrType( OGRwkbGeometryType type )
4502+
{
4503+
switch ( type )
4504+
{
4505+
case wkbUnknown:
4506+
return QgsWkbTypes::Unknown;
4507+
4508+
case wkbPoint:
4509+
return QgsWkbTypes::Point;
4510+
case wkbLineString:
4511+
return QgsWkbTypes::LineString;
4512+
case wkbPolygon:
4513+
return QgsWkbTypes::Polygon;
4514+
case wkbMultiPoint:
4515+
return QgsWkbTypes::MultiPoint;
4516+
case wkbMultiLineString:
4517+
return QgsWkbTypes::MultiLineString;
4518+
case wkbMultiPolygon:
4519+
return QgsWkbTypes::MultiPolygon;
4520+
case wkbGeometryCollection:
4521+
return QgsWkbTypes::GeometryCollection;
4522+
case wkbCircularString:
4523+
return QgsWkbTypes::CircularString;
4524+
case wkbCompoundCurve:
4525+
return QgsWkbTypes::CompoundCurve;
4526+
case wkbCurvePolygon:
4527+
return QgsWkbTypes::CurvePolygon;
4528+
case wkbMultiCurve:
4529+
return QgsWkbTypes::MultiCurve;
4530+
case wkbMultiSurface:
4531+
return QgsWkbTypes::MultiSurface;
4532+
case wkbTriangle:
4533+
return QgsWkbTypes::Triangle;
4534+
case wkbNone:
4535+
return QgsWkbTypes::NoGeometry;
4536+
4537+
case wkbCircularStringZ:
4538+
return QgsWkbTypes::CircularStringZ;
4539+
case wkbCompoundCurveZ:
4540+
return QgsWkbTypes::CompoundCurveZ;
4541+
case wkbCurvePolygonZ:
4542+
return QgsWkbTypes::PolygonZ;
4543+
case wkbMultiCurveZ:
4544+
return QgsWkbTypes::MultiCurveZ;
4545+
case wkbMultiSurfaceZ:
4546+
return QgsWkbTypes::MultiSurfaceZ;
4547+
case wkbTriangleZ:
4548+
return QgsWkbTypes::TriangleZ;
4549+
4550+
case wkbPointM:
4551+
return QgsWkbTypes::PointM;
4552+
case wkbLineStringM:
4553+
return QgsWkbTypes::LineStringM;
4554+
case wkbPolygonM:
4555+
return QgsWkbTypes::PolygonM;
4556+
case wkbMultiPointM:
4557+
return QgsWkbTypes::PointM;
4558+
case wkbMultiLineStringM:
4559+
return QgsWkbTypes::LineStringM;
4560+
case wkbMultiPolygonM:
4561+
return QgsWkbTypes::PolygonM;
4562+
case wkbGeometryCollectionM:
4563+
return QgsWkbTypes::GeometryCollectionM;
4564+
case wkbCircularStringM:
4565+
return QgsWkbTypes::CircularStringM;
4566+
case wkbCompoundCurveM:
4567+
return QgsWkbTypes::CompoundCurveM;
4568+
case wkbCurvePolygonM:
4569+
return QgsWkbTypes::PolygonM;
4570+
case wkbMultiCurveM:
4571+
return QgsWkbTypes::MultiCurveM;
4572+
case wkbMultiSurfaceM:
4573+
return QgsWkbTypes::MultiSurfaceM;
4574+
case wkbTriangleM:
4575+
return QgsWkbTypes::TriangleM;
4576+
4577+
case wkbPointZM:
4578+
return QgsWkbTypes::PointZM;
4579+
case wkbLineStringZM:
4580+
return QgsWkbTypes::LineStringZM;
4581+
case wkbPolygonZM:
4582+
return QgsWkbTypes::PolygonZM;
4583+
case wkbMultiPointZM:
4584+
return QgsWkbTypes::MultiPointZM;
4585+
case wkbMultiLineStringZM:
4586+
return QgsWkbTypes::MultiLineStringZM;
4587+
case wkbMultiPolygonZM:
4588+
return QgsWkbTypes::MultiPolygonZM;
4589+
case wkbGeometryCollectionZM:
4590+
return QgsWkbTypes::GeometryCollectionZM;
4591+
case wkbCircularStringZM:
4592+
return QgsWkbTypes::CircularStringZM;
4593+
case wkbCompoundCurveZM:
4594+
return QgsWkbTypes::CompoundCurveZM;
4595+
case wkbCurvePolygonZM:
4596+
return QgsWkbTypes::CurvePolygonZM;
4597+
case wkbMultiCurveZM:
4598+
return QgsWkbTypes::MultiCurveZM;
4599+
case wkbMultiSurfaceZM:
4600+
return QgsWkbTypes::MultiSurfaceZM;
4601+
case wkbTriangleZM:
4602+
return QgsWkbTypes::TriangleZM;
4603+
4604+
case wkbPoint25D:
4605+
return QgsWkbTypes::Point25D;
4606+
case wkbLineString25D:
4607+
return QgsWkbTypes::LineString25D;
4608+
case wkbPolygon25D:
4609+
return QgsWkbTypes::Polygon25D;
4610+
case wkbMultiPoint25D:
4611+
return QgsWkbTypes::MultiPoint25D;
4612+
case wkbMultiLineString25D:
4613+
return QgsWkbTypes::MultiLineString25D;
4614+
case wkbMultiPolygon25D:
4615+
return QgsWkbTypes::MultiPolygon25D;
4616+
case wkbGeometryCollection25D:
4617+
return QgsWkbTypes::GeometryCollectionZ;
4618+
4619+
case wkbCurve:
4620+
case wkbSurface:
4621+
case wkbCurveZ:
4622+
case wkbSurfaceZ:
4623+
case wkbCurveM:
4624+
case wkbSurfaceM:
4625+
case wkbCurveZM:
4626+
case wkbSurfaceZM:
4627+
return QgsWkbTypes::Unknown; // abstract types - no direct mapping to QGIS types
4628+
4629+
case wkbLinearRing:
4630+
case wkbTIN:
4631+
case wkbTINZ:
4632+
case wkbTINM:
4633+
case wkbTINZM:
4634+
case wkbPolyhedralSurface:
4635+
case wkbPolyhedralSurfaceZ:
4636+
case wkbPolyhedralSurfaceM:
4637+
case wkbPolyhedralSurfaceZM:
4638+
return QgsWkbTypes::Unknown; // unsupported types
4639+
}
4640+
return QgsWkbTypes::Unknown;
4641+
}
4642+
43934643

43944644
QString QgsOgrProviderUtils::expandAuthConfig( const QString &dsName )
43954645
{

‎src/providers/ogr/qgsogrprovider.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,13 @@ class QgsOgrProviderUtils
421421

422422
//! Invalidate the cached last modified date of a dataset
423423
static void invalidateCachedLastModifiedDate( const QString &dsName );
424+
425+
//! Converts a QGIS WKB type to the corresponding OGR wkb type
426+
static OGRwkbGeometryType ogrTypeFromQgisType( QgsWkbTypes::Type type );
427+
428+
//! Converts a OGR WKB type to the corresponding QGIS wkb type
429+
static QgsWkbTypes::Type qgisTypeFromOgrType( OGRwkbGeometryType type );
430+
424431
};
425432

426433

0 commit comments

Comments
 (0)
Please sign in to comment.