J'ai besoin de pixelliser un fichier de formes vraiment simple un peu comme ceci http://tinyurl.com/odfbanu . Ce qui est juste un fichier de formes contenant des pays aux États-Unis.J'ai vu cette réponse précédente: GDAL RasterizeLayer ne brûle pas tous les polygones en raster? mais je me demandais s'il y avait un moyen de le faire en utilisant Geopandas ou fiona et peut-être rasterio pour la partie d'écriture tiff.
Mon objectif est donc de le pixelliser et d'attribuer une valeur à chaque polygone partageant une valeur commune, LSAD dans l'exempe.
J'ai donc écrit le début du code inspiré du shongololo dans le fil: Dissoudre des polygones basés sur des attributs avec Python (galbe, fiona)? .
from geopandas import GeoDataFrame
name_in = 'cb_2013_us_county_20m.shp'
#Open the file with geopandas
counties = GeoDataFrame.from_file(name_in)
#Add a column to the Geodataframe containing the new value
for i in range (len(counties)):
LSAD = counties.at[i,'LSAD']
if LSAD == 00 :
counties['LSAD_NUM'] == 'A'
elif LSAD == 03 :
counties['LSAD_NUM'] == 'B'
elif LSAD == 04 :
counties['LSAD_NUM'] == 'C'
elif LSAD == 05 :
counties['LSAD_NUM'] == 'D'
elif LSAD == 06 :
counties['LSAD_NUM'] == 'E'
elif LSAD == 13 :
counties['LSAD_NUM'] == 'F'
elif LSAD == 15 :
counties['LSAD_NUM'] == 'G'
elif LSAD == 25 :
counties['LSAD_NUM'] == 'I'
else :
counties['LSAD_NUM'] == 'NA'
Des trucs vraiment faciles alors maintenant je me demande comment puis-je réellement écrire ces formes sur un tiff. J'ai commencé à travailler avec Geopandas car je pensais que c'était la meilleure option, mais si vous avez une suggestion de Fiona, je suis d'accord.
J'ai trouvé un morceau de code de rasterio qui semble pouvoir prendre une géométrie galbée et la graver dans un nouveau raster http://tinyurl.com/op49uek
# I guess that my goal should be to load my list of geometries under geometry to be able to pass it to rasterio later on
geometry = {'type':'Polygon','coordinates':[[(2,2),(2,4.25),(4.25,4.25),(4.25,2),(2,2)]]}
with rasterio.drivers():
result = rasterize([geometry], out_shape=(rows, cols))
with rasterio.open(
"test.tif",
'w',
driver='GTiff',
width=cols,
height=rows,
count=1,
dtype=numpy.uint8,
nodata=0,
transform=IDENTITY,
crs={'init': "EPSG:4326"}) as out:
out.write_band(1, result.astype(numpy.uint8))