[QGIS-Developer] Proper way to create polygons in PyQGIS

C Hamilton adenaculture at gmail.com
Wed Nov 1 12:22:13 PDT 2017


It has come to my attention that a few of the plugins that create memory
layer polygons do not work correctly with the Geoprocessing Tools such as
Difference. Two examples include the "New Memory Layer" plugin (which is
being replaced by core) and my own Shape Tools plugin. I'm sure that others
out there have the same problem. What happens is that when you create the
polygons with these tools and you run the Geoprocessing algorithms such as
the Difference operator, you get features back that do not contain the
proper output polygons.

My question is how do I create these polygons to be valid to the new
Geoprocessing algorithms? Currently I do the following:

polygonLayer = QgsVectorLayer("Polygon?crs=epsg:4326", "Layer Name", "memory
")
ppolygon = polygonLayer.dataProvider()
...
featureout = QgsFeature()

featureout.setGeometry(QgsGeometry.fromPolygon([pts]))

# pts is an array of QgsPoints of the polygon vertices
ppolygon.addFeatures([featureout])
...
polygonLayer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayer(polygonLayer)

What needs to be different? One of my concerns is that the geoprocessing
algorithms takes the data, executes, fails to generate proper results, and
doesn't give the user any warning that the results may be wrong. I sure
hope this is only a memory layer issue and not also an issue with loading
data from files or databases.

Thanks,

Calvin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20171101/a6bd17f0/attachment.html>


More information about the QGIS-Developer mailing list