Skip to content

Commit

Permalink
[spatialite] Test getQueryGeometryDetails for geom with Z, M or ZM
Browse files Browse the repository at this point in the history
  • Loading branch information
agiudiceandrea authored Apr 19, 2024
1 parent af805a9 commit 3847005
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions tests/src/python/test_provider_spatialite.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,13 @@ def setUpClass(cls):
sql = "INSERT INTO \"test_transactions2\" VALUES (NULL)"
cur.execute(sql)

# table to test getQueryGeometryDetails() for geometries with Z, M and ZM
sql = "CREATE TABLE test_querygeometry (id INTEGER PRIMARY KEY, x DECIMAL, y DECIMAL, z DECIMAL, m DECIMAL, srid INTEGER)"
cur.execute(sql)
sql = "INSERT INTO test_querygeometry (id, x, y, z, m, srid) "
sql += "VALUES (1, 16, 41, 100, 10, 4326)"
cur.execute(sql)

# Commit all test data
cur.execute("COMMIT")
con.close()
Expand Down Expand Up @@ -1819,6 +1826,61 @@ def testTransactions(self):
self.assertEqual(vl.dataProvider().defaultValueClause(0), '')
self.assertEqual(vl.dataProvider().defaultValue(0), 1)

def testGetQueryGeometryDetails(self):
"""Test getQueryGeometryDetails() for geometries with Z, M and ZM"""

query = "SELECT id, srid, x, y, MakePoint(x,y,srid) as geom FROM test_querygeometry"
vl = QgsVectorLayer(f"dbname={self.dbname} table='({query})' (geom) key='id'",
"QueryGeometryXY", "spatialite")
self.assertTrue(vl.isValid())
self.assertEqual(vl.wkbType(), QgsWkbTypes.Type.Point)
self.assertEqual(vl.featureCount(), 1)
feature = vl.getFeature(1)
self.assertEqual(vl.crs().postgisSrid(), feature.attributes()[1])
geom = feature.geometry().constGet()
self.assertEqual(geom.x(), feature.attributes()[2])
self.assertEqual(geom.y(), feature.attributes()[3])

query = "SELECT id, srid, x, y, z, MakePointZ(x,y,z,srid) as geom FROM test_querygeometry"
vl = QgsVectorLayer(f"dbname={self.dbname} table='({query})' (geom) key='id'",
"QueryGeometryXYZ", "spatialite")
self.assertTrue(vl.isValid())
self.assertEqual(vl.wkbType(), QgsWkbTypes.Type.PointZ)
self.assertEqual(vl.featureCount(), 1)
feature = vl.getFeature(1)
self.assertEqual(vl.crs().postgisSrid(), feature.attributes()[1])
geom = feature.geometry().constGet()
self.assertEqual(geom.x(), feature.attributes()[2])
self.assertEqual(geom.y(), feature.attributes()[3])
self.assertEqual(geom.z(), feature.attributes()[4])

query = "SELECT id, srid, x, y, m, MakePointM(x,y,m,srid) as geom FROM test_querygeometry"
vl = QgsVectorLayer(f"dbname={self.dbname} table='({query})' (geom) key='id'",
"QueryGeometryXYM", "spatialite")
self.assertTrue(vl.isValid())
self.assertEqual(vl.wkbType(), QgsWkbTypes.Type.PointM)
self.assertEqual(vl.featureCount(), 1)
feature = vl.getFeature(1)
self.assertEqual(vl.crs().postgisSrid(), feature.attributes()[1])
geom = feature.geometry().constGet()
self.assertEqual(geom.x(), feature.attributes()[2])
self.assertEqual(geom.y(), feature.attributes()[3])
self.assertEqual(geom.m(), feature.attributes()[4])

query = "SELECT id, srid, x, y, z, m, MakePointZM(x,y,z,m,srid) as geom FROM test_querygeometry"
vl = QgsVectorLayer(f"dbname={self.dbname} table='({query})' (geom) key='id'",
"QueryGeometryXYZM", "spatialite")
self.assertTrue(vl.isValid())
self.assertEqual(vl.wkbType(), QgsWkbTypes.Type.PointZM)
self.assertEqual(vl.featureCount(), 1)
feature = vl.getFeature(1)
self.assertEqual(vl.crs().postgisSrid(), feature.attributes()[1])
geom = feature.geometry().constGet()
self.assertEqual(geom.x(), feature.attributes()[2])
self.assertEqual(geom.y(), feature.attributes()[3])
self.assertEqual(geom.z(), feature.attributes()[4])
self.assertEqual(geom.m(), feature.attributes()[5])

def testViewsExtentFilter(self):
"""Test extent filtering of a views-based spatialite layer"""

Expand Down

0 comments on commit 3847005

Please sign in to comment.