RasterIO无法加载VRT
我使用rasterio加载由pymodis.convertmodis_gdal.createMosaicGDAL生成的VRT文件。直到最近我为rasterio重新安装了Ubuntu OS和python包,这都没有问题。现在,当加载VRT文件时,我得到以下错误:
例如,我在MOD09A1__2018049__sur_refl_b01.vrt中读到
ERROR 4: HDF4_EOS:EOS_GRID:/dev/sdf/MOD09A1/MOD09A1.A2000049.h20v04.006.2015136143235.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01: No such file or directory
Process ModisBaseGraph-4:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/rasterio/mask.py", line 182, in mask
out_image = raster.read(window=window, out_shape=out_shape, masked=True)
File "rasterio/_io.pyx", line 330, in rasterio._io.DatasetReaderBase.read
File "rasterio/_io.pyx", line 591, in rasterio._io.DatasetReaderBase._read
OSError: Read or write failed文件/dev/sdf/MOD09A1/MOD09A1.A2000049.h20v04.006.2015136143235.hdf是有效路径,因此该文件确实存在!
而GDAL-Python可以加载它
当我使用pyModis将HDF MODIS瓦片马赛克为VRT文件时,我验证了.vrt文件的真实性。为此,我使用python-gdal加载文件并读取栅格数组。使用Python GDAL一切顺利。我假设rasterio也是基于GDAL的,所以我不明白为什么它会抛出上面这样的异常。
In [1]: from osgeo import gdal
In [2]: ds = gdal.Open('MOD09A1__2018049__sur_refl_b01.vrt')
In [3]: band = ds.GetRasterBand(1)
In [4]: array = band.ReadAsArray()VRT文件示例
<VRTDataset rasterXSize="4800" rasterYSize="2400">
<SRS>PROJCS["unnamed",GEOGCS["Unknown datum based upon the custom spheroid",DATUM["Not specified (based on custom spheroid)",SPHEROID["Custom spheroid",6371007.181,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Sinusoidal"],PARAMETER["longitude_of_center",0],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]</SRS>
<GeoTransform>1111950.519667, 463.3127165279167, 0, 6671703.118, 0, -463.3127165279165</GeoTransform>
<VRTRasterBand dataType="Int16" band="1">
<NoDataValue>-28672</NoDataValue>
<ColorInterp>Gray</ColorInterp>
<ComplexSource>
<SourceFilename relativeToVRT="0">HDF4_EOS:EOS_GRID:/dev/sdf/MOD09A1/MOD09A1.A2018049.h20v03.006.2018060011348.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01</SourceFilename>
<SourceBand>1</SourceBand>
<SourceProperties RasterXSize="2400" RasterYSize="2400" DataType="Int16" BlockXSize="2400" BlockYSize="32" />
<SrcRect xOff="0" yOff="0" xSize="2400" ySize="2400" />
<DstRect xOff="2399" yOff="0" xSize="2400" ySize="2400" />
<NODATA>-28672</NODATA>
</ComplexSource>
<ComplexSource>
<SourceFilename relativeToVRT="0">HDF4_EOS:EOS_GRID:/dev/sdf/MOD09A1/MOD09A1.A2018049.h19v03.006.2018060011204.hdf:MOD_Grid_500m_Surface_Reflectance:sur_refl_b01</SourceFilename>
<SourceBand>1</SourceBand>
<SourceProperties RasterXSize="2400" RasterYSize="2400" DataType="Int16" BlockXSize="2400" BlockYSize="32" />
<SrcRect xOff="0" yOff="0" xSize="2400" ySize="2400" />
<DstRect xOff="0" yOff="0" xSize="2400" ySize="2400" />
<NODATA>-28672</NODATA>
</ComplexSource>
</VRTRasterBand>
</VRTDataset>操作系统和软件包版本
Ubuntu 16.04,Python 3.5.2 RasterIO 1.0a12 pyModis 2.0.9
以前,当rasterio工作正常时,我使用的是Python 2.7。我不确定迁移到Python3.5是否是主要原因。
发布于 2018-04-07 20:25:21
我了解到,当我的GDAL库不在其默认系统路径(/usr/lib,/usr/local/lib)中时,从pip安装rasterio时,rasterio无法打开栅格,因为它无法链接到底层GDAL库。然而,由于未知的原因,安装仍然很顺利,尽管没有找到GDAL库,但仍然可以导入rasterio。
我决定从源码开始构建rasterio。因此,除非我将GDAL安装到/usr/local这样的典型位置,否则我必须手动配置gdal-config的路径,并让setup.py脚本知道,
sudo GDAL_CONFIG=/opt/gdal-2.2.4/bin/gdal-config python3 setup.py develop现在可以通过rasterio加载VRT文件。
https://stackoverflow.com/questions/49706031
复制相似问题