3

こんにちは、Gdal は初めてで、コードに苦労しています。私のコードではすべてがうまくいっているように見えますが、最後の出力バンドは空です。255 を指定すると no data 値が 256 に設定されるので、何が悪いのかよくわかりません。ありがとうございました。

これが私のコードです

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"
4

1 に答える 1

1

いくつかの指針:

  • がある場合="none"、これら= Noneはオブジェクトを閉じる/クリーンアップする必要があります。そうしないと、オブジェクトを文字の配列に設定します: n o n e、これは意図したものではありません。
  • band1.SetNoDataValue(-1)他の NoData 値が 0 であるのに、なぜ があるのですか? このデータ ソースは署名されていますか、それとも署名されていませんか? 署名されていない場合、-1 は存在しません。
  • gdal.Openアクセス オプションを指定せずにラスターを開くと、デフォルトで に設定されgdal.GA_ReadOnlyます。これは、以降のSetNoDataValue呼び出しで何も行われないことを意味します。gdal.GA_Updateデータセットを変更する場合は、 の 2 番目のパラメーターとしてを使用する必要がありますgdal.Open
  • 新しいラスターを作成するもう 1 つの方法は、 を使用することdriver.CreateCopyです。詳細については、チュートリアルを参照してください。
于 2012-01-29T22:04:04.190 に答える