Utilisez rasterio de Sean Gillies. Il peut être facilement combiné avec Fiona (lire et écrire des fichiers de formes) et bien fait du même auteur.
Dans le script rasterio_polygonize.py,
le début est
import rasterio
from rasterio.features import shapes
mask = None
with rasterio.drivers():
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.affine)))
Le résultat est un générateur de fonctionnalités 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 vous pouvez transformer en géométries galbées
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))
Créez des géopandas Dataframe et activez des fonctionnalités faciles à utiliser de jointure spatiale, de traçage, d'enregistrement en tant que geojson, ESRI shapefile etc.
geoms = list(results)
import geopandas as gp
gpd_polygonized_raster = gp.GeoDataFrame.from_features(geoms)
if value > src.nodata
à la liste la compréhension pour utiliser la valeur nodata de la source et supprimer toutes les formes qui lui correspondent. Je ne sais pas ce qui se passerait en l'absence de nodata vaue. : o)Voici ma mise en œuvre.
La façon d'installer rasterio est en 'conda install -c https://conda.anaconda.org/ioos rasterio', s'il y a un problème d'installation.
la source
myarray=srcband.ReadAsArray() #or any array