Skip to content

Commit

Permalink
Add QgsWkbTypes::curveType method
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Aug 2, 2019
1 parent 37b7b84 commit 60f4bc5
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 0 deletions.
12 changes: 12 additions & 0 deletions python/core/auto_generated/geometry/qgswkbtypes.sip.in
Expand Up @@ -120,6 +120,18 @@ Returns the multi type for a WKB type. For example, for Polygon WKB types the mu

.. seealso:: :py:func:`singleType`

.. seealso:: :py:func:`flatType`
%End


static Type curveType( Type type );
%Docstring
Returns the curve type for a WKB type. For example, for Polygon WKB types the multi type would be CurvePolygon.

.. seealso:: :py:func:`isMultiType`

.. seealso:: :py:func:`singleType`

.. seealso:: :py:func:`flatType`
%End

Expand Down
140 changes: 140 additions & 0 deletions src/core/geometry/qgswkbtypes.h
Expand Up @@ -421,6 +421,146 @@ class CORE_EXPORT QgsWkbTypes
return Unknown;
}


/**
* Returns the curve type for a WKB type. For example, for Polygon WKB types the multi type would be CurvePolygon.
* \see isMultiType()
* \see singleType()
* \see flatType()
*/
static Type curveType( Type type )
{
switch ( type )
{
case Unknown:
case Triangle:
case TriangleZ:
case TriangleM:
case TriangleZM:
return Unknown;

case GeometryCollection:
return GeometryCollection;

case GeometryCollectionZ:
return GeometryCollectionZ;

case GeometryCollectionM:
return GeometryCollectionM;

case GeometryCollectionZM:
return GeometryCollectionZM;

case Point:
return Point;

case MultiPoint:
return MultiPoint;

case PointZ:
return PointZ;

case MultiPointZ:
return MultiPointZ;

case PointM:
return PointM;

case MultiPointM:
return MultiPointM;

case PointZM:
return PointZM;

case MultiPointZM:
return MultiPointZM;

case LineString:
case CompoundCurve:
case CircularString:
return CompoundCurve;

case MultiLineString:
case MultiCurve:
return MultiCurve;

case LineStringZ:
case CompoundCurveZ:
case CircularStringZ:
return CompoundCurveZ;

case MultiLineStringZ:
case MultiCurveZ:
return MultiCurveZ;

case LineStringM:
case CompoundCurveM:
case CircularStringM:
return CompoundCurveM;

case MultiLineStringM:
case MultiCurveM:
return MultiCurveM;

case LineStringZM:
case CompoundCurveZM:
case CircularStringZM:
return CompoundCurveZM;

case MultiLineStringZM:
case MultiCurveZM:
return MultiCurveZM;

case Polygon:
case CurvePolygon:
return CurvePolygon;

case MultiPolygon:
case MultiSurface:
return MultiSurface;

case PolygonZ:
case CurvePolygonZ:
return CurvePolygonZ;

case MultiPolygonZ:
case MultiSurfaceZ:
return MultiSurfaceZ;

case PolygonM:
case CurvePolygonM:
return CurvePolygonM;

case MultiPolygonM:
case MultiSurfaceM:
return MultiSurfaceM;

case PolygonZM:
case CurvePolygonZM:
return CurvePolygonZM;

case MultiPolygonZM:
case MultiSurfaceZM:
return MultiSurfaceZM;

case NoGeometry:
return NoGeometry;

case Point25D:
case MultiPoint25D:
return MultiPoint25D;

case LineString25D:
case MultiLineString25D:
return MultiLineString25D;

case Polygon25D:
case MultiPolygon25D:
return MultiPolygon25D;
}
return Unknown;
}

