我想将多个 GeoTiff 文件存储在一个 HDF5 文件中,以便使用它进行进一步分析,因为我应该使用的函数只能处理 HDF5(所以基本上就像 R 中的栅格堆栈,但存储在 HDF5 中)。我必须使用Python。我对 HDF5 格式(以及 Python 中的地理分析)相对较新,并且真的不知道如何解决这个问题。特别是保留地理位置/投影信息对我来说似乎很棘手。到目前为止我尝试过:
import h5py
import rasterio
r1 = rasterio.open("filename.tif")
r2 = rasterio.open("filename2.tif")
with h5py.File('path/test.h5', 'w') as hdf:
hdf.create_dataset('GeoTiff1', data=r1)
hdf.create_dataset('GeoTiff2', data=r2)
产生以下错误:
TypeError: Object dtype dtype('O') has no native HDF5 equivalent
我很确定这根本不是正确的方法,我很高兴收到任何建议。
你可以尝试这样做:
import numpy as np
spec_dtype = h5py.special_dtype(vlen=np.dtype('float64'))
只需创建一个 float64 类型的 spec_dtype 变量,然后将其应用于 create_dataset:
with h5py.File('path/test.h5', 'w') as hdf:
hdf.create_dataset('GeoTiff1', data=r1,, dtype=spec_dtype)
hdf.create_dataset('GeoTiff2', data=r2,, dtype=spec_dtype)
应用这些,希望它会起作用。
在Python中使用HDFql,您的用例可以解决如下:
import HDFql
HDFql.execute("CREATE DATASET path/test.h5 GeoTiff1 VALUES FROM BINARY FILE filename.tif")
HDFql.execute("CREATE DATASET path/test.h5 GeoTiff2 VALUES FROM BINARY FILE filename2.tif")
相当老的问题,但问题是您正在尝试保存文件引用而不是实际数据。
import h5py
import rasterio
with rasterio.open("filename.tif") as f:
r1 = f.read()
with rasterio.open("filename2.tif") as f:
r2 = f.read()
r2 =
with h5py.File('path/test.h5', 'w') as hdf:
hdf.create_dataset('GeoTiff1', data=r1)
hdf.create_dataset('GeoTiff2', data=r2)