mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
[processing] fix Convex hull algorithm (fix #11725)
This commit is contained in:
parent
7d8a3b1a29
commit
72fe56cfe4
@ -50,24 +50,23 @@ class ConvexHull(GeoAlgorithm):
|
||||
def defineCharacteristics(self):
|
||||
self.name = 'Convex hull'
|
||||
self.group = 'Vector geometry tools'
|
||||
self.addParameter(ParameterVector(ConvexHull.INPUT, 'Input layer',
|
||||
[ParameterVector.VECTOR_TYPE_ANY]))
|
||||
self.addParameter(ParameterTableField(ConvexHull.FIELD,
|
||||
self.addParameter(ParameterVector(
|
||||
self.INPUT, 'Input layer', [ParameterVector.VECTOR_TYPE_ANY]))
|
||||
self.addParameter(ParameterTableField(
|
||||
self.FIELD,
|
||||
'Field (optional, only used if creating convex hulls by classes)',
|
||||
ConvexHull.INPUT, optional=True))
|
||||
self.addParameter(ParameterSelection(ConvexHull.METHOD, 'Method',
|
||||
ConvexHull.METHODS))
|
||||
self.addOutput(OutputVector(ConvexHull.OUTPUT, 'Convex hull'))
|
||||
self.INPUT, optional=True))
|
||||
self.addParameter(ParameterSelection(
|
||||
self.METHOD, 'Method', self.METHODS))
|
||||
self.addOutput(OutputVector(self.OUTPUT, 'Convex hull'))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
useField = self.getParameterValue(ConvexHull.METHOD) == 1
|
||||
fieldName = self.getParameterValue(ConvexHull.FIELD)
|
||||
layer = dataobjects.getObjectFromUri(
|
||||
self.getParameterValue(ConvexHull.INPUT))
|
||||
self.getParameterValue(self.INPUT))
|
||||
useField = self.getParameterValue(self.METHOD) == 1
|
||||
fieldName = self.getParameterValue(self.FIELD)
|
||||
|
||||
f = QgsField('value')
|
||||
f.setType(QVariant.String)
|
||||
f.setLength(255)
|
||||
if useField:
|
||||
index = layer.fieldNameIndex(fieldName)
|
||||
fType = layer.pendingFields()[index].type()
|
||||
@ -82,14 +81,14 @@ class ConvexHull(GeoAlgorithm):
|
||||
f.setType(QVariant.String)
|
||||
f.setLength(255)
|
||||
|
||||
fields = [QgsField('id', QVariant.Int, '', 20), f, QgsField('area',
|
||||
QVariant.Double, '', 20, 6), QgsField('perim',
|
||||
QVariant.Double, '', 20, 6)]
|
||||
fields = [QgsField('id', QVariant.Int, '', 20),
|
||||
f,
|
||||
QgsField('area', QVariant.Double, '', 20, 6),
|
||||
QgsField('perim', QVariant.Double, '', 20, 6)
|
||||
]
|
||||
|
||||
writer = self.getOutputFromName(
|
||||
ConvexHull.OUTPUT).getVectorWriter(fields,
|
||||
QGis.WKBPolygon,
|
||||
layer.dataProvider().crs())
|
||||
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
|
||||
fields, QGis.WKBPolygon, layer.dataProvider().crs())
|
||||
|
||||
outFeat = QgsFeature()
|
||||
inGeom = QgsGeometry()
|
||||
@ -98,21 +97,22 @@ class ConvexHull(GeoAlgorithm):
|
||||
current = 0
|
||||
|
||||
fid = 0
|
||||
val = ''
|
||||
val = None
|
||||
features = vector.features(layer)
|
||||
if useField:
|
||||
unique = layer.uniqueValues(index)
|
||||
total = 100.0 / float(layer.featureCount() * len(unique))
|
||||
|
||||
total = 100.0 / (len(features) * len(unique))
|
||||
for i in unique:
|
||||
hull = []
|
||||
first = True
|
||||
hull = []
|
||||
features = vector.features(layer)
|
||||
for f in features:
|
||||
idVar = f[fieldName]
|
||||
if unicode(idVar).strip() == unicode(i).strip:
|
||||
if unicode(idVar).strip() == unicode(i).strip():
|
||||
if first:
|
||||
val = idVar
|
||||
first = False
|
||||
|
||||
inGeom = QgsGeometry(f.geometry())
|
||||
points = vector.extractPoints(inGeom)
|
||||
hull.extend(points)
|
||||
|
Loading…
x
Reference in New Issue
Block a user