2012-01-27 90 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