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 ruedaGDAL-1.11.4-cp34-none-win_amd64.whl
desde 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 --formats
imprime 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.zip
de 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.dll
al C:\Python34\Lib\site-packages\osgeo
. Ahora tengo dos archivos de aquí, ogr_FileGDB.dll
y FileGDBAPI.dll
.
He creado una variable de Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins
. En la PATH
variable, no tengo nada específico de Python excepto el C:\Python34\Lib\site-packages\osgeo
.
Ahora, cuando ejecuto, ogrinfo --formats
obtengo -> "FileGDB" (read/write)
y puedo usar el código Python para trabajar con el controlador FileGDB.
[python install dir]\Lib\site-packages\osgeo
directorio 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.Respuestas:
La rueda Gohlke GDAL / OGR incluye el controlador FileGDB compilado como un complemento.
Para que el controlador FileGDB funcione:
[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.[python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.py
y 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.
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.
fuente
bin64\FileGDBAPI.dll
desdeFileGDB_API_1_5_1-VS2010.zip
ubicado en github.com/Esri/file-geodatabase-api/tree/master/... astep 1
hacer que funcione (en Python 3.5 de 64 bits)geopandas
usando la línea de comando minicondaconda install geopandas
. En la__init__.py
línea 10 ya no está comentado, así que no creo que sea a la línea a la que te refieres. Tampoco haygdalplugins
archivoLa información clave está aquí:
Esto me dice que su
GDAL_DRIVER_PATH
variable de entorno no está establecida. Consulte las instrucciones en https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Una vez que aparezca "FileGDB" enogrinfo --formats
(ofio env --formats
), estará listo para comenzar .fuente
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í?GDAL_DRIVER_PATH
variable 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 .Copiar archivos FileGDBAPI.dll en la carpeta C: \ Archivos de programa \ QGIS 2.18 \ bin y ogr_FileGDB.dll en la carpeta C: \ Archivos de programa \ QGIS 2.18 \ bin \ gdalplugins es el truco para mí. Aquí hay un documento que explica su uso .
fuente