如何在Fiona中添加对FileGDB(Esri文件gdb API)驱动程序的支持?


13

对此有很多问题,但没有一个解决了我的问题。

我有一台机器有:

  • Windows 7 x64
  • Python 3.4.3 x64
  • @中安装:gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal是GDAL-1.11.4-cp34-none-win_amd64.whl这里通过轮子安装的

GDAL已安装到中C:\Python34\Lib\site-packages\osgeo。在那里,我有一堆用于gdal和ogr以及.pyd文件的.exe文件。

  • 安装了fiona:是Fiona-1.6.3-cp34-none-win_amd64.whl从同一网站上的wheel安装的。

我能够运行以下代码,并且可以成功执行:

import gdal
import ogr
from gdalconst import *

shp = r"C:\Data\GIS\PTS.shp"
driver = ogr.GetDriverByName('ESRI Shapefile')

dataset = driver.Open(shp)    
layer = dataset.GetLayer()
layer.GetFeatureCount()    
schema = layer.schema
fields = [field.GetName() for field in schema]    
feature = layer.GetNextFeature()

我还可以获得OGR格式:ogrinfo --formats在Windows cmd中打印一堆(尽管那里没有FileGDB)。

我能够运行以下代码,并且可以成功执行:

import fiona
with fiona.drivers():
  with fiona.open(path=r'C:\Data\GIS\TemplateData.gdb', driver='OpenFileGDB') as source:
    print(source.meta)

但是,此代码将无法运行:

with fiona.drivers():
    with fiona.open(path=r'C:\Data\GIS\TemplateData.gdb', driver='FileGDB') as source:
        print(source.meta)

因为我没有Esri File GDB编译的必需库。

我已经FileGDB_API_VS2012_1_3.zipEsri下载页面下载并解压缩了。据我了解,由于.dll已经存在,因此无需编译任何内容。

注册Esri File GDB API的dll以便能够在我的环境中的fiona中使用的正确程序是什么?


更新:(基于卢克的回答)

我已经File Geodatabase API 1.4 version for Windows (Visual Studio 2010)Esri下载页面下载了。我复制了FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllC:\Python34\Lib\site-packages\osgeo。现在,我在这里两个文件,ogr_FileGDB.dllFileGDBAPI.dll

我创建了一个Windows变量GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins。在PATH变量中,除了,我没有任何Python特定的东西C:\Python34\Lib\site-packages\osgeo

现在,运行ogrinfo --formatsI时-> "FileGDB" (read/write),我可以使用Python代码与FileGDB驱动程序一起使用。


1.4 File Geodatabase API现已发布了很一段时间。确实没有理由使用1.3。
文斯

@Luke,谢谢,但是我需要对gdb的写权限。Afaik,您只能使用OpenFileGDB进行阅读...任何特定的链接或文档页面如何通过编译来实现,以及如何指向dll(通过Windows变量等)?将会非常有帮助。
Alex Tereshenkov '16

@Vince,我不介意使用1.4或任何其他允许我编辑文件gdb的版本:)我缺少文档页面/规范,并带有明确说明如何执行此操作。
Alex Tereshenkov '16

@AlexTereshenkov在使用64位python时,将Esri bin64 \ FileGDBAPI.dll复制到[python install dir]\Lib\site-packages\osgeo我在答案中指定的目录,而不是您在编辑中提到的gdalplugins目录。只有驱动程序插件才会进入该目录,而不是第三方dll。
user2856 '16

1
@ AlexTereshenkov,ogr_FileGDB.dll是FileGDB 驱动程序(不是内置于gdal / ogr中的OpenFileGDB)。该dll是从GDAL / OGR 驱动程序代码编译而来的。它必须位于GDAL_DRIVER_PATH env var指定的目录中。
user2856 '16

Answers:


9

所述Gohlke GDAL / OGR轮包括编译为插件的FileGDB驱动程序。

要使FileGDB驱动程序正常工作:

  1. 将Esri bin64 \ FileGDB.dll复制到[python install/virtualenv dir]\Lib\site-packages\osgeo(如果使用32位python,则使用bin \ FileGDB.dll)。不要将FileGDB.dll复制到gdalplugins目录。
  2. 设置GDAL_DRIVER_PATH环境变量:
    • 手动 要么
    • 编辑[python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.py并取消注释第10行。
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

现在可以使用FileGDB驱动程序打开GDB。

>>> import fiona
>>> with fiona.drivers():
...     with fiona.open(path=r'C:\Temp\Default.gdb', driver='FileGDB') as source:
...         print(source.meta)
...
{'crs': {'init': u'epsg:4326'}, 'driver': 'FileGDB', 'crs_wkt': u'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01
74532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', 'schema': {'geometry': 'MultiPolygon', 'properties': OrderedDict([(u'SHAPE_Length', 'float'), (u'SHAPE_Area', 'float')])}}
>>>

注意:

使用Python 2.7,我只能使FileGDB插件与FileGDB API v1.3(MSVC 2008)一起使用。作为v.1.4 segfaults python。我认为这是因为Gohlke提供的python以及GDAL和Fiona库是用MSVC 2008编译的,而v。1.4是用MSVC 2010(及更高版本)编译的。

FileGDB API v1.4可以与Python 3.4以及Gohlke提供的GDAL和Fiona库(由MSVC 2010进行编译)完美配合。


bin64\FileGDBAPI.dll要从FileGDB_API_1_5_1-VS2010.zip位于github.com/Esri/file-geodatabase-api/tree/master/的副本进行复制,step 1以使其正常运行(在Python 3.5 64bit中)
Mattijn

我的gdal是geopandas使用miniconda命令行自动安装的conda install geopandas。在__init__.py第10行已经取消注释,所以我不认为这是你指的是行。也没有gdalplugins文件
user32882 '19

@ user32882这些说明不适用于已安装
conda的

如何设置为conda?这可能吗?
user32882 '19

4

关键信息在这里:

我也能够获得OGR格式:ogrinfo --formats在Windows cmd中打印了一堆(尽管那里没有FileGDB)。

这告诉我您的GDAL_DRIVER_PATH环境变量未设置。请参阅https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver中的说明。一旦在ogrinfo --formats(或fio env --formats)中显示“ FileGDB” ,就可以了。


谢谢。您有时间在GIS.SE上回答问题感到惊讶-您可能正忙于处理fiona,身材匀称的东西。恭喜,您写的东西很酷。我知道我没有FileGDB驱动程序,因此询问如何执行该操作。我看过您引用的页面,它说需要Compile GDAL with the FGDB section commented 。我没有GDAL消息来源;我刚刚从方向盘上安装了它,所以我猜这些步骤不适用于我的情况。我应该从这里去哪里?
Alex Tereshenkov '16

1
GDAL_DRIVER_PATH变量是关键。阅读trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH,如果这不能使您走上正确的道路,请参阅list.osgeo.org/pipermail/gdal-dev/2014-May/039066.html上的线程。。
sgillies

因为我不需要编译任何东西,所以有些误导性的步骤-我安装的轮子已经具有我需要的一切,这仅仅是将文件粘贴到正确的文件夹中。但是无论如何,还是非常感谢您提供的有用信息,对于其他一些用例也很高兴知道。
Alex Tereshenkov '16

这绝对是正确的答案。无需更改安装,只需设置正确的路径即可!
本杰明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.