2012-01-27 56 views
3

你好我是新的Gdal和即時通訊與我的代碼掙扎。在我的代碼中,一切看起來都很順利,最後的輸出帶是空的。當我指定255時,沒有數據值被設置爲256,所以我真的不知道什麼是錯的。感謝任何幫助,將不勝感激!python空輸出GDAL

這裏是我的代碼

from osgeo import gdal 
from osgeo import gdalconst 
from osgeo import osr 
from osgeo import ogr 
import numpy 

#graticule 
src_ds = gdal.Open("E:\\NFI_photo_plot\\photoplotdownloadAllCanada\\provincial_merge\\Aggregate\\graticule1.tif") 
band = src_ds.GetRasterBand(1) 
band.SetNoDataValue(0) 
graticule = band.ReadAsArray() 
print('graticule done') 
band="none" 

#Biomass 
dataset1 = gdal.Open("E:\\NFI_photo_plot\\photoplotdownloadAllCanada\provincial_merge\\Aggregate\\Biomass_NFI.tif") 
band1 = dataset1.GetRasterBand(1) 
band1.SetNoDataValue(-1) 
Biomass = band1.ReadAsArray() 
maskbiomass = numpy.greater(Biomass, -1).astype(int) 
print("biomass done") 
Biomass="none" 
band1="none" 
dataset1="none" 

#Baseline 
dataset2 = gdal.Open("E:\\NFI_photo_plot\\Baseline\\TOTBM_250.tif") 
band2 = dataset2.GetRasterBand(1) 
band2.SetNoDataValue(0) 
baseline = band2.ReadAsArray() 
maskbaseline = numpy.greater(baseline, 0).astype(int) 
print('baseline done') 
baseline="none" 
band2="none" 
dataset2="none" 

#sommation 
biosource=(graticule+maskbiomass+maskbaseline) 
biosource1=numpy.uint8(biosource) 
biosource="none" 

#Écriture 
dst_file="E:\\NFI_photo_plot\\photoplotdownloadAllCanada\\provincial_merge\\Aggregate\\Biosource.tif" 
dst_driver = gdal.GetDriverByName('GTiff') 
dst_ds = dst_driver.Create(dst_file, src_ds.RasterXSize, 
src_ds.RasterYSize, 1, gdal.GDT_Byte) 

#projection 
dst_ds.SetProjection(src_ds.GetProjection()) 
dst_ds.SetGeoTransform(src_ds.GetGeoTransform()) 
outband=dst_ds.GetRasterBand(1) 
outband.WriteArray(biosource1,0,0) 
outband.SetNoDataValue(255) 
biosource="none" 
graticule="none" 

回答

1

幾個要點:

  • 如果你有="none",這些需要是= None關閉/清理的對象,否則你設置的對象的字符陣列:none,這不是你打算做的。
  • 爲什麼你有band1.SetNoDataValue(-1),而其他NoData值是0?此數據源是已簽名還是未簽名?如果無符號,則-1不存在。
  • 當您在沒有訪問選項的情況下打開gdal.Open柵格時,它默認爲gdal.GA_ReadOnly,這意味着您的後續SetNoDataValue調用什麼也不做。如果要修改數據集,則需要使用gdal.GA_Update作爲第二個參數gdal.Open
  • 創建新光柵的另一種策略是使用driver.CreateCopy;詳情請參閱tutorial