A point inside a polygon
canvas = qgis.utils.iface.mapCanvas()
aLayer = canvas.layer(0) # or code to select the layer of interest
for f in aLayer.getFeatures():
geom = f.geometry()
p = geom.pointOnSurface()
print p.asPoint()
Get Inner Rings
canvas = qgis.utils.iface.mapCanvas()
aLayer = canvas.layer(0) # or code to select the layer of interest
for f in aLayer.getFeatures():
geom = f.geometry()
if len(geom.asPolygon()) > 1 : # we have inner rings
print geom.asPolygon()[1:]
You are getting that error because you have the ShapeFile open. So it cannot recreate it.
But I ran your script and got a different error:
Traceback (most recent call last):
File "test.py", line 48, in <module>
main(coords, out_shp)
File "test.py", line 43, in main
write_shapefile(poly, out_shp)
File "test.py", line 32, in write_shapefile
geom = ogr.CreateGeometryFromWkb(poly.wkb)
AttributeError: 'str' object has no attribute 'wkb'
You seem to be trying to extract Well Known Binary (WKB) from Well Know Text (WKT).
You already get the WKT representation from:
return poly.ExportToWkt()
So to fix it just use the Wkt geometry creator instead of the Wkb.
Change:
geom = ogr.CreateGeometryFromWkb(poly.wkb)
To:
geom = ogr.CreateGeometryFromWkt(poly)
Best Answer
I would substitute the for loop for: