[Qgis-developer] geometry operation (python) crashes QGIS

Dominik Fröhlich dominik.froehlich at venus.uni-freiburg.de
Mon Oct 29 04:26:25 PDT 2012


Der QGIS developers,

I'm trying to write a python plugin to reate input data for one of our 
models. It basicly converts three shape files with special fields to a 
text file.

I have a buildings vector (polygon) layer containing three polygons 
(which I created for testing). This layer is called "build" in the code. 
To extract its geometries, I wrote a little function:

def extract_poly_geometry(self, layer):
feature = QgsFeature()
geom_list = []
while layer.dataProvider().nextFeature(feature):
geom_list.append(feature.geometry())
return geom_list

In the main part of my program it is called by "theINPolyShapeField = 
self.extract_poly_geometry(build)". "len(theINPolyShapeField)" returnes 3.

Later I iterate over the polygons and try to run some code for each of them:

for a in range(0, (len(theINPolyShapeField) - 1), 1): # going through 
buildings (polygons)
thepoly = theINPolyShapeField[a] # extract building number a
QMessageBox.information(None, "DEBUG:", str(thepoly))
# polyarea = float(thepoly.area()) --> carashes QGIS (segmentation fault)
QMessageBox.information(None, "DEBUG:", str(thepoly.asPolygon()))

I use the QMessageBoxes for debuging. The first one returns 
"qgis.core.QgsGeometry object at 0xbbe889c", which I assume is correct. 
The second one however deliveres an empty list, "[]".

I then tried to convert the geometry to MultyPoint by 
"str(thepoly.asMultiPoint()" and was trying to display the result using 
"QMessageBox.information(None, "DEBUG:", str(thepoly.asMultiPoint()))" 
to have a look at the points, but this also crashes QGIS with 
segmentation fault…

I checked the type of thepoly on the console by 
"print(thepoly.wkbType())" which returns "3". According to Quantum GIS 
API Documentation this means "WKBPolygon". So thepoly is a polygon, is it?

I tried thepoly.validateGeometry() on the python console to track down 
the error. When I tried it for my first geometry, it returned "[]". A 
call for the second one crashed QGIS with segmentation fault…

I'm afraid I'm stuck…

Regards,
Dominik


More information about the Qgis-developer mailing list