在Python中将多个GeoTiff存储在HDF5文件中

问题描述 投票:0回答:3

我想将多个 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

我很确定这根本不是正确的方法,我很高兴收到任何建议。

python hdf5 geotiff
3个回答
0
投票

你可以尝试这样做:

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)

应用这些,希望它会起作用。


0
投票

在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")

0
投票

相当老的问题,但问题是您正在尝试保存文件引用而不是实际数据。

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)
© www.soinside.com 2019 - 2024. All rights reserved.