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 {
WkbEntryWkbEntry29 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;
41 bool mIsMultiType;
42 QgsWkbTypes::Type mMultiType;
43 QgsWkbTypes::Type mSingleType;
44 QgsWkbTypes::Type mFlatType;
45 QgsWkbTypes::GeometryType mGeometryType;
46 bool mHasZ;
47 bool mHasM;
48 };
49
50 typedef QMap<QgsWkbTypes::Type, WkbEntry> WkbEntries;
51
52 Q_GLOBAL_STATIC_WITH_ARGS( WkbEntries, sWkbEntries, (
53 {
54 //register the known wkb types
55 { QgsWkbTypes::Unknown, WkbEntry( QLatin1String( "Unknown" ), false, QgsWkbTypes::Unknown, QgsWkbTypes::Unknown, QgsWkbTypes::Unknown, QgsWkbTypes::UnknownGeometry, false, false ) },
56 { QgsWkbTypes::NoGeometry, WkbEntry( QLatin1String( "NoGeometry" ), false, QgsWkbTypes::NoGeometry, QgsWkbTypes::NoGeometry, QgsWkbTypes::NoGeometry, QgsWkbTypes::NullGeometry, false, false ) },
57 //point
58 {QgsWkbTypes::Point, WkbEntry( QLatin1String( "Point" ), false, QgsWkbTypes::MultiPoint, QgsWkbTypes::Point, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, false, false ) },
59 {QgsWkbTypes::PointZ, WkbEntry( QLatin1String( "PointZ" ), false, QgsWkbTypes::MultiPointZ, QgsWkbTypes::PointZ, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, true, false ) },
60 {QgsWkbTypes::PointM, WkbEntry( QLatin1String( "PointM" ), false, QgsWkbTypes::MultiPointM, QgsWkbTypes::PointM, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, false, true ) },
61 {QgsWkbTypes::PointZM, WkbEntry( QLatin1String( "PointZM" ), false, QgsWkbTypes::MultiPointZM, QgsWkbTypes::PointZM, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, true, true ) },
62 {QgsWkbTypes::Point25D, WkbEntry( QLatin1String( "Point25D" ), false, QgsWkbTypes::MultiPoint25D, QgsWkbTypes::Point25D, QgsWkbTypes::Point, QgsWkbTypes::PointGeometry, true, false ) },
63 //linestring
64 { QgsWkbTypes::LineString, WkbEntry( QLatin1String( "LineString" ), false, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineString, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, false, false ) },
65 { QgsWkbTypes::LineStringZ, WkbEntry( QLatin1String( "LineStringZ" ), false, QgsWkbTypes::MultiLineStringZ, QgsWkbTypes::LineStringZ, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, true, false ) },
66 { QgsWkbTypes::LineStringM, WkbEntry( QLatin1String( "LineStringM" ), false, QgsWkbTypes::MultiLineStringM, QgsWkbTypes::LineStringM, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, false, true ) },
67 { QgsWkbTypes::LineStringZM, WkbEntry( QLatin1String( "LineStringZM" ), false, QgsWkbTypes::MultiLineStringZM, QgsWkbTypes::LineStringZM, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, true, true ) },
68 { QgsWkbTypes::LineString25D, WkbEntry( QLatin1String( "LineString25D" ), false, QgsWkbTypes::MultiLineString25D, QgsWkbTypes::LineString25D, QgsWkbTypes::LineString, QgsWkbTypes::LineGeometry, true, false ) },
69 //circularstring
70 { QgsWkbTypes::CircularString, WkbEntry( QLatin1String( "CircularString" ), false, QgsWkbTypes::MultiCurve, QgsWkbTypes::CircularString, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, false, false ) },
71 { QgsWkbTypes::CircularStringZ, WkbEntry( QLatin1String( "CircularStringZ" ), false, QgsWkbTypes::MultiCurveZ, QgsWkbTypes::CircularStringZ, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, true, false ) },
72 { QgsWkbTypes::CircularStringM, WkbEntry( QLatin1String( "CircularStringM" ), false, QgsWkbTypes::MultiCurveM, QgsWkbTypes::CircularStringM, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, false, true ) },
73 { QgsWkbTypes::CircularStringZM, WkbEntry( QLatin1String( "CircularStringZM" ), false, QgsWkbTypes::MultiCurveZM, QgsWkbTypes::CircularStringZM, QgsWkbTypes::CircularString, QgsWkbTypes::LineGeometry, true, true ) },
74 //compoundcurve
75 { QgsWkbTypes::CompoundCurve, WkbEntry( QLatin1String( "CompoundCurve" ), false, QgsWkbTypes::MultiCurve, QgsWkbTypes::CompoundCurve, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, false, false ) },
76 { QgsWkbTypes::CompoundCurveZ, WkbEntry( QLatin1String( "CompoundCurveZ" ), false, QgsWkbTypes::MultiCurveZ, QgsWkbTypes::CompoundCurveZ, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, true, false ) },
77 { QgsWkbTypes::CompoundCurveM, WkbEntry( QLatin1String( "CompoundCurveM" ), false, QgsWkbTypes::MultiCurveM, QgsWkbTypes::CompoundCurveM, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, false, true ) },
78 { QgsWkbTypes::CompoundCurveZM, WkbEntry( QLatin1String( "CompoundCurveZM" ), false, QgsWkbTypes::MultiCurveZM, QgsWkbTypes::CompoundCurveZM, QgsWkbTypes::CompoundCurve, QgsWkbTypes::LineGeometry, true, true ) },
79 //polygon
80 { QgsWkbTypes::Polygon, WkbEntry( QLatin1String( "Polygon" ), false, QgsWkbTypes::MultiPolygon, QgsWkbTypes::Polygon, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, false, false ) },
81 { QgsWkbTypes::PolygonZ, WkbEntry( QLatin1String( "PolygonZ" ), false, QgsWkbTypes::MultiPolygonZ, QgsWkbTypes::PolygonZ, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, true, false ) },
82 { QgsWkbTypes::PolygonM, WkbEntry( QLatin1String( "PolygonM" ), false, QgsWkbTypes::MultiPolygonM, QgsWkbTypes::PolygonM, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, false, true ) },
83 { QgsWkbTypes::PolygonZM, WkbEntry( QLatin1String( "PolygonZM" ), false, QgsWkbTypes::MultiPolygonZM, QgsWkbTypes::PolygonZM, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, true, true ) },
84 { QgsWkbTypes::Polygon25D, WkbEntry( QLatin1String( "Polygon25D" ), false, QgsWkbTypes::MultiPolygon25D, QgsWkbTypes::Polygon25D, QgsWkbTypes::Polygon, QgsWkbTypes::PolygonGeometry, true, false ) },
85 //triangle
86 { QgsWkbTypes::Triangle, WkbEntry( QLatin1String( "Triangle" ), false, QgsWkbTypes::Unknown, QgsWkbTypes::Triangle, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, false, false ) },
87 { QgsWkbTypes::TriangleZ, WkbEntry( QLatin1String( "TriangleZ" ), false, QgsWkbTypes::Unknown, QgsWkbTypes::TriangleZ, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, true, false ) },
88 { QgsWkbTypes::TriangleM, WkbEntry( QLatin1String( "TriangleM" ), false, QgsWkbTypes::Unknown, QgsWkbTypes::TriangleM, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, false, true ) },
89 { QgsWkbTypes::TriangleZM, WkbEntry( QLatin1String( "TriangleZM" ), false, QgsWkbTypes::Unknown, QgsWkbTypes::TriangleZM, QgsWkbTypes::Triangle, QgsWkbTypes::PolygonGeometry, true, true ) },
90 //curvepolygon
91 { QgsWkbTypes::CurvePolygon, WkbEntry( QLatin1String( "CurvePolygon" ), false, QgsWkbTypes::MultiSurface, QgsWkbTypes::CurvePolygon, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, false, false ) },
92 { QgsWkbTypes::CurvePolygonZ, WkbEntry( QLatin1String( "CurvePolygonZ" ), false, QgsWkbTypes::MultiSurfaceZ, QgsWkbTypes::CurvePolygonZ, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, true, false ) },
93 { QgsWkbTypes::CurvePolygonM, WkbEntry( QLatin1String( "CurvePolygonM" ), false, QgsWkbTypes::MultiSurfaceM, QgsWkbTypes::CurvePolygonM, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, false, true ) },
94 { QgsWkbTypes::CurvePolygonZM, WkbEntry( QLatin1String( "CurvePolygonZM" ), false, QgsWkbTypes::MultiSurfaceZM, QgsWkbTypes::CurvePolygonZM, QgsWkbTypes::CurvePolygon, QgsWkbTypes::PolygonGeometry, true, true ) },
95 //multipoint
96 { QgsWkbTypes::MultiPoint, WkbEntry( QLatin1String( "MultiPoint" ), true, QgsWkbTypes::MultiPoint, QgsWkbTypes::Point, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, false, false ) },
97 { QgsWkbTypes::MultiPointZ, WkbEntry( QLatin1String( "MultiPointZ" ), true, QgsWkbTypes::MultiPointZ, QgsWkbTypes::PointZ, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, true, false ) },
98 { QgsWkbTypes::MultiPointM, WkbEntry( QLatin1String( "MultiPointM" ), true, QgsWkbTypes::MultiPointM, QgsWkbTypes::PointM, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, false, true ) },
99 { QgsWkbTypes::MultiPointZM, WkbEntry( QLatin1String( "MultiPointZM" ), true, QgsWkbTypes::MultiPointZM, QgsWkbTypes::PointZM, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, true, true ) },
100 { QgsWkbTypes::MultiPoint25D, WkbEntry( QLatin1String( "MultiPoint25D" ), true, QgsWkbTypes::MultiPoint25D, QgsWkbTypes::Point25D, QgsWkbTypes::MultiPoint, QgsWkbTypes::PointGeometry, true, false ) },
101 //multiline
102 { QgsWkbTypes::MultiLineString, WkbEntry( QLatin1String( "MultiLineString" ), true, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineString, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, false, false ) },
103 { QgsWkbTypes::MultiLineStringZ, WkbEntry( QLatin1String( "MultiLineStringZ" ), true, QgsWkbTypes::MultiLineStringZ, QgsWkbTypes::LineStringZ, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, true, false ) },
104 { QgsWkbTypes::MultiLineStringM, WkbEntry( QLatin1String( "MultiLineStringM" ), true, QgsWkbTypes::MultiLineStringM, QgsWkbTypes::LineStringM, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, false, true ) },
105 { QgsWkbTypes::MultiLineStringZM, WkbEntry( QLatin1String( "MultiLineStringZM" ), true, QgsWkbTypes::MultiLineStringZM, QgsWkbTypes::LineStringZM, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, true, true ) },
106 { QgsWkbTypes::MultiLineString25D, WkbEntry( QLatin1String( "MultiLineString25D" ), true, QgsWkbTypes::MultiLineString25D, QgsWkbTypes::LineString25D, QgsWkbTypes::MultiLineString, QgsWkbTypes::LineGeometry, true, false ) },
107 //multicurve
108 { QgsWkbTypes::MultiCurve, WkbEntry( QLatin1String( "MultiCurve" ), true, QgsWkbTypes::MultiCurve, QgsWkbTypes::CompoundCurve, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, false, false ) },
109 { QgsWkbTypes::MultiCurveZ, WkbEntry( QLatin1String( "MultiCurveZ" ), true, QgsWkbTypes::MultiCurveZ, QgsWkbTypes::CompoundCurveZ, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, true, false ) },
110 { QgsWkbTypes::MultiCurveM, WkbEntry( QLatin1String( "MultiCurveM" ), true, QgsWkbTypes::MultiCurveM, QgsWkbTypes::CompoundCurveM, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, false, true ) },
111 { QgsWkbTypes::MultiCurveZM, WkbEntry( QLatin1String( "MultiCurveZM" ), true, QgsWkbTypes::MultiCurveZM, QgsWkbTypes::CompoundCurveZM, QgsWkbTypes::MultiCurve, QgsWkbTypes::LineGeometry, true, true ) },
112 //multipolygon
113 { QgsWkbTypes::MultiPolygon, WkbEntry( QLatin1String( "MultiPolygon" ), true, QgsWkbTypes::MultiPolygon, QgsWkbTypes::Polygon, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, false, false ) },
114 { QgsWkbTypes::MultiPolygonZ, WkbEntry( QLatin1String( "MultiPolygonZ" ), true, QgsWkbTypes::MultiPolygonZ, QgsWkbTypes::PolygonZ, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, true, false ) },
115 { QgsWkbTypes::MultiPolygonM, WkbEntry( QLatin1String( "MultiPolygonM" ), true, QgsWkbTypes::MultiPolygonM, QgsWkbTypes::PolygonM, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, false, true ) },
116 { QgsWkbTypes::MultiPolygonZM, WkbEntry( QLatin1String( "MultiPolygonZM" ), true, QgsWkbTypes::MultiPolygonZM, QgsWkbTypes::PolygonZM, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, true, true ) },
117 { QgsWkbTypes::MultiPolygon25D, WkbEntry( QLatin1String( "MultiPolygon25D" ), true, QgsWkbTypes::MultiPolygon25D, QgsWkbTypes::Polygon25D, QgsWkbTypes::MultiPolygon, QgsWkbTypes::PolygonGeometry, true, false ) },
118 //multisurface
119 { QgsWkbTypes::MultiSurface, WkbEntry( QLatin1String( "MultiSurface" ), true, QgsWkbTypes::MultiSurface, QgsWkbTypes::CurvePolygon, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, false, false ) },
120 { QgsWkbTypes::MultiSurfaceZ, WkbEntry( QLatin1String( "MultiSurfaceZ" ), true, QgsWkbTypes::MultiSurfaceZ, QgsWkbTypes::CurvePolygonZ, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, true, false ) },
121 { QgsWkbTypes::MultiSurfaceM, WkbEntry( QLatin1String( "MultiSurfaceM" ), true, QgsWkbTypes::MultiSurfaceM, QgsWkbTypes::CurvePolygonM, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, false, true ) },
122 { QgsWkbTypes::MultiSurfaceZM, WkbEntry( QLatin1String( "MultiSurfaceZM" ), true, QgsWkbTypes::MultiSurfaceZM, QgsWkbTypes::CurvePolygonZM, QgsWkbTypes::MultiSurface, QgsWkbTypes::PolygonGeometry, true, true ) },
123 //geometrycollection
124 { QgsWkbTypes::GeometryCollection, WkbEntry( QLatin1String( "GeometryCollection" ), true, QgsWkbTypes::GeometryCollection, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, false, false ) },
125 { QgsWkbTypes::GeometryCollectionZ, WkbEntry( QLatin1String( "GeometryCollectionZ" ), true, QgsWkbTypes::GeometryCollectionZ, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, true, false ) },
126 { QgsWkbTypes::GeometryCollectionM, WkbEntry( QLatin1String( "GeometryCollectionM" ), true, QgsWkbTypes::GeometryCollectionM, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, false, true ) },
127 { QgsWkbTypes::GeometryCollectionZM, WkbEntry( QLatin1String( "GeometryCollectionZM" ), true, QgsWkbTypes::GeometryCollectionZM, QgsWkbTypes::Unknown, QgsWkbTypes::GeometryCollection, QgsWkbTypes::UnknownGeometry, true, true ) },
128 } ) )
129
parseType(const QString & wktStr)130 QgsWkbTypes::Type QgsWkbTypes::parseType( const QString &wktStr )
131 {
132 const 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
displayString(Type type)145 QString QgsWkbTypes::displayString( Type type )
146 {
147 const 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
translatedDisplayString(Type type)155 QString QgsWkbTypes::translatedDisplayString( Type type )
156 {
157 switch ( type )
158 {
159 case Unknown: return QObject::tr( "Unknown" );
160 case Point: return QObject::tr( "Point" );
161 case LineString: return QObject::tr( "LineString" );
162 case Polygon: return QObject::tr( "Polygon" );
163 case Triangle: return QObject::tr( "Triangle" );
164 case MultiPoint: return QObject::tr( "MultiPoint" );
165 case MultiLineString: return QObject::tr( "MultiLine" );
166 case MultiPolygon: return QObject::tr( "MultiPolygon" );
167 case GeometryCollection: return QObject::tr( "GeometryCollection" );
168 case CircularString: return QObject::tr( "CircularString" );
169 case CompoundCurve: return QObject::tr( "CompoundCurve" );
170 case CurvePolygon: return QObject::tr( "CurvePolygon" );
171 case MultiCurve: return QObject::tr( "MultiCurve" );
172 case MultiSurface: return QObject::tr( "MultiSurface" );
173 case NoGeometry: return QObject::tr( "No Geometry" );
174 case PointZ: return QObject::tr( "PointZ" );
175 case LineStringZ: return QObject::tr( "LineStringZ" );
176 case PolygonZ: return QObject::tr( "PolygonZ" );
177 case TriangleZ: return QObject::tr( "TriangleZ" );
178 case MultiPointZ: return QObject::tr( "MultiPointZ" );
179 case MultiLineStringZ: return QObject::tr( "MultiLineZ" );
180 case MultiPolygonZ: return QObject::tr( "MultiPolygonZ" );
181 case GeometryCollectionZ: return QObject::tr( "GeometryCollectionZ" );
182 case CircularStringZ: return QObject::tr( "CircularStringZ" );
183 case CompoundCurveZ: return QObject::tr( "CompoundCurveZ" );
184 case CurvePolygonZ: return QObject::tr( "CurvePolygonZ" );
185 case MultiCurveZ: return QObject::tr( "MultiCurveZ" );
186 case MultiSurfaceZ: return QObject::tr( "MultiSurfaceZ" );
187 case PointM: return QObject::tr( "PointM" );
188 case LineStringM: return QObject::tr( "LineStringM" );
189 case PolygonM: return QObject::tr( "PolygonM" );
190 case TriangleM: return QObject::tr( "TriangleM" );
191 case MultiPointM: return QObject::tr( "MultiPointM" );
192 case MultiLineStringM: return QObject::tr( "MultiLineStringM" );
193 case MultiPolygonM: return QObject::tr( "MultiPolygonM" );
194 case GeometryCollectionM: return QObject::tr( "GeometryCollectionM" );
195 case CircularStringM: return QObject::tr( "CircularStringM" );
196 case CompoundCurveM: return QObject::tr( "CompoundCurveM" );
197 case CurvePolygonM: return QObject::tr( "CurvePolygonM" );
198 case MultiCurveM: return QObject::tr( "MultiCurveM" );
199 case MultiSurfaceM: return QObject::tr( "MultiSurfaceM" );
200 case PointZM: return QObject::tr( "PointZM" );
201 case LineStringZM: return QObject::tr( "LineStringZM" );
202 case PolygonZM: return QObject::tr( "PolygonZM" );
203 case MultiPointZM: return QObject::tr( "MultiPointZM" );
204 case MultiLineStringZM: return QObject::tr( "MultiLineZM" );
205 case MultiPolygonZM: return QObject::tr( "MultiPolygonZM" );
206 case GeometryCollectionZM: return QObject::tr( "GeometryCollectionZM" );
207 case CircularStringZM: return QObject::tr( "CircularStringZM" );
208 case CompoundCurveZM: return QObject::tr( "CompoundCurveZM" );
209 case CurvePolygonZM: return QObject::tr( "CurvePolygonZM" );
210 case MultiCurveZM: return QObject::tr( "MultiCurveZM" );
211 case MultiSurfaceZM: return QObject::tr( "MultiSurfaceZM" );
212 case TriangleZM: return QObject::tr( "TriangleZM" );
213 case Point25D: return QObject::tr( "Point25D" );
214 case LineString25D: return QObject::tr( "LineString25D" );
215 case Polygon25D: return QObject::tr( "Polygon25D" );
216 case MultiPoint25D: return QObject::tr( "MultiPoint25D" );
217 case MultiLineString25D: return QObject::tr( "MultiLineString25D" );
218 case MultiPolygon25D: return QObject::tr( "MultiPolygon25D" );
219 }
220 return QString();
221 }
222
geometryDisplayString(QgsWkbTypes::GeometryType type)223 QString QgsWkbTypes::geometryDisplayString( QgsWkbTypes::GeometryType type )
224 {
225
226 switch ( type )
227 {
228 case PointGeometry:
229 return QStringLiteral( "Point" );
230 case LineGeometry:
231 return QStringLiteral( "Line" );
232 case PolygonGeometry:
233 return QStringLiteral( "Polygon" );
234 case UnknownGeometry:
235 return QStringLiteral( "Unknown geometry" );
236 case NullGeometry:
237 return QStringLiteral( "No geometry" );
238 default:
239 return QStringLiteral( "Invalid type" );
240 }
241
242
243 }
244
245 /***************************************************************************
246 * This class is considered CRITICAL and any change MUST be accompanied with
247 * full unit tests.
248 * See details in QEP #17
249 ****************************************************************************/
250