Saya perlu merasterisasi shapefile yang sangat sederhana sedikit seperti ini http://tinyurl.com/odfbanu . Yang hanya merupakan negara coutaining shapefile di AS. Saya telah melihat jawaban sebelumnya: GDAL RasterizeLayer tidak Membakar Semua Poligon ke Raster? tapi saya bertanya-tanya apakah ada cara untuk melakukannya menggunakan Geopanda atau fiona dan mungkin rasterio untuk bagian penulisan tiff.
Jadi tujuan saya adalah merasterisasi dan menetapkan nilai untuk setiap poligon yang berbagi nilai umum, LSAD dalam pengecualian.
Jadi saya menulis awal kode yang terinspirasi oleh shongololo di utas: Melarutkan poligon berdasarkan atribut dengan Python (rupawan, 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'
Benar-benar hal yang mudah jadi sekarang saya bertanya-tanya bagaimana saya bisa benar-benar menulis bentuk-bentuk itu ke tiff. Saya mulai bekerja dengan Geopanda karena saya percaya itu adalah pilihan terbaik tetapi jika Anda memiliki saran fiona saya siap untuk itu juga.
Saya menemukan sepotong kode dari rasterio yang tampaknya dapat mengambil bentuk geometri dan membakarnya menjadi raster baru 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))