/**
* Returns the flat type for a WKB type. This is the WKB type minus any Z or M dimensions.
* For example, for PolygonZM WKB types the single type would be Polygon.
Expand Down
58 changes: 58 additions & 0 deletions tests/src/python/test_qgsgeometry.py
Expand Up @@ -2748,6 +2748,64 @@ def testWkbTypes(self):
self.assertEqual(QgsWkbTypes.multiType(QgsWkbTypes.MultiLineString25D), QgsWkbTypes.MultiLineString25D)
self.assertEqual(QgsWkbTypes.multiType(QgsWkbTypes.MultiPolygon25D), QgsWkbTypes.MultiPolygon25D)

# test curveType method
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.Unknown), QgsWkbTypes.Unknown)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.Point), QgsWkbTypes.Point)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.PointZ), QgsWkbTypes.PointZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.PointM), QgsWkbTypes.PointM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.PointZM), QgsWkbTypes.PointZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPoint), QgsWkbTypes.MultiPoint)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPointZ), QgsWkbTypes.MultiPointZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPointM), QgsWkbTypes.MultiPointM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPointZM), QgsWkbTypes.MultiPointZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.LineString), QgsWkbTypes.CompoundCurve)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.LineStringZ), QgsWkbTypes.CompoundCurveZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.LineStringM), QgsWkbTypes.CompoundCurveM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.LineStringZM), QgsWkbTypes.CompoundCurveZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiLineString), QgsWkbTypes.MultiCurve)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiLineStringZ), QgsWkbTypes.MultiCurveZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiLineStringM), QgsWkbTypes.MultiCurveM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiLineStringZM), QgsWkbTypes.MultiCurveZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.Polygon), QgsWkbTypes.CurvePolygon)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.PolygonZ), QgsWkbTypes.CurvePolygonZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.PolygonM), QgsWkbTypes.CurvePolygonM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.PolygonZM), QgsWkbTypes.CurvePolygonZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPolygon), QgsWkbTypes.MultiSurface)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPolygonZ), QgsWkbTypes.MultiSurfaceZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPolygonM), QgsWkbTypes.MultiSurfaceM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPolygonZM), QgsWkbTypes.MultiSurfaceZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.GeometryCollection), QgsWkbTypes.GeometryCollection)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.GeometryCollectionZ), QgsWkbTypes.GeometryCollectionZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.GeometryCollectionM), QgsWkbTypes.GeometryCollectionM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.GeometryCollectionZM), QgsWkbTypes.GeometryCollectionZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CircularString), QgsWkbTypes.CompoundCurve)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CircularStringZ), QgsWkbTypes.CompoundCurveZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CircularStringM), QgsWkbTypes.CompoundCurveM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CircularStringZM), QgsWkbTypes.CompoundCurveZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CompoundCurve), QgsWkbTypes.CompoundCurve)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CompoundCurveZ), QgsWkbTypes.CompoundCurveZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CompoundCurveM), QgsWkbTypes.CompoundCurveM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CompoundCurveZM), QgsWkbTypes.CompoundCurveZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CurvePolygon), QgsWkbTypes.CurvePolygon)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CurvePolygonZ), QgsWkbTypes.CurvePolygonZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CurvePolygonM), QgsWkbTypes.CurvePolygonM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.CurvePolygonZM), QgsWkbTypes.CurvePolygonZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiCurve), QgsWkbTypes.MultiCurve)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiCurveZ), QgsWkbTypes.MultiCurveZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiCurveM), QgsWkbTypes.MultiCurveM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiCurveZM), QgsWkbTypes.MultiCurveZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiSurface), QgsWkbTypes.MultiSurface)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiSurfaceZ), QgsWkbTypes.MultiSurfaceZ)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiSurfaceM), QgsWkbTypes.MultiSurfaceM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiSurfaceZM), QgsWkbTypes.MultiSurfaceZM)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.NoGeometry), QgsWkbTypes.NoGeometry)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.Point25D), QgsWkbTypes.MultiPoint25D)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.LineString25D), QgsWkbTypes.MultiLineString25D)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.Polygon25D), QgsWkbTypes.MultiPolygon25D)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPoint25D), QgsWkbTypes.MultiPoint25D)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiLineString25D), QgsWkbTypes.MultiLineString25D)
self.assertEqual(QgsWkbTypes.curveType(QgsWkbTypes.MultiPolygon25D), QgsWkbTypes.MultiPolygon25D)

# test flatType method
self.assertEqual(QgsWkbTypes.flatType(QgsWkbTypes.Unknown), QgsWkbTypes.Unknown)
self.assertEqual(QgsWkbTypes.flatType(QgsWkbTypes.Point), QgsWkbTypes.Point)
Expand Down

0 comments on commit 60f4bc5

Please sign in to comment.