|
27 | 27 | #include <QDateTime>
|
28 | 28 | #include "qgsconfig.h"
|
29 | 29 | #include "qgslogger.h"
|
| 30 | +#include "geometry/qgswkbtypes.h" |
30 | 31 |
|
31 | 32 | #include <ogr_api.h>
|
32 | 33 |
|
@@ -99,6 +100,56 @@ const char* QGis::qgisUnitTypes[] =
|
99 | 100 | QT_TRANSLATE_NOOP( "QGis::UnitType", "nautical miles" )
|
100 | 101 | };
|
101 | 102 |
|
| 103 | +static QgsWKBTypes::Type fromOldWkbType( QGis::WkbType type ) |
| 104 | +{ |
| 105 | + switch ( type ) |
| 106 | + { |
| 107 | + case QGis::WKBPoint: return QgsWKBTypes::Point; |
| 108 | + case QGis::WKBLineString: return QgsWKBTypes::LineString; |
| 109 | + case QGis::WKBPolygon: return QgsWKBTypes::Polygon; |
| 110 | + case QGis::WKBMultiPoint: return QgsWKBTypes::MultiPoint; |
| 111 | + case QGis::WKBMultiLineString: return QgsWKBTypes::MultiLineString; |
| 112 | + case QGis::WKBMultiPolygon: return QgsWKBTypes::MultiPolygon; |
| 113 | + case QGis::WKBNoGeometry: return QgsWKBTypes::NoGeometry; |
| 114 | + case QGis::WKBPoint25D: return QgsWKBTypes::PointZ; |
| 115 | + case QGis::WKBLineString25D: return QgsWKBTypes::LineStringZ; |
| 116 | + case QGis::WKBPolygon25D: return QgsWKBTypes::PolygonZ; |
| 117 | + case QGis::WKBMultiPoint25D: return QgsWKBTypes::MultiPointZ; |
| 118 | + case QGis::WKBMultiLineString25D: return QgsWKBTypes::MultiLineStringZ; |
| 119 | + case QGis::WKBMultiPolygon25D: return QgsWKBTypes::MultiPolygonZ; |
| 120 | + case QGis::WKBUnknown: return QgsWKBTypes::Unknown; |
| 121 | + default: break; |
| 122 | + } |
| 123 | + |
| 124 | + QgsDebugMsg( QString( "unexpected old wkbType=%1" ).arg( type ) ); |
| 125 | + return ( QgsWKBTypes::Type ) type; |
| 126 | +} |
| 127 | + |
| 128 | +static QGis::WkbType fromNewWkbType( QgsWKBTypes::Type type ) |
| 129 | +{ |
| 130 | + switch ( type ) |
| 131 | + { |
| 132 | + case QgsWKBTypes::Point: return QGis::WKBPoint; |
| 133 | + case QgsWKBTypes::LineString: return QGis::WKBLineString; |
| 134 | + case QgsWKBTypes::Polygon: return QGis::WKBPolygon; |
| 135 | + case QgsWKBTypes::MultiPoint: return QGis::WKBMultiPoint; |
| 136 | + case QgsWKBTypes::MultiLineString: return QGis::WKBMultiLineString; |
| 137 | + case QgsWKBTypes::MultiPolygon: return QGis::WKBMultiPolygon; |
| 138 | + case QgsWKBTypes::NoGeometry: return QGis::WKBNoGeometry; |
| 139 | + case QgsWKBTypes::PointZ: return QGis::WKBPoint25D; |
| 140 | + case QgsWKBTypes::LineStringZ: return QGis::WKBLineString25D; |
| 141 | + case QgsWKBTypes::PolygonZ: return QGis::WKBPolygon25D; |
| 142 | + case QgsWKBTypes::MultiPointZ: return QGis::WKBMultiPoint25D; |
| 143 | + case QgsWKBTypes::MultiLineStringZ: return QGis::WKBMultiLineString25D; |
| 144 | + case QgsWKBTypes::MultiPolygonZ: return QGis::WKBMultiPolygon25D; |
| 145 | + default: break; |
| 146 | + } |
| 147 | + |
| 148 | + QgsDebugMsg( QString( "unexpected new wkbType=%1" ).arg( type ) ); |
| 149 | + return ( QGis::WkbType ) type; |
| 150 | +} |
| 151 | + |
| 152 | + |
102 | 153 | QGis::UnitType QGis::fromLiteral( const QString& literal, QGis::UnitType defaultType )
|
103 | 154 | {
|
104 | 155 | for ( unsigned int i = 0; i < ( sizeof( qgisUnitTypes ) / sizeof( qgisUnitTypes[0] ) ); i++ )
|
@@ -282,3 +333,101 @@ QString qgsVsiPrefix( const QString& path )
|
282 | 333 | else
|
283 | 334 | return "";
|
284 | 335 | }
|
| 336 | + |
| 337 | +QGis::WkbType QGis::singleType( QGis::WkbType type ) |
| 338 | +{ |
| 339 | + switch ( type ) |
| 340 | + { |
| 341 | + case WKBMultiPoint: return WKBPoint; |
| 342 | + case WKBMultiLineString: return WKBLineString; |
| 343 | + case WKBMultiPolygon: return WKBPolygon; |
| 344 | + case WKBMultiPoint25D: return WKBPoint25D; |
| 345 | + case WKBMultiLineString25D: return WKBLineString25D; |
| 346 | + case WKBMultiPolygon25D: return WKBPolygon25D; |
| 347 | + default: return fromNewWkbType( QgsWKBTypes::singleType( fromOldWkbType( type ) ) ); |
| 348 | + } |
| 349 | +} |
| 350 | + |
| 351 | +QGis::WkbType QGis::multiType( QGis::WkbType type ) |
| 352 | +{ |
| 353 | + switch ( type ) |
| 354 | + { |
| 355 | + case WKBPoint: return WKBMultiPoint; |
| 356 | + case WKBLineString: return WKBMultiLineString; |
| 357 | + case WKBPolygon: return WKBMultiPolygon; |
| 358 | + case WKBPoint25D: return WKBMultiPoint25D; |
| 359 | + case WKBLineString25D: return WKBMultiLineString25D; |
| 360 | + case WKBPolygon25D: return WKBMultiPolygon25D; |
| 361 | + default: return fromNewWkbType( QgsWKBTypes::multiType( fromOldWkbType( type ) ) ); |
| 362 | + } |
| 363 | +} |
| 364 | + |
| 365 | +QGis::WkbType QGis::flatType( QGis::WkbType type ) |
| 366 | +{ |
| 367 | + switch ( type ) |
| 368 | + { |
| 369 | + case WKBPoint25D: return WKBPoint; |
| 370 | + case WKBLineString25D: return WKBLineString; |
| 371 | + case WKBPolygon25D: return WKBPolygon; |
| 372 | + case WKBMultiPoint25D: return WKBMultiPoint; |
| 373 | + case WKBMultiLineString25D: return WKBMultiLineString; |
| 374 | + case WKBMultiPolygon25D: return WKBMultiPolygon; |
| 375 | + default: return fromNewWkbType( QgsWKBTypes::flatType( fromOldWkbType( type ) ) ); |
| 376 | + } |
| 377 | +} |
| 378 | + |
| 379 | +bool QGis::isSingleType( QGis::WkbType type ) |
| 380 | +{ |
| 381 | + return QgsWKBTypes::isSingleType( fromOldWkbType( type ) ); |
| 382 | +} |
| 383 | + |
| 384 | +bool QGis::isMultiType( QGis::WkbType type ) |
| 385 | +{ |
| 386 | + return QgsWKBTypes::flatType( fromOldWkbType( type ) ); |
| 387 | +} |
| 388 | + |
| 389 | +int QGis::wkbDimensions( QGis::WkbType type ) |
| 390 | +{ |
| 391 | + if ( type == WKBUnknown || type == WKBNoGeometry ) |
| 392 | + return 0; |
| 393 | + |
| 394 | + QgsWKBTypes::Type wkbType = fromOldWkbType( type ); |
| 395 | + return 2 + ( QgsWKBTypes::hasZ( wkbType ) ? 1 : 0 ) + ( QgsWKBTypes::hasM( wkbType ) ? 1 : 0 ); |
| 396 | +} |
| 397 | + |
| 398 | +const char *QGis::vectorGeometryType( QGis::GeometryType type ) |
| 399 | +{ |
| 400 | + switch ( type ) |
| 401 | + { |
| 402 | + case Point: return "Point"; |
| 403 | + case Line: return "Line"; |
| 404 | + case Polygon: return "Polygon"; |
| 405 | + case UnknownGeometry: return "Unknown geometry"; |
| 406 | + case NoGeometry: return "No geometry"; |
| 407 | + default: return "Invalid type"; |
| 408 | + } |
| 409 | +} |
| 410 | + |
| 411 | + |
| 412 | +const char *QGis::featureType( QGis::WkbType type ) |
| 413 | +{ |
| 414 | + switch ( type ) |
| 415 | + { |
| 416 | + case WKBUnknown: return "WKBUnknown"; |
| 417 | + case WKBPoint: return "WKBPoint"; |
| 418 | + case WKBLineString: return "WKBLineString"; |
| 419 | + case WKBPolygon: return "WKBPolygon"; |
| 420 | + case WKBMultiPoint: return "WKBMultiPoint"; |
| 421 | + case WKBMultiLineString: return "WKBMultiLineString"; |
| 422 | + case WKBMultiPolygon: return "WKBMultiPolygon"; |
| 423 | + case WKBNoGeometry: return "WKBNoGeometry"; |
| 424 | + case WKBPoint25D: return "WKBPoint25D"; |
| 425 | + case WKBLineString25D: return "WKBLineString25D"; |
| 426 | + case WKBPolygon25D: return "WKBPolygon25D"; |
| 427 | + case WKBMultiPoint25D: return "WKBMultiPoint25D"; |
| 428 | + case WKBMultiLineString25D: return "WKBMultiLineString25D"; |
| 429 | + case WKBMultiPolygon25D: return "WKBMultiPolygon25D"; |
| 430 | + default: return "invalid wkbtype"; |
| 431 | + |
| 432 | + } |
| 433 | +} |
0 commit comments