Saya mengalami masalah menggunakan fungsi Polygonize di python. Contoh buku resep untuk ini dapat ditemukan di sini .
Bagian yang relevan dari kode saya adalah:
sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None
Saya tahu bahwa band ini memiliki informasi yang relevan, berikut adalah cuplikan dari bandArray
:
array([[ 4., 4., 3., 3., 3., 2., 2., 2., 2., 3., 3., 3., 3.,
3., 3., 3., 3., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4.],
Ketika saya membuka tabel atribut di QGIS, itu kosong:
Edit:
Konversi berfungsi dengan baik di QGIS menggunakan Raster -> Conversion -> Polygonize tool
Cuplikan layar raster yang akan dipoligonisasi:
Dan tangkapan layar konversi yang dihasilkan dari alat QGIS:
Saya menggunakan distro Enthought pada Windows 7, GDAL versi 1.10.0-3
Masalahnya adalah bahwa saya tidak dapat mempolarisasi raster di python menggunakan GDAL dan contoh buku masak, saya bisa mempolimerisasi raster yang sama ini tanpa masalah di GUI QGIS
Jawaban:
Masalahnya adalah saya tidak membuat bidang untuk menyimpan band raster. Setelah menggali melalui file gdal_polygonize.py, saya menyadari ini tidak secara otomatis dilakukan saat memanggil gdal.Polygonize, yang alih-alih menggunakan fungsi yang ditemukan di sini .
Inilah langkah ekstra yang diperlukan untuk membuat bidang dan menulis band ke bidang:
Kami kemudian dapat menulis band ke bidang ini, dengan indeks 0:
sumber