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