QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
qgswkbtypes.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgswkbtypes.cpp
3  ---------------
4  begin : January 2015
5  copyright : (C) 2015 by Marco Hugentobler
6  email : marco at sourcepole dot ch
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgswkbtypes.h"
19 
20 /***************************************************************************
21  * This class is considered CRITICAL and any change MUST be accompanied with
22  * full unit tests.
23  * See details in QEP #17
24  ****************************************************************************/
25 
26 
27 struct WkbEntry
28 {
29  WkbEntry( const QString &name, bool isMultiType, QgsWkbTypes::Type multiType, QgsWkbTypes::Type singleType, QgsWkbTypes::Type flatType, QgsWkbTypes::GeometryType geometryType,
30  bool hasZ, bool hasM )
31  : mName( name )
32  , mIsMultiType( isMultiType )
33  , mMultiType( multiType )
34  , mSingleType( singleType )
35  , mFlatType( flatType )
36  , mGeometryType( geometryType )
37  , mHasZ( hasZ )
38  , mHasM( hasM )
39  {}
40  QString mName;
46  bool mHasZ;
47  bool mHasM;
48 };
49 
50 typedef QMap<QgsWkbTypes::Type, WkbEntry> WkbEntries;
51 
53 {
54  //register the known wkb types
57  //point
63  //linestring
69  //circularstring
74  //compoundcurve
79  //polygon
85  //triangle
90  //curvepolygon
95  //multipoint
101  //multiline
107  //multicurve
112  //multipolygon
118  //multisurface
123  //geometrycollection
128 } ) )
129 
130 QgsWkbTypes::Type QgsWkbTypes::parseType( const QString &wktStr )
131 {
132  QString typestr = wktStr.left( wktStr.indexOf( '(' ) ).simplified().remove( ' ' );
133 
134  QMap<QgsWkbTypes::Type, WkbEntry>::const_iterator it = sWkbEntries()->constBegin();
135  for ( ; it != sWkbEntries()->constEnd(); ++it )
136  {
137  if ( it.value().mName.compare( typestr, Qt::CaseInsensitive ) == 0 )
138  {
139  return it.key();
140  }
141  }
142  return Unknown;
143 }
144 
146 {
147  QMap< Type, WkbEntry >::const_iterator it = sWkbEntries()->constFind( type );
148  if ( it == sWkbEntries()->constEnd() )
149  {
150  return QString();
151  }
152  return it->mName;
153 }
154 
156 {
157 
158  switch ( type )
159  {
160  case PointGeometry:
161  return QStringLiteral( "Point" );
162  case LineGeometry:
163  return QStringLiteral( "Line" );
164  case PolygonGeometry:
165  return QStringLiteral( "Polygon" );
166  case UnknownGeometry:
167  return QStringLiteral( "Unknown geometry" );
168  case NullGeometry:
169  return QStringLiteral( "No geometry" );
170  default:
171  return QStringLiteral( "Invalid type" );
172  }
173 
174 
175 }
176 
177 /***************************************************************************
178  * This class is considered CRITICAL and any change MUST be accompanied with
179  * full unit tests.
180  * See details in QEP #17
181  ****************************************************************************/
bool mHasZ
Definition: qgswkbtypes.cpp:46
static Type parseType(const QString &wktStr)
Attempts to extract the WKB type from a WKT string.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:68
bool mIsMultiType
Definition: qgswkbtypes.cpp:41
static QString geometryDisplayString(GeometryType type)
Returns a display string for a geometry type.
QString mName
Definition: qgswkbtypes.cpp:40
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Definition: qgswkbtypes.h:139
bool mHasM
Definition: qgswkbtypes.cpp:47
QgsWkbTypes::Type mSingleType
Definition: qgswkbtypes.cpp:43
QgsWkbTypes::Type mFlatType
Definition: qgswkbtypes.cpp:44
static QString displayString(Type type)
Returns a display string type for a WKB type, e.g., the geometry name used in WKT geometry representa...
QgsWkbTypes::GeometryType mGeometryType
Definition: qgswkbtypes.cpp:45
QgsWkbTypes::Type mMultiType
Definition: qgswkbtypes.cpp:42
QMap< QgsWkbTypes::Type, WkbEntry > WkbEntries
Definition: qgswkbtypes.cpp:50
Q_GLOBAL_STATIC_WITH_ARGS(WkbEntries, sWkbEntries,({ { QgsWkbTypes::Unknown, WkbEntry(QLatin1String("Unknown"), false, QgsWkbTypes::Unknown, QgsWkbTypes::Unknown, QgsWkbTypes::Unknown, QgsWkbTypes::UnknownGeometry, false, false) }, { QgsWkbTypes::NoGeometry, WkbEntry(QLatin1String("NoGeometry"), false, QgsWkbTypes::NoGeometry, QgsWkbTypes::NoGeometry, QgsWkbTypes::NoGeometry, QgsWkbTypes::NullGeometry, false, false) }, {QgsWkbTypes::Point, WkbEntry(QLatin1String("Point"), false, QgsWkbTypes::MultiPoint, QgsWkbTypes::Point, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, false, false) }, {QgsWkbTypes::PointZ, WkbEntry(QLatin1String("PointZ"), false, QgsWkbTypes::MultiPointZ, QgsWkbTypes::PointZ, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, true, false) }, {QgsWkbTypes::PointM, WkbEntry(QLatin1String("PointM"), false, QgsWkbTypes::MultiPointM, QgsWkbTypes::PointM, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, false, true) }, {QgsWkbTypes::PointZM, WkbEntry(QLatin1String("PointZM"), false, QgsWkbTypes::MultiPointZM, QgsWkbTypes::PointZM, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, true, true) }, {QgsWkbTypes::Point25D, WkbEntry(QLatin1String("Point25D"), false, QgsWkbTypes::MultiPoint25D, QgsWkbTypes::Point25D, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, true, false) }, { QgsWkbTypes::LineString, WkbEntry(QLatin1String("LineString"), false, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineString, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, false, false) }, { QgsWkbTypes::LineStringZ, WkbEntry(QLatin1String("LineStringZ"), false, QgsWkbTypes::MultiLineStringZ, QgsWkbTypes::LineStringZ, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::LineStringM, WkbEntry(QLatin1String("LineStringM"), false, QgsWkbTypes::MultiLineStringM, QgsWkbTypes::LineStringM, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, false, true) }, { QgsWkbTypes::LineStringZM, WkbEntry(QLatin1String("LineStringZM"), false, QgsWkbTypes::MultiLineStringZM, QgsWkbTypes::LineStringZM, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, true, true) }, { QgsWkbTypes::LineString25D, WkbEntry(QLatin1String("LineString25D"), false, QgsWkbTypes::MultiLineString25D, QgsWkbTypes::LineString25D, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::CircularString, WkbEntry(QLatin1String("CircularString"), false, QgsWkbTypes::MultiCurve, QgsWkbTypes::CircularString, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, false, false) }, { QgsWkbTypes::CircularStringZ, WkbEntry(QLatin1String("CircularStringZ"), false, QgsWkbTypes::MultiCurveZ, QgsWkbTypes::CircularStringZ, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::CircularStringM, WkbEntry(QLatin1String("CircularStringM"), false, QgsWkbTypes::MultiCurveM, QgsWkbTypes::CircularStringM, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, false, true) }, { QgsWkbTypes::CircularStringZM, WkbEntry(QLatin1String("CircularStringZM"), false, QgsWkbTypes::MultiCurveZM, QgsWkbTypes::CircularStringZM, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, true, true) }, { QgsWkbTypes::CompoundCurve, WkbEntry(QLatin1String("CompoundCurve"), false, QgsWkbTypes::MultiCurve, QgsWkbTypes::CompoundCurve, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, false, false) }, { QgsWkbTypes::CompoundCurveZ, WkbEntry(QLatin1String("CompoundCurveZ"), false, QgsWkbTypes::MultiCurveZ, QgsWkbTypes::CompoundCurveZ, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::CompoundCurveM, WkbEntry(QLatin1String("CompoundCurveM"), false, QgsWkbTypes::MultiCurveM, QgsWkbTypes::CompoundCurveM, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, false, true) }, { QgsWkbTypes::CompoundCurveZM, WkbEntry(QLatin1String("CompoundCurveZM"), false, QgsWkbTypes::MultiCurveZM, QgsWkbTypes::CompoundCurveZM, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, true, true) }, { QgsWkbTypes::Polygon, WkbEntry(QLatin1String("Polygon"), false, QgsWkbTypes::MultiPolygon, QgsWkbTypes::Polygon, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, false, false) }, { QgsWkbTypes::PolygonZ, WkbEntry(QLatin1String("PolygonZ"), false, QgsWkbTypes::MultiPolygonZ, QgsWkbTypes::PolygonZ, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::PolygonM, WkbEntry(QLatin1String("PolygonM"), false, QgsWkbTypes::MultiPolygonM, QgsWkbTypes::PolygonM, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, false, true) }, { QgsWkbTypes::PolygonZM, WkbEntry(QLatin1String("PolygonZM"), false, QgsWkbTypes::MultiPolygonZM, QgsWkbTypes::PolygonZM, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, true, true) }, { QgsWkbTypes::Polygon25D, WkbEntry(QLatin1String("Polygon25D"), false, QgsWkbTypes::MultiPolygon25D, QgsWkbTypes::Polygon25D, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::Triangle, WkbEntry(QLatin1String("Triangle"), false, QgsWkbTypes::Unknown, QgsWkbTypes::Triangle, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, false, false) }, { QgsWkbTypes::TriangleZ, WkbEntry(QLatin1String("TriangleZ"), false, QgsWkbTypes::Unknown, QgsWkbTypes::TriangleZ, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::TriangleM, WkbEntry(QLatin1String("TriangleM"), false, QgsWkbTypes::Unknown, QgsWkbTypes::TriangleM, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, false, true) }, { QgsWkbTypes::TriangleZM, WkbEntry(QLatin1String("TriangleZM"), false, QgsWkbTypes::Unknown, QgsWkbTypes::TriangleZM, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, true, true) }, { QgsWkbTypes::CurvePolygon, WkbEntry(QLatin1String("CurvePolygon"), false, QgsWkbTypes::MultiSurface, QgsWkbTypes::CurvePolygon, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, false, false) }, { QgsWkbTypes::CurvePolygonZ, WkbEntry(QLatin1String("CurvePolygonZ"), false, QgsWkbTypes::MultiSurfaceZ, QgsWkbTypes::CurvePolygonZ, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::CurvePolygonM, WkbEntry(QLatin1String("CurvePolygonM"), false, QgsWkbTypes::MultiSurfaceM, QgsWkbTypes::CurvePolygonM, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, false, true) }, { QgsWkbTypes::CurvePolygonZM, WkbEntry(QLatin1String("CurvePolygonZM"), false, QgsWkbTypes::MultiSurfaceZM, QgsWkbTypes::CurvePolygonZM, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, true, true) }, { QgsWkbTypes::MultiPoint, WkbEntry(QLatin1String("MultiPoint"), true, QgsWkbTypes::MultiPoint, QgsWkbTypes::Point, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, false, false) }, { QgsWkbTypes::MultiPointZ, WkbEntry(QLatin1String("MultiPointZ"), true, QgsWkbTypes::MultiPointZ, QgsWkbTypes::PointZ, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, true, false) }, { QgsWkbTypes::MultiPointM, WkbEntry(QLatin1String("MultiPointM"), true, QgsWkbTypes::MultiPointM, QgsWkbTypes::PointM, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, false, true) }, { QgsWkbTypes::MultiPointZM, WkbEntry(QLatin1String("MultiPointZM"), true, QgsWkbTypes::MultiPointZM, QgsWkbTypes::PointZM, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, true, true) }, { QgsWkbTypes::MultiPoint25D, WkbEntry(QLatin1String("MultiPoint25D"), true, QgsWkbTypes::MultiPoint25D, QgsWkbTypes::Point25D, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, true, false) }, { QgsWkbTypes::MultiLineString, WkbEntry(QLatin1String("MultiLineString"), true, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineString, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, false, false) }, { QgsWkbTypes::MultiLineStringZ, WkbEntry(QLatin1String("MultiLineStringZ"), true, QgsWkbTypes::MultiLineStringZ, QgsWkbTypes::LineStringZ, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::MultiLineStringM, WkbEntry(QLatin1String("MultiLineStringM"), true, QgsWkbTypes::MultiLineStringM, QgsWkbTypes::LineStringM, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, false, true) }, { QgsWkbTypes::MultiLineStringZM, WkbEntry(QLatin1String("MultiLineStringZM"), true, QgsWkbTypes::MultiLineStringZM, QgsWkbTypes::LineStringZM, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, true, true) }, { QgsWkbTypes::MultiLineString25D, WkbEntry(QLatin1String("MultiLineString25D"), true, QgsWkbTypes::MultiLineString25D, QgsWkbTypes::LineString25D, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::MultiCurve, WkbEntry(QLatin1String("MultiCurve"), true, QgsWkbTypes::MultiCurve, QgsWkbTypes::CompoundCurve, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, false, false) }, { QgsWkbTypes::MultiCurveZ, WkbEntry(QLatin1String("MultiCurveZ"), true, QgsWkbTypes::MultiCurveZ, QgsWkbTypes::CompoundCurveZ, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, true, false) }, { QgsWkbTypes::MultiCurveM, WkbEntry(QLatin1String("MultiCurveM"), true, QgsWkbTypes::MultiCurveM, QgsWkbTypes::CompoundCurveM, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, false, true) }, { QgsWkbTypes::MultiCurveZM, WkbEntry(QLatin1String("MultiCurveZM"), true, QgsWkbTypes::MultiCurveZM, QgsWkbTypes::CompoundCurveZM, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, true, true) }, { QgsWkbTypes::MultiPolygon, WkbEntry(QLatin1String("MultiPolygon"), true, QgsWkbTypes::MultiPolygon, QgsWkbTypes::Polygon, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, false, false) }, { QgsWkbTypes::MultiPolygonZ, WkbEntry(QLatin1String("MultiPolygonZ"), true, QgsWkbTypes::MultiPolygonZ, QgsWkbTypes::PolygonZ, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::MultiPolygonM, WkbEntry(QLatin1String("MultiPolygonM"), true, QgsWkbTypes::MultiPolygonM, QgsWkbTypes::PolygonM, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, false, true) }, { QgsWkbTypes::MultiPolygonZM, WkbEntry(QLatin1String("MultiPolygonZM"), true, QgsWkbTypes::MultiPolygonZM, QgsWkbTypes::PolygonZM, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, true, true) }, { QgsWkbTypes::MultiPolygon25D, WkbEntry(QLatin1String("MultiPolygon25D"), true, QgsWkbTypes::MultiPolygon25D, QgsWkbTypes::Polygon25D, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::MultiSurface, WkbEntry(QLatin1String("MultiSurface"), true, QgsWkbTypes::MultiSurface, QgsWkbTypes::CurvePolygon, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, false, false) }, { QgsWkbTypes::MultiSurfaceZ, WkbEntry(QLatin1String("MultiSurfaceZ"), true, QgsWkbTypes::MultiSurfaceZ, QgsWkbTypes::CurvePolygonZ, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, true, false) }, { QgsWkbTypes::MultiSurfaceM, WkbEntry(QLatin1String("MultiSurfaceM"), true, QgsWkbTypes::MultiSurfaceM, QgsWkbTypes::CurvePolygonM, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, false, true) }, { QgsWkbTypes::MultiSurfaceZM, WkbEntry(QLatin1String("MultiSurfaceZM"), true, QgsWkbTypes::MultiSurfaceZM, QgsWkbTypes::CurvePolygonZM, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, true, true) }, { QgsWkbTypes::GeometryCollection, WkbEntry(QLatin1String("GeometryCollection"), true, QgsWkbTypes::GeometryCollection, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, false, false) }, { QgsWkbTypes::GeometryCollectionZ, WkbEntry(QLatin1String("GeometryCollectionZ"), true, QgsWkbTypes::GeometryCollectionZ, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, true, false) }, { QgsWkbTypes::GeometryCollectionM, WkbEntry(QLatin1String("GeometryCollectionM"), true, QgsWkbTypes::GeometryCollectionM, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, false, true) }, { QgsWkbTypes::GeometryCollectionZM, WkbEntry(QLatin1String("GeometryCollectionZM"), true, QgsWkbTypes::GeometryCollectionZM, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, true, true) }, })) QgsWkbTypes
Definition: qgswkbtypes.cpp:52
WkbEntry(const QString &name, bool isMultiType, QgsWkbTypes::Type multiType, QgsWkbTypes::Type singleType, QgsWkbTypes::Type flatType, QgsWkbTypes::GeometryType geometryType, bool hasZ, bool hasM)
Definition: qgswkbtypes.cpp:29