Skip to content

Commit

Permalink
Merge pull request #50233 from lbartoletti/bugfix_50218_wkbtype
Browse files Browse the repository at this point in the history
Fix wkbType cast from OGR 25D Type.
  • Loading branch information
lbartoletti committed Sep 19, 2022
2 parents 9eedb44 + fdaba7c commit 2ab1583
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 9 deletions.
4 changes: 2 additions & 2 deletions src/core/qgsogrutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ bool QgsOgrUtils::readOgrFeatureGeometry( OGRFeatureH ogrFet, QgsFeature &featur

std::unique_ptr< QgsPoint > ogrGeometryToQgsPoint( OGRGeometryH geom )
{
QgsWkbTypes::Type wkbType = static_cast<QgsWkbTypes::Type>( OGR_G_GetGeometryType( geom ) );
QgsWkbTypes::Type wkbType = QgsOgrUtils::ogrGeometryTypeToQgsWkbType( OGR_G_GetGeometryType( geom ) );

double x, y, z, m;
OGR_G_GetPointZM( geom, 0, &x, &y, &z, &m );
Expand All @@ -628,7 +628,7 @@ std::unique_ptr< QgsMultiPoint > ogrGeometryToQgsMultiPoint( OGRGeometryH geom )

std::unique_ptr< QgsLineString > ogrGeometryToQgsLineString( OGRGeometryH geom )
{
QgsWkbTypes::Type wkbType = static_cast<QgsWkbTypes::Type>( OGR_G_GetGeometryType( geom ) );
QgsWkbTypes::Type wkbType = QgsOgrUtils::ogrGeometryTypeToQgsWkbType( OGR_G_GetGeometryType( geom ) );

int count = OGR_G_GetPointCount( geom );
QVector< double > x( count );
Expand Down
8 changes: 4 additions & 4 deletions tests/src/core/testqgsogrutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,16 +206,16 @@ void TestQgsOgrUtils::ogrGeometryToQgsGeometry2_data()
QTest::addColumn<int>( "type" );

QTest::newRow( "point" ) << QStringLiteral( "Point (1.1 2.2)" ) << static_cast< int >( QgsWkbTypes::Point );
QTest::newRow( "pointz" ) << QStringLiteral( "PointZ (1.1 2.2 3.3)" ) << static_cast< int >( QgsWkbTypes::Point25D ); // ogr uses 25d for z
QTest::newRow( "pointz" ) << QStringLiteral( "PointZ (1.1 2.2 3.3)" ) << static_cast< int >( QgsWkbTypes::PointZ );
QTest::newRow( "pointm" ) << QStringLiteral( "PointM (1.1 2.2 3.3)" ) << static_cast< int >( QgsWkbTypes::PointM );
QTest::newRow( "pointzm" ) << QStringLiteral( "PointZM (1.1 2.2 3.3 4.4)" ) << static_cast< int >( QgsWkbTypes::PointZM );
QTest::newRow( "point25d" ) << QStringLiteral( "Point25D (1.1 2.2 3.3)" ) << static_cast< int >( QgsWkbTypes::Point25D );
QTest::newRow( "point25d" ) << QStringLiteral( "Point25D (1.1 2.2 3.3)" ) << static_cast< int >( QgsWkbTypes::PointZ );

QTest::newRow( "linestring" ) << QStringLiteral( "LineString (1.1 2.2, 3.3 4.4)" ) << static_cast< int >( QgsWkbTypes::LineString );
QTest::newRow( "linestringz" ) << QStringLiteral( "LineStringZ (1.1 2.2 3.3, 4.4 5.5 6.6)" ) << static_cast< int >( QgsWkbTypes::LineString25D ); // ogr uses 25d for z
QTest::newRow( "linestringz" ) << QStringLiteral( "LineStringZ (1.1 2.2 3.3, 4.4 5.5 6.6)" ) << static_cast< int >( QgsWkbTypes::LineStringZ ); // ogr uses 25d for z
QTest::newRow( "linestringm" ) << QStringLiteral( "LineStringM (1.1 2.2 3.3, 4.4 5.5 6.6)" ) << static_cast< int >( QgsWkbTypes::LineStringM );
QTest::newRow( "linestringzm" ) << QStringLiteral( "LineStringZM (1.1 2.2 3.3 4.4, 5.5 6.6 7.7 8.8)" ) << static_cast< int >( QgsWkbTypes::LineStringZM );
QTest::newRow( "linestring25d" ) << QStringLiteral( "LineString25D (1.1 2.2 3.3, 4.4 5.5 6.6)" ) << static_cast< int >( QgsWkbTypes::LineString25D );
QTest::newRow( "linestring25d" ) << QStringLiteral( "LineString25D (1.1 2.2 3.3, 4.4 5.5 6.6)" ) << static_cast< int >( QgsWkbTypes::LineStringZ );

QTest::newRow( "linestring" ) << QStringLiteral( "MultiLineString ((1.1 2.2, 3.3 4.4))" ) << static_cast< int >( QgsWkbTypes::MultiLineString );
QTest::newRow( "linestring" ) << QStringLiteral( "MultiLineString ((1.1 2.2, 3.3 4.4),(5 5, 6 6))" ) << static_cast< int >( QgsWkbTypes::MultiLineString );
Expand Down
6 changes: 3 additions & 3 deletions tests/src/python/test_provider_ogr.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def testGpxElevation(self):
vl = QgsVectorLayer('{}|layername=routes'.format(datasource), 'test', 'ogr')
self.assertTrue(vl.isValid())
f = next(vl.getFeatures())
self.assertEqual(f.geometry().wkbType(), QgsWkbTypes.LineString25D)
self.assertEqual(f.geometry().wkbType(), QgsWkbTypes.LineStringZ)
self.assertEqual(f.geometry().constGet().pointN(0).z(), 1)
self.assertEqual(f.geometry().constGet().pointN(1).z(), 2)
self.assertEqual(f.geometry().constGet().pointN(2).z(), 3)
Expand Down Expand Up @@ -2513,15 +2513,15 @@ def test_provider_dxf_3d(self):
self.assertEqual(point_layer.featureCount(), 11)
feature = next(point_layer.getFeatures())
self.assertTrue(feature.isValid())
self.assertEqual(feature.geometry().wkbType(), QgsWkbTypes.Point25D)
self.assertEqual(feature.geometry().wkbType(), QgsWkbTypes.PointZ)
self.assertEqual(feature.geometry().asWkt(),
'PointZ (635660.10747100005391985 1768912.79759799991734326 3.36980799999999991)')

self.assertTrue(polyline_layer.isValid())
self.assertEqual(polyline_layer.featureCount(), 2)
feature = next(polyline_layer.getFeatures())
self.assertTrue(feature.isValid())
self.assertEqual(feature.geometry().wkbType(), QgsWkbTypes.LineString25D)
self.assertEqual(feature.geometry().wkbType(), QgsWkbTypes.LineStringZ)
self.assertEqual(feature.geometry().vertexAt(1).asWkt(),
'PointZ (635660.11699699994642287 1768910.93880999996326864 3.33884099999999995)')

Expand Down

0 comments on commit 2ab1583

Please sign in to comment.