|
17 | 17 | import sys
|
18 | 18 | import tempfile
|
19 | 19 |
|
20 |
| -from qgis.core import QgsVectorLayer, QgsVectorDataProvider, QgsWkbTypes, QgsFeature |
| 20 | +from qgis.core import QgsVectorLayer, QgsVectorDataProvider, QgsWkbTypes, QgsFeature, QgsFeatureRequest |
21 | 21 | from qgis.testing import (
|
22 | 22 | start_app,
|
23 | 23 | unittest
|
@@ -255,6 +255,43 @@ def testGdbFilter(self):
|
255 | 255 | while it.nextFeature(f):
|
256 | 256 | self.assertTrue(f.attribute("text") == "shape 2")
|
257 | 257 |
|
| 258 | + def testTriangleTINPolyhedralSurface(self): |
| 259 | + """ Test support for Triangles (mapped to Polygons) """ |
| 260 | + testsets = ( |
| 261 | + ("Triangle((0 0, 0 1, 1 1, 0 0))", QgsWkbTypes.Triangle, "Triangle ((0 0, 0 1, 1 1, 0 0))"), |
| 262 | + ("Triangle Z((0 0 1, 0 1 2, 1 1 3, 0 0 1))", QgsWkbTypes.TriangleZ, "TriangleZ ((0 0 1, 0 1 2, 1 1 3, 0 0 1))"), |
| 263 | + ("Triangle M((0 0 4, 0 1 5, 1 1 6, 0 0 4))", QgsWkbTypes.TriangleM, "TriangleM ((0 0 4, 0 1 5, 1 1 6, 0 0 4))"), |
| 264 | + ("Triangle ZM((0 0 0 1, 0 1 2 3, 1 1 4 5, 0 0 0 1))", QgsWkbTypes.TriangleZM, "TriangleZM ((0 0 0 1, 0 1 2 3, 1 1 4 5, 0 0 0 1))"), |
| 265 | + |
| 266 | + ("TIN (((0 0, 0 1, 1 1, 0 0)),((0 0, 1 0, 1 1, 0 0)))", QgsWkbTypes.MultiPolygon, "MultiPolygon (((0 0, 0 1, 1 1, 0 0)),((0 0, 1 0, 1 1, 0 0)))"), |
| 267 | + ("TIN Z(((0 0 0, 0 1 1, 1 1 1, 0 0 0)),((0 0 0, 1 0 0, 1 1 1, 0 0 0)))", QgsWkbTypes.MultiPolygonZ, "MultiPolygonZ (((0 0 0, 0 1 1, 1 1 1, 0 0 0)),((0 0 0, 1 0 0, 1 1 1, 0 0 0)))"), |
| 268 | + ("TIN M(((0 0 0, 0 1 2, 1 1 3, 0 0 0)),((0 0 0, 1 0 4, 1 1 3, 0 0 0)))", QgsWkbTypes.MultiPolygonM, "MultiPolygonM (((0 0 0, 0 1 2, 1 1 3, 0 0 0)),((0 0 0, 1 0 4, 1 1 3, 0 0 0)))"), |
| 269 | + ("TIN ZM(((0 0 0 0, 0 1 1 2, 1 1 1 3, 0 0 0 0)),((0 0 0 0, 1 0 0 4, 1 1 1 3, 0 0 0 0)))", QgsWkbTypes.MultiPolygonZM, "MultiPolygonZM (((0 0 0 0, 0 1 1 2, 1 1 1 3, 0 0 0 0)),((0 0 0 0, 1 0 0 4, 1 1 1 3, 0 0 0 0)))"), |
| 270 | + |
| 271 | + ("PolyhedralSurface (((0 0, 0 1, 1 1, 0 0)),((0 0, 1 0, 1 1, 0 0)))", QgsWkbTypes.MultiPolygon, "MultiPolygon (((0 0, 0 1, 1 1, 0 0)),((0 0, 1 0, 1 1, 0 0)))"), |
| 272 | + ("PolyhedralSurface Z(((0 0 0, 0 1 1, 1 1 1, 0 0 0)),((0 0 0, 1 0 0, 1 1 1, 0 0 0)))", QgsWkbTypes.MultiPolygonZ, "MultiPolygonZ (((0 0 0, 0 1 1, 1 1 1, 0 0 0)),((0 0 0, 1 0 0, 1 1 1, 0 0 0)))"), |
| 273 | + ("PolyhedralSurface M(((0 0 0, 0 1 2, 1 1 3, 0 0 0)),((0 0 0, 1 0 4, 1 1 3, 0 0 0)))", QgsWkbTypes.MultiPolygonM, "MultiPolygonM (((0 0 0, 0 1 2, 1 1 3, 0 0 0)),((0 0 0, 1 0 4, 1 1 3, 0 0 0)))"), |
| 274 | + ("PolyhedralSurface ZM(((0 0 0 0, 0 1 1 2, 1 1 1 3, 0 0 0 0)),((0 0 0 0, 1 0 0 4, 1 1 1 3, 0 0 0 0)))", QgsWkbTypes.MultiPolygonZM, "MultiPolygonZM (((0 0 0 0, 0 1 1 2, 1 1 1 3, 0 0 0 0)),((0 0 0 0, 1 0 0 4, 1 1 1 3, 0 0 0 0)))") |
| 275 | + ) |
| 276 | + for row in testsets: |
| 277 | + datasource = os.path.join(self.basetestpath, 'test.csv') |
| 278 | + with open(datasource, 'wt') as f: |
| 279 | + f.write('id,WKT\n') |
| 280 | + f.write('1,"%s"' % row[0]) |
| 281 | + |
| 282 | + vl = QgsVectorLayer(datasource, 'test', 'ogr') |
| 283 | + self.assertTrue(vl.isValid()) |
| 284 | + self.assertEqual(vl.wkbType(), row[1]) |
| 285 | + |
| 286 | + f = QgsFeature() |
| 287 | + self.assertTrue(vl.getFeatures(QgsFeatureRequest(1)).nextFeature(f)) |
| 288 | + self.assertTrue(f.geometry()) |
| 289 | + self.assertEqual(f.geometry().geometry().asWkt(), row[2]) |
| 290 | + |
| 291 | + """PolyhedralSurface, Tin => mapped to MultiPolygon |
| 292 | + Triangle => mapped to Polygon |
| 293 | + """ |
| 294 | + |
258 | 295 |
|
259 | 296 | if __name__ == '__main__':
|
260 | 297 | unittest.main()
|
0 commit comments