Estoy escribiendo una rutina para crear la envolvente del casco convexo alrededor de shapefiles de islas. Podría leer los datos, extraer los vértices de los polígonos en una geometría y luego calcular el casco convexo.
Ahora tengo que guardarlo en un shapefile de polígonos.
¿Hay alguna manera de transformar la geometría (llamada convexHull
en mi código) devuelto por el método convexHull en una geometría de polígono; o estoy obligado a analizar todos los vértices de convexHull
y crear un anillo de un polígono?
def doConvexHull(infile, outfile):
inH = ogr.Open(infile, 0)
if inH is None:
usage("Could not open file {0}. Exit.".format(infile))
layer = inH.GetLayer()
# get all polygons
thisGeometry = ogr.Geometry(ogr.wkbPoint)
for index in xrange(layer.GetFeatureCount()):
feature = layer.GetFeature(index)
geometry = feature.GetGeometryRef()
ring = geometry.GetGeometryRef(0)
points = ring.GetPointCount()
for p in xrange(points):
lon, lat, z = ring.GetPoint(p)
thisGeometry.AddPoint(lon, lat)
convexHull = thisGeometry.ConvexHull()
drv = ogr.GetDriverByName( "ESRI Shapefile" )
ds = drv.CreateDataSource( outfile )
if ds is None:
usage("Could not create file {0}".format( outfile) )
lyrname = "convexHull_${0}".format( layer.GetName() )
lyr = ds.CreateLayer( lyrname, layer.GetSpatialRef(), ogr.wkbPolygon )
thisFeature = ogr.Feature( layer.GetLayerDefn() )
thisFeature.SetGeometry( convexHull )
lyr.CreateFeature( thisFeature ): error from geometry