Ich muss ein wirklich einfaches Shapefile ein bisschen wie dieses http://tinyurl.com/odfbanu rastern . Welches ist nur ein Shapefile, das Counties in den USA umfasst. Ich habe diese vorherige Antwort gesehen: GDAL RasterizeLayer brennt nicht alle Polygone zu Raster? aber ich habe mich gefragt, ob es eine Möglichkeit gibt, dies mit Geopandas oder Fiona und vielleicht Rasterio für den Tiff-Schreibteil zu tun.
Mein Ziel ist es also, es zu rastern und jedem Polygon, das einen gemeinsamen Wert, LSAD im Beispiel, teilt, einen Wert zuzuweisen.
Also schrieb ich den Anfang des von Shongololo inspirierten Codes in den Thread: Auflösen von Polygonen basierend auf Attributen mit Python (Shapely, 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'
Wirklich einfaches Zeug, also frage ich mich jetzt, wie ich diese Formen tatsächlich auf einen Tiff schreiben kann. Ich begann mit Geopandas zu arbeiten, da ich glaubte, dass dies die beste Option sei, aber wenn Sie einen Fiona-Vorschlag haben, bin ich auch dazu bereit.
Ich habe einen Code von rasterio gefunden, der in der Lage zu sein scheint, eine formschöne Geometrie in ein neues Raster zu brennen 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))