属性错误 'function' 对象没有属性 'DataType'
Attribute Error 'function' object has no attribute 'DataType'
我认为这是一个简单的解决方法,可能是因为我在 python。
我想要做的是使用这个 4 条带 NAIP 并创建一个 432 伪彩色图像。最终创建一个脚本,该脚本将 运行 通过数百个这些图像来实现,但这显然还很遥远。
我一直收到错误消息AttributeError: 'function' object has no attribute 'DataType'
如果我输入一个 DataType ex: gdal.GDT_Byte
(我不完全理解)然后我得到一个错误 AttributeError: 'function' object has no attribute 'shape'
这让我相信这个光栅和我使用的光栅之间有什么不同在 class 的类似函数中,或者我基本上读错了光栅。
这是我的完整代码:
import os
from osgeo import gdal
#change directory to data location
data_folder = r'my directory'
os.chdir(data_folder)
#open the .tif file and its bands, make sure they opened properly
ds = gdal.Open('example.tif')
if ds is None:
raise IOError('Cound not open raster ya n00b')
band1 = ds.GetRasterBand(1).ReadAsArray
if band1 is None:
raise IOError('bandz 1 didnt make her dance')
band2 = ds.GetRasterBand(2).ReadAsArray
if band2 is None:
raise IOError('bandz 2 didnt make her dance')
band3 = ds.GetRasterBand(3).ReadAsArray
if band3 is None:
raise IOError('bandz 3 didnt make her dance')
band4 = ds.GetRasterBand(4).ReadAsArray
if band4 is None:
raise IOError('bandz 4 didnt make her dance')
#Get the GeoTiff driver to create an output raster
gtiff_driver = gdal.GetDriverByName('GTiff')
#Get the data type name
data_type = band1.DataType
data_type = gdal.GetDataTypeName(data_type)
test_1 = gtiff_driver.Create('test_v1.tif', ds.RasterXSize, ds.RasterYSize, 3, gdal.GDT_Byte)
if test_1 is None:
raise IOError('Could not create raster test_1')
test_1.SetProjection(ds.GetProjection())
test_1.SetGeoTransform(ds.GetGeoTransform())
t1_band1 = test_1.GetRasterBand(1)
t1_band1.WriteArray(band4)
t1_band2 = test_1.GetRasterBand(2)
t1_band2.WriteArray(band3)
t1_band3 = test_1.GetRasterBand(3)
t1_band3.WriteArray(band2)
del t1_band1, t1_band2, t1_band3, test_1, ds
我觉得我在这里很愚蠢,但真的很感谢您的帮助。哦,我还在使用 Python 2,我知道我需要尽快切换。谢谢!
我想试试
band1 = ds.GetRasterBand(1).ReadAsArray()
结尾有括号。
圆括号是python调用函数并获取结果的语法。
没有括号,您已将 band1
设为 ReadAsArray
函数的同义词。
这在其他情况下可能会有所帮助,您可以这样做
band1 = ds.GetRasterBand(1).ReadAsArray
x = band1()
调用 ReadAsArray
但这不是你想做的
我认为这是一个简单的解决方法,可能是因为我在 python。
我想要做的是使用这个 4 条带 NAIP 并创建一个 432 伪彩色图像。最终创建一个脚本,该脚本将 运行 通过数百个这些图像来实现,但这显然还很遥远。
我一直收到错误消息AttributeError: 'function' object has no attribute 'DataType'
如果我输入一个 DataType ex: gdal.GDT_Byte
(我不完全理解)然后我得到一个错误 AttributeError: 'function' object has no attribute 'shape'
这让我相信这个光栅和我使用的光栅之间有什么不同在 class 的类似函数中,或者我基本上读错了光栅。
这是我的完整代码:
import os
from osgeo import gdal
#change directory to data location
data_folder = r'my directory'
os.chdir(data_folder)
#open the .tif file and its bands, make sure they opened properly
ds = gdal.Open('example.tif')
if ds is None:
raise IOError('Cound not open raster ya n00b')
band1 = ds.GetRasterBand(1).ReadAsArray
if band1 is None:
raise IOError('bandz 1 didnt make her dance')
band2 = ds.GetRasterBand(2).ReadAsArray
if band2 is None:
raise IOError('bandz 2 didnt make her dance')
band3 = ds.GetRasterBand(3).ReadAsArray
if band3 is None:
raise IOError('bandz 3 didnt make her dance')
band4 = ds.GetRasterBand(4).ReadAsArray
if band4 is None:
raise IOError('bandz 4 didnt make her dance')
#Get the GeoTiff driver to create an output raster
gtiff_driver = gdal.GetDriverByName('GTiff')
#Get the data type name
data_type = band1.DataType
data_type = gdal.GetDataTypeName(data_type)
test_1 = gtiff_driver.Create('test_v1.tif', ds.RasterXSize, ds.RasterYSize, 3, gdal.GDT_Byte)
if test_1 is None:
raise IOError('Could not create raster test_1')
test_1.SetProjection(ds.GetProjection())
test_1.SetGeoTransform(ds.GetGeoTransform())
t1_band1 = test_1.GetRasterBand(1)
t1_band1.WriteArray(band4)
t1_band2 = test_1.GetRasterBand(2)
t1_band2.WriteArray(band3)
t1_band3 = test_1.GetRasterBand(3)
t1_band3.WriteArray(band2)
del t1_band1, t1_band2, t1_band3, test_1, ds
我觉得我在这里很愚蠢,但真的很感谢您的帮助。哦,我还在使用 Python 2,我知道我需要尽快切换。谢谢!
我想试试
band1 = ds.GetRasterBand(1).ReadAsArray()
结尾有括号。
圆括号是python调用函数并获取结果的语法。
没有括号,您已将 band1
设为 ReadAsArray
函数的同义词。
这在其他情况下可能会有所帮助,您可以这样做
band1 = ds.GetRasterBand(1).ReadAsArray
x = band1()
调用 ReadAsArray
但这不是你想做的