Rasterio无法加载VRT

时间:2018-04-07 09:49:05

标签: gdal rasterio

RasterIO无法加载VRT

我使用rasterio加载由pymodis.convertmodis_gdal.createMosaicGDAL生成的VRT文件。没问题,直到最近我重新安装了Ubuntu OS和python包,对于rasterio也是如此。现在,加载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。我不确定迁移到Python 3.5是否是主要原因。

1 个答案:

答案 0 :(得分:1)

我了解到,当我的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文件。