From d4c38f9277ffedf78492aa87db8e6609a68b4eb4 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 30 Nov 2016 09:32:57 +1000 Subject: [PATCH] [FEATURE][processing] Remove duplicate fill holes algorithm The Fill_holes script is duplicated by the DeleteHoles algorithm, and the DeleteHoles algorithm has many advantages: - it's a full algorithm rather than a script - uses qgis geometry classes and maintains curves/z/m - has unit tests - doesn't rely on non-standard external library (shapely) (marked as feature for inclusion in release notes) --- .../processing/algs/qgis/DeleteHoles.py | 2 +- .../algs/qgis/scripts/Fill_holes.py | 44 ------------------- 2 files changed, 1 insertion(+), 45 deletions(-) delete mode 100644 python/plugins/processing/algs/qgis/scripts/Fill_holes.py diff --git a/python/plugins/processing/algs/qgis/DeleteHoles.py b/python/plugins/processing/algs/qgis/DeleteHoles.py index a05b0106066b..1f878a2f5648 100644 --- a/python/plugins/processing/algs/qgis/DeleteHoles.py +++ b/python/plugins/processing/algs/qgis/DeleteHoles.py @@ -41,7 +41,7 @@ class DeleteHoles(GeoAlgorithm): def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm('Delete holes') self.group, self.i18n_group = self.trAlgorithm('Vector geometry tools') - self.tags = self.tr('remove,delete,drop,holes,rings') + self.tags = self.tr('remove,delete,drop,holes,rings,fill') self.addParameter(ParameterVector(self.INPUT, self.tr('Input layer'), [dataobjects.TYPE_VECTOR_POLYGON])) diff --git a/python/plugins/processing/algs/qgis/scripts/Fill_holes.py b/python/plugins/processing/algs/qgis/scripts/Fill_holes.py deleted file mode 100644 index 44bbeb84585a..000000000000 --- a/python/plugins/processing/algs/qgis/scripts/Fill_holes.py +++ /dev/null @@ -1,44 +0,0 @@ -##Vector geometry tools=group -##Polygons=vector -##Max_area=number 100000 -##Results=output vector - -from qgis.core import Qgis, QgsFeature, QgsGeometry, QgsWkbTypes -from shapely.geometry import Polygon, MultiPolygon -from shapely.wkb import loads -from shapely.wkt import dumps - - -polyLayer = processing.getObject(Polygons) -polyPrder = polyLayer.dataProvider() -n = polyLayer.featureCount() -l = 0 - -writer = processing.VectorWriter(Results, None, polyPrder.fields(), - QgsWkbTypes.MultiPolygon, polyPrder.crs()) - - -resgeom = QgsGeometry() -resfeat = QgsFeature() - -for feat in processing.features(polyLayer): - progress.setPercentage(int(100 * l / n)) - l += 1 - - g = loads(feat.geometry().exportToWkb()) - - if g.geom_type == 'MultiPolygon': - resg = [Polygon(p.exterior, - [r for r in p.interiors if Polygon(r).area > Max_area]) for p in g] - - else: - resg = [Polygon(g.exterior, - [r for r in g.interiors if Polygon(r).area > Max_area])] - - resgeom = QgsGeometry().fromWkt(dumps(MultiPolygon(resg))) - - resfeat.setAttributes(feat.attributes()) - resfeat.setGeometry(resgeom) - writer.addFeature(resfeat) - -del writer