Skip to content

Commit 8a54182

Browse files
committed
[processing] fixed 'add geometric properties' algorithm when output fields already exist in layer
fixes #13010
1 parent 768485d commit 8a54182

File tree

1 file changed

+16
-20
lines changed

1 file changed

+16
-20
lines changed

python/plugins/processing/algs/qgis/ExportGeometryInfo.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from qgis.core import QGis, QgsProject, QgsCoordinateTransform, QgsFeature, QgsGeometry
28+
from qgis.core import QGis, QgsProject, QgsCoordinateTransform, QgsFeature, QgsGeometry, QgsField
29+
from PyQt4.QtCore import QVariant
2930
from qgis.utils import iface
3031
from processing.core.GeoAlgorithm import GeoAlgorithm
3132
from processing.core.parameters import ParameterVector
@@ -59,29 +60,24 @@ def processAlgorithm(self, progress):
5960
method = self.getParameterValue(self.METHOD)
6061

6162
geometryType = layer.geometryType()
62-
63-
idx1 = -1
64-
idx2 = -1
6563
fields = layer.pendingFields()
6664

6765
if geometryType == QGis.Polygon:
68-
(idx1, fields) = vector.findOrCreateField(layer, fields, 'area',
69-
21, 6)
70-
(idx2, fields) = vector.findOrCreateField(layer, fields,
71-
'perimeter', 21, 6)
66+
areaName = vector.createUniqueFieldName('area', fields)
67+
fields.append(QgsField(areaName, QVariant.Double))
68+
perimeterName = vector.createUniqueFieldName('perimeter', fields)
69+
fields.append(QgsField(perimeterName, QVariant.Double))
7270
elif geometryType == QGis.Line:
73-
(idx1, fields) = vector.findOrCreateField(layer, fields, 'length',
74-
21, 6)
75-
idx2 = idx1
71+
lengthName = vector.createUniqueFieldName('length', fields)
72+
fields.append(QgsField(lengthName, QVariant.Double))
7673
else:
77-
(idx1, fields) = vector.findOrCreateField(layer, fields, 'xcoord',
78-
21, 6)
79-
(idx2, fields) = vector.findOrCreateField(layer, fields, 'ycoord',
80-
21, 6)
74+
xName = vector.createUniqueFieldName('xcoord', fields)
75+
fields.append(QgsField(xName, QVariant.Double))
76+
yName = vector.createUniqueFieldName('ycoord', fields)
77+
fields.append(QgsField(yName, QVariant.Double))
8178

82-
writer = self.getOutputFromName(
83-
self.OUTPUT).getVectorWriter(fields.toList(),
84-
layer.dataProvider().geometryType(), layer.crs())
79+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
80+
fields.toList(), layer.dataProvider().geometryType(), layer.crs())
8581

8682
ellips = None
8783
crs = None
@@ -120,9 +116,9 @@ def processAlgorithm(self, progress):
120116

121117
outFeat.setGeometry(inGeom)
122118
attrs = f.attributes()
123-
attrs.insert(idx1, attr1)
119+
attrs.append(attr1)
124120
if attr2 is not None:
125-
attrs.insert(idx2, attr2)
121+
attrs.append(attr2)
126122
outFeat.setAttributes(attrs)
127123
writer.addFeature(outFeat)
128124

0 commit comments

Comments
 (0)