所以这里是我的问题,我有一些光栅数据,我一直在使用python和GDAL读取这些光栅数据,并将它们合并到一个tiff中,然后我遇到了一些非常恼人的问题,首先我尝试获得每个光栅的一个波段,并将其合并到一个单一波段tiff中,它工作得很好,速度很快,花费了我大约5秒钟,然后我想,为什么不制作一个呢一个循环,所以我可以得到每个光栅中的每个波段,并将它们合并成一个多波段tiff,但时间成本远远超出我的想象,在每个光栅中得到三个波段,并将它们合并成一个单独的3波段光栅大约需要两分钟,我的意思是,通常情况下,如果合并一个波段tiff需要5秒,合并15秒不是很正常吗三个乐队的tiff?我希望有人能回答我的问题,真的很迷惑我,谢谢,这是我的部分代码
import os, time, gdal, numpy, glob,
start = time.time()
os.chdir(r'...\...\..')
a = glob.glob(r'*.tif')
#a function to get the layer extent of each raster
def get_extent(fn):
ds = gdal.Open(fn)
rows = ds.RasterYSize
cols = ds.RasterXSize
gt = ds.GetGeoTransform()
minx = gt[0]
maxy = gt[3]
maxx = gt[0] + gt[1] * rows
miny = gt[3] + gt[5] * cols
return (minx, maxy, maxx, miny)
#randmly get one raster's extent for later compare using
minX, maxY, maxX, minY = get_extent(a[0])
#comnpare all these raster's extent and compare their extent to get the output tiff's extent
for fn in a[1:]:
minx, maxy, maxx, miny = get_extent(fn)
minX = min(minX, minx)
maxY = max(maxY, maxy)
maxX = max(maxX, maxx)
minY = min(minY, miny)
# some settings for ouput tiff
in_ds = gdal.Open(a[0])
gt = in_ds.GetGeoTransform()
rows = int((maxX - minX)/abs(gt[5]))
cols = int((maxY - minY)/gt[1])
driver = in_ds.GetDriver()
out_ds = driver.Create(r'...\mosaic.tif', cols, rows, 3,
in_ds.GetRasterBand(1).DataType)
out_ds.SetProjection(in_ds.GetProjection())
gt = list(in_ds.GetGeoTransform())
gt[0], gt[3] = minX, maxY
out_ds.SetGeoTransform(gt)
#a loop to get 1 to 3 bands in output tiff and write the data into these bands
for i in range(1,4):
out_band = out_ds.GetRasterBand(i)
for fn in a:
in_ds = gdal.Open(fn)
trans = gdal.Transformer(in_ds, out_ds, [])
success, xyz = trans.TransformPoint(False, 0, 0)
x, y, z = map(int, xyz)
data = in_ds.GetRasterBand(i).ReadAsArray()
out_band.WriteArray(data, x, y)
out_ds.FlushCache()
out_ds = None
in_ds = None
end = time.time()
print(end-start)
你可以把你的循环分成3个,然后加一个计时器。基本上,删除for循环并为每个频带将其划分为3个部分,然后实现它们以查看实现之间的时间差。这会告诉你哪个乐队花了多少时间。我认为答案是乐队的内容。使用一个乐队可能比其他乐队花费更多或更少的时间。我建议你,划分你的循环,看看每个乐队花费多少时间。那你看看乐队里面有什么。你知道吗
相关问题 更多 >
编程相关推荐