Luego de mirar en diversos repositorios y páginas finalmente hemos dado con la respuesta que te enseñamos más adelante.
Solución:
Uso rasterio de Sean Gillies. Se puede combinar fácilmente con Fiona (lee y escribe shapefiles) y shapely del mismo autor.
En el script rasterio_polygonize.py el principio es
import rasterio
from rasterio.features import shapes
mask = None
with rasterio.Env():
with rasterio.open('a_raster') as src:
image = src.read(1) # first band
results = (
'properties': 'raster_val': v, 'geometry': s
for i, (s, v)
in enumerate(
shapes(image, mask=mask, transform=src.transform)))
El resultado es un generador de características de GeoJSON
geoms = list(results)
# first feature
print geoms[0]
'geometry': 'type': 'Polygon', 'coordinates': [[(202086.577, 90534.3504440678), (202086.577, 90498.96207), (202121.96537406777, 90498.96207), (202121.96537406777, 90534.3504440678), (202086.577, 90534.3504440678)]], 'properties': 'raster_val': 170.52000427246094
Que puedes transformar en geometrías bien formadas
from shapely.geometry import shape
print shape(geoms[0]['geometry'])
POLYGON ((202086.577 90534.35044406779, 202086.577 90498.96206999999, 202121.9653740678 90498.96206999999, 202121.9653740678 90534.35044406779, 202086.577 90534.35044406779))
Cree marcos de datos de geopandas y habilite funcionalidades fáciles de usar de unión espacial, trazado, guardar como geojson, archivo de forma ESRI, etc.
geoms = list(results)
import geopandas as gp
gpd_polygonized_raster = gp.GeoDataFrame.from_features(geoms)
Aquí está mi implementación.
from osgeo import ogr, gdal, osr
from osgeo.gdalnumeric import *
from osgeo.gdalconst import *
import fiona
from shapely.geometry import shape
import rasterio.features
#segimg=glob.glob('Poly.tif')[0]
#src_ds = gdal.Open(segimg, GA_ReadOnly )
#srcband=src_ds.GetRasterBand(1)
#myarray=srcband.ReadAsArray()
#these lines use gdal to import an image. 'myarray' can be any numpy array
mypoly=[]
for vec in rasterio.features.shapes(myarray):
mypoly.append(shape(vec))
La forma de instalar rasterio es ‘conda install -c https://conda.anaconda.org/ioos rasterio’, si hay un problema de instalación.
valoraciones y reseñas
Acuérdate de que te brindamos la opción de comentar .