微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 geopandas 从 S3 读取文件地理数据库的驱动程序错误

如何解决使用 geopandas 从 S3 读取文件地理数据库的驱动程序错误

我正在尝试使用 geopandas python 库将文件地理数据库文件读入地理数据框。地理数据库文件位于 S3 上,因此我使用 fssspec 读取它,但出现错误

import geopandas as gpd
import fsspec

fs = fsspec.filesystem('s3',profile='my-profile',anon=False)

它可以读取 geojson 文件

# this runs w/o error
g_file = fs.open("my-bucket/my-file.geojson")
gdf = gpd.read_file(g_file)

这会导致错误

gbd_file = fs.open("my-bucket/my-file.gdb/")
gdf = gpd.read_file(gdb_file,driver="FileGDB")

这是错误回溯:

---------------------------------------------------------------------------
CPLE_OpenFailedError                      Traceback (most recent call last)
fiona/_shim.pyx in fiona._shim.gdal_open_vector()

fiona/_err.pyx in fiona._err.exc_wrap_pointer()

CPLE_OpenFailedError: '/vsimem/83f6a4d8051c449c86c4c608520eb998' not recognized as a supported file format.

During handling of the above exception,another exception occurred:

DriverError                               Traceback (most recent call last)
<ipython-input-33-7245da312526> in <module>
----> 1 gdf = gpd.read_file(file,driver='FileGDB')

~/my-conda-envs/nwm/lib/python3.7/site-packages/geopandas/io/file.py in _read_file(filename,bBox,mask,rows,**kwargs)
    158 
    159     with fiona_env():
--> 160         with reader(path_or_bytes,**kwargs) as features:
    161 
    162             # In a future Fiona release the crs attribute of features will

~/my-conda-envs/nwm/lib/python3.7/site-packages/fiona/collection.py in __init__(self,bytesbuf,**kwds)
    554         # Instantiate the parent class.
    555         super(BytesCollection,self).__init__(self.virtual_file,vsi=filetype,--> 556                                               encoding='utf-8',**kwds)
    557 
    558     def close(self):

~/my-conda-envs/nwm/lib/python3.7/site-packages/fiona/collection.py in __init__(self,path,mode,driver,schema,crs,encoding,layer,vsi,archive,enabled_drivers,crs_wkt,ignore_fields,ignore_geometry,**kwargs)
    160             if self.mode == 'r':
    161                 self.session = Session()
--> 162                 self.session.start(self,**kwargs)
    163             elif self.mode in ('a','w'):
    164                 self.session = WritingSession()

fiona/ogrext.pyx in fiona.ogrext.Session.start()

fiona/_shim.pyx in fiona._shim.gdal_open_vector()

DriverError: '/vsimem/83f6a4d8051c449c86c4c608520eb998' not recognized as a supported file format.

一个潜在的线索: 我可以通过简单的方式让它工作:

gdf = gpd.read_file("s3://my-bucket/my-file.gdb/",driver="FileGDB")

但仅在属于存储桶访问策略一部分的机器上。我想要的是使用存储在 my-profile 配置文件中的 AWS 凭证从任何机器访问数据。

不幸的是,我无法提供重现错误方法,因为我在云上进行所有操作。它在本地运行良好...

解决方法

我们在使用 S3 位置和 shapefile(甚至可能具有只读权限的 NAS 文件夹)的只读密钥时遇到了类似的问题。

您可以同时使用具有读写权限的密钥和具有只读权限的密钥吗?我的猜测是,即使只需要读取,后端的 gdal 驱动程序也需要写入权限/访问权限。

在错误跟踪的最后部分暗示了驱动程序问题

fiona/_shim.pyx in fiona._shim.gdal_open_vector()
DriverError: ...

如果有人可以确认 gdal 驱动程序所需权限的具体细节,那就太好了!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?