¿Cómo agregar soporte para el controlador FileGDB (Esri file gdb API) en fiona?


12

Ha habido un montón de preguntas al respecto, pero ninguna de ellas resolvió mi problema.

Tengo una máquina con:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdal instalado: gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal se instaló desde una rueda GDAL-1.11.4-cp34-none-win_amd64.whldesde aquí

El GDAL está instalado en C:\Python34\Lib\site-packages\osgeo. Allí tengo un montón de archivos .exe para archivos gdal y ogr y .pyd.

  • fiona instalado: se instaló desde una rueda Fiona-1.6.3-cp34-none-win_amd64.whl, desde el mismo sitio web.

Puedo ejecutar este código y se ejecuta con éxito:

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()

También puedo obtener formatos OGR: ogrinfo --formatsimprime un montón de ellos en el cmd de Windows (aunque sin FileGDB allí).

Puedo ejecutar este código y se ejecuta con éxito:

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

Sin embargo, este código no se ejecutará:

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

Porque no tengo las bibliotecas compiladas de Esri File GDB que se requieren.

He descargado y desempaquetado FileGDB_API_VS2012_1_3.zipde la página de descargas de Esri . Como entendí, no hay necesidad de compilar nada ya que el .dll ya está allí.

¿Cuál es el procedimiento correcto para registrar el dll de la API de Esri File GDB para poder usarlos en fiona en mi entorno?


ACTUALIZACIÓN: (basado en la respuesta de Luke)

He descargado el File Geodatabase API 1.4 version for Windows (Visual Studio 2010)de la página de descargas de Esri . Copié el FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllal C:\Python34\Lib\site-packages\osgeo. Ahora tengo dos archivos de aquí, ogr_FileGDB.dlly FileGDBAPI.dll.

He creado una variable de Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. En la PATHvariable, no tengo nada específico de Python excepto el C:\Python34\Lib\site-packages\osgeo.

Ahora, cuando ejecuto, ogrinfo --formatsobtengo -> "FileGDB" (read/write)y puedo usar el código Python para trabajar con el controlador FileGDB.


La API de geodatabase de archivos 1.4 se lanzó hace mucho tiempo. Realmente no hay razón para usar 1.3.
Vince

@Luke, gracias, pero necesito acceso de escritura al gdb. Afaik, solo puedes leer con OpenFileGDB ... ¿Algún enlace específico o página de documento cómo lograrlo con la compilación y cómo señalar el dll (a través de variables de Windows, etc.)? Sería muy útil
Alex Tereshenkov

@ Vince, no me importa usar 1.4 o cualquier otra versión que me permita editar el archivo gdb :) Me falta la página / especificación de documentos con instrucciones claras sobre cómo hacerlo.
Alex Tereshenkov

@AlexTereshenkov Mientras usa Python de 64 bits, copie Esri bin64 \ FileGDBAPI.dll al [python install dir]\Lib\site-packages\osgeodirectorio como especifiqué en mi respuesta, no el directorio gdalplugins que menciona en su edición. Solo los complementos del controlador van en ese directorio, no los dlls de terceros.
user2856

1
@AlexTereshenkov, ogr_FileGDB.dll es el controlador FileGDB (no OpenFileGDB que está integrado en gdal / ogr). Este dll se compila a partir del código del controlador GDAL / OGR . Debe estar en el directorio especificado por GDAL_DRIVER_PATH env var.
user2856

Respuestas:


9

La rueda Gohlke GDAL / OGR incluye el controlador FileGDB compilado como un complemento.

Para que el controlador FileGDB funcione:

  1. Copie el Esri bin64 \ FileGDB.dll a [python install/virtualenv dir]\Lib\site-packages\osgeo(use bin \ FileGDB.dll si usa python de 32 bits). No copie el FileGDB.dll al directorio gdalplugins.
  2. Establezca la variable de entorno GDAL_DRIVER_PATH, ya sea:
    • a mano; o
    • editar [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyy descomentar línea 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Abrir un GDB con el controlador FileGDB ahora debería funcionar.

>>> 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')])}}
>>>

Nota:

Usando Python 2.7 solo pude hacer que el complemento FileGDB funcione con la API FileGDB v1.3 (MSVC 2008). como v.1.4 segfaults python. Supongo que esto se debe a que python y las bibliotecas GDAL y Fiona proporcionadas por Gohlke están compiladas con MSVC 2008 y la versión 1.4 está compilada con MSVC 2010 (y posterior).

FileGDB API v1.4 funciona bien con Python 3.4 y las bibliotecas GDAL y Fiona proporcionadas por Gohlke que se compilan con MSVC 2010.


Me había copiar bin64\FileGDBAPI.dlldesde FileGDB_API_1_5_1-VS2010.zipubicado en github.com/Esri/file-geodatabase-api/tree/master/... a step 1hacer que funcione (en Python 3.5 de 64 bits)
Mattijn

Mi gdal se instaló automáticamente geopandasusando la línea de comando miniconda conda install geopandas. En la __init__.pylínea 10 ya no está comentado, así que no creo que sea a la línea a la que te refieres. Tampoco hay gdalpluginsarchivo
user32882

@ user32882 Estas instrucciones no son para gdal instalado conda ...
user2856

¿Cómo puedo configurarlo para conda? es posible?
user32882

4

La información clave está aquí:

También puedo obtener formatos OGR: ogrinfo --formats imprime un montón de ellos en el cmd de Windows (aunque sin FileGDB allí).

Esto me dice que su GDAL_DRIVER_PATHvariable de entorno no está establecida. Consulte las instrucciones en https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Una vez que aparezca "FileGDB" en ogrinfo --formats(o fio env --formats), estará listo para comenzar .


Gracias. Sorprendido de que tenga tiempo para responder preguntas en GIS.SE, probablemente esté súper ocupado con fiona, bien proporcionado y otras cosas. Cosas muy geniales que escribiste, felicitaciones. Soy consciente de que no tengo el controlador FileGDB, por lo tanto, me pregunto cómo hacerlo. He visto la página a la que te refieres, dice que uno necesita Compile GDAL with the FGDB section commented . No tengo la fuente GDAL; Lo acabo de instalar desde la rueda, así que supongo que esos pasos no son aplicables en mi caso. ¿A dónde debería ir desde aquí?
Alex Tereshenkov

1
La GDAL_DRIVER_PATHvariable es la clave. Lea trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH y si eso no lo ubica en el camino correcto, vea el hilo en lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies

Unos pasos un poco engañosos, ya que no necesitaba compilar nada: las ruedas que instalé ya tenían todo lo que necesitaba, solo se trataba de pegar los archivos en la carpeta correcta. Pero muchas gracias por la información útil de todos modos, es bueno saberlo para otros casos de uso.
Alex Tereshenkov

Esta es absolutamente la respuesta correcta. No es necesario cambiar la instalación, ¡simplemente configure los caminos correctos!
Benjamin

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.