def test_union_geometry(self): """Test union_geometry work""" # Create big polygons from the point layer, # then the union is one BIG polygon dx = dy = 10 points = self._create_points() polygons = points_to_rectangles(points, dx, dy) geom = union_geometry(polygons) # The union is the rectangle # noinspection PyCallByClass,PyTypeChecker expected_area = QgsGeometry.fromPolygon([[ QgsPoint(10, 30), QgsPoint(40, 30), QgsPoint(40, 0), QgsPoint(10, 0)]]) self.assertTrue(geom.isGeosValid()) self.assertFalse(geom.isMultipart()) self.assertAlmostEquals(geom.area(), 3 * dx * 3 * dy) self.assertTrue((geom.isGeosEqual(expected_area))) polygons = points_to_rectangles(points, 0.5 * dx, 0.5 * dy) geom = union_geometry(polygons) # The union is 9 squares self.assertAlmostEquals(geom.area(), 1.5 * dx * 1.5 * dy) self.assertTrue(geom.isMultipart())
def test_union_geometry(self): """Test union_geometry work""" # Create big polygons from the point layer, # then the union is one BIG polygon dx = dy = 10 points = self._create_points() polygons = points_to_rectangles(points, dx, dy) geom = union_geometry(polygons) # The union is the rectangle # noinspection PyCallByClass,PyTypeChecker expected_area = QgsGeometry.fromPolygon([[ QgsPoint(10, 30), QgsPoint(40, 30), QgsPoint(40, 0), QgsPoint(10, 0) ]]) self.assertTrue(geom.isGeosValid()) self.assertFalse(geom.isMultipart()) self.assertAlmostEquals(geom.area(), 3 * dx * 3 * dy) self.assertTrue((geom.isGeosEqual(expected_area))) polygons = points_to_rectangles(points, 0.5 * dx, 0.5 * dy) geom = union_geometry(polygons) # The union is 9 squares self.assertAlmostEquals(geom.area(), 1.5 * dx * 1.5 * dy) self.assertTrue(geom.isMultipart())
def test_points_to_rectangles(self): """Test points_to_rectangles work """ points = self._create_points() x_index = points.dataProvider().fieldNameIndex('X') y_index = points.dataProvider().fieldNameIndex('Y') dx, dy = 1, 2 polygons = points_to_rectangles(points, dx, dy) for feature in polygons.getFeatures(): geom = feature.geometry() attr = feature.attributes() self.assertTrue(geom.isGeosValid()) self.assertAlmostEquals(geom.area(), dx * dy) p = geom.centroid().asPoint() x, y = [attr[index] for index in [x_index, y_index]] self.assertLess(abs(p.x() - x), dx) self.assertLess(abs(p.y() - y), dy)