Mam problem z użyciem funkcji Polygonize w Pythonie. Przykład książki kucharskiej na ten temat można znaleźć tutaj .
Odpowiednia część mojego kodu to:
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
Wiem, że zespół ma odpowiednie informacje, oto fragment 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.],
Kiedy otwieram tabelę atrybutów w QGIS, jest pusta:
Edytować:
Konwersja działa dobrze w QGIS przy użyciu narzędzia Raster -> Konwersja -> Narzędzie poligonizacji
Zrzut ekranu rastra do poligonizacji:
I zrzut ekranu wynikowej konwersji z narzędzia QGIS:
Używam dystrybucji Enthought na Windows 7, GDAL wersja 1.10.0-3
Problem polega na tym, że nie mogę poligonizować rastra w pythonie za pomocą GDAL i przykładu książki kucharskiej, mogę poligonizować ten sam raster bez problemu w GUI QGIS
Odpowiedzi:
Problem polega na tym, że nie tworzyłem pola do przechowywania pasma rastrowego. Po przekopaniu się przez plik gdal_polygonize.py zdałem sobie sprawę, że nie dzieje się to automatycznie podczas wywoływania gdal.Polygonize, który zamiast tego używa funkcji tutaj znalezionej .
Oto dodatkowy krok potrzebny do utworzenia pola i napisania pasma w polu:
Następnie możemy zapisać pasmo w tym polu o indeksie 0:
źródło