Come aggiungere il supporto per il driver FileGDB (Esri file gdb API) in fiona?


12

Ci sono state un sacco di domande su questo, ma nessuno di loro ha risolto il mio problema.

Ho una macchina con:

  • Windows 7 x64
  • Python 3.4.3 x64
  • GDAL installata: gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal è stato installato da una ruota GDAL-1.11.4-cp34-none-win_amd64.whlda qui

Il GDAL è installato in C:\Python34\Lib\site-packages\osgeo. Lì ho un sacco di file .exe per i file gdal e ogr e .pyd.

  • Fiona installato: è stato installato da una ruota Fiona-1.6.3-cp34-none-win_amd64.whl, dallo stesso sito Web.

Sono in grado di eseguire questo codice e viene eseguito correttamente:

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

Sono anche in grado di ottenere formati OGR: ne ogrinfo --formatsstampa un sacco nel cmd di Windows (senza FileGDB lì).

Sono in grado di eseguire questo codice e viene eseguito correttamente:

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

Tuttavia, questo codice non verrà eseguito:

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

Perché non ho librerie compilate con Esri File GDB che sono richieste.

Ho scaricato e decompresso FileGDB_API_VS2012_1_3.zipdalla pagina dei download di Esri . Come ho capito, non è necessario compilare nulla poiché il .dll è già lì.

Qual è la procedura corretta per registrare la dll dell'API GDB di Esri File per poterli usare in fiona nel mio ambiente?


AGGIORNAMENTO: (basato sulla risposta di Luke)

Ho scaricato il File Geodatabase API 1.4 version for Windows (Visual Studio 2010)dalla pagina dei download di Esri . Ho copiato FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllil file C:\Python34\Lib\site-packages\osgeo. Ora ho due file qui ogr_FileGDB.dlle FileGDBAPI.dll.

Ho creato una variabile di Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. Nella PATHvariabile, non ho nulla di specifico in Python tranne il C:\Python34\Lib\site-packages\osgeo.

Ora quando eseguo ogrinfo --formatsottengo -> "FileGDB" (read/write)e sono in grado di utilizzare il codice Python per lavorare con il driver FileGDB.


L'API di geodatabase di file 1.4 è stata rilasciata per un po 'di tempo. Non c'è davvero alcun motivo per usare 1.3.
Vince,

@Luke, grazie, ma ho bisogno dell'accesso in scrittura a gdb. Dopotutto, puoi leggere solo con OpenFileGDB ... Qualche link specifico o pagina doc come raggiungerlo con la compilazione e come indicare la dll (tramite variabili di Windows, ecc.)? Sarebbe molto utile
Alex Tereshenkov,

@Vince, non mi dispiace usare 1.4 o qualsiasi altra versione che mi consentirebbe di modificare il file gdb :) Mi manca la pagina / le specifiche dei documenti con istruzioni chiare su come poterlo fare.
Alex Tereshenkov,

@AlexTereshenkov Mentre stai usando un pitone a 64 bit, copia Esri bin64 \ FileGDBAPI.dll nella directory [python install dir]\Lib\site-packages\osgeocome ho specificato nella mia risposta, non nella directory gdalplugins che menzioni nella tua modifica. Solo i plugin dei driver vanno in quella directory, non le dll di terze parti.
user2856

1
@AlexTereshenkov, ogr_FileGDB.dll è il driver FileGDB (non OpenFileGDB che è integrato in gdal / ogr). Questa dll è compilata dal codice del driver GDAL / OGR . Deve trovarsi nella directory specificata da GDAL_DRIVER_PATH env var.
user2856

Risposte:


9

La ruota Gohlke GDAL / OGR include il driver FileGDB compilato come plugin.

Per far funzionare il driver FileGDB:

  1. Copiare Esri bin64 \ FileGDB.dll in [python install/virtualenv dir]\Lib\site-packages\osgeo(utilizzare bin \ FileGDB.dll se si utilizza python a 32 bit). Non copiare il FileGDB.dll nella directory gdalplugins.
  2. Impostare la variabile di ambiente GDAL_DRIVER_PATH, sia:
    • manualmente; o
    • [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pylinea di modifica e decommenta 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

L'apertura di un GDB con il driver FileGDB ora dovrebbe funzionare.

>>> 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 sono riuscito a far funzionare solo il plugin FileGDB con l'API FileGDB v1.3 (MSVC 2008). come python segfaults v.1.4. Suppongo che ciò sia dovuto al fatto che python e le librerie GDAL e Fiona fornite da Gohlke sono compilate con MSVC 2008 e v. 1.4 è compilato con MSVC 2010 (e versioni successive).

L'API FileGDB v1.4 funziona perfettamente con Python 3.4 e le librerie GDAL e Fiona fornite da Gohlke che sono compilate con MSVC 2010.


Mi piacerebbe copiare bin64\FileGDBAPI.dllda FileGDB_API_1_5_1-VS2010.zipsituato a github.com/Esri/file-geodatabase-api/tree/master/... a step 1farlo funzionare (in Python 3.5 64bit)
Mattijn

My gdal è stato installato automaticamente geopandasusando la riga di comando della miniconda conda install geopandas. Nella __init__.pyriga 10 è già senza commenti, quindi non penso che sia la linea a cui ti stai riferendo. Inoltre non esiste alcun gdalpluginsfile
user32882

@ user32882 Queste istruzioni non sono per conda installata gdal ...
user2856

Come posso impostarlo per conda? È possibile?
user32882

4

Le informazioni chiave sono qui:

Sono anche in grado di ottenere formati OGR: ogrinfo --formats ne stampa un sacco nel cmd di Windows (senza FileGDB lì).

Questo mi dice che la GDAL_DRIVER_PATHvariabile di ambiente non è impostata. Consulta le istruzioni su https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Una volta che "FileGDB" appare in ogrinfo --formats(o fio env --formats), sarai a posto.


Grazie. Sorpreso di avere il tempo di rispondere alle domande su GIS.SE - probabilmente sei super impegnato con fiona, formosa e altre cose. Cose fantastiche che hai scritto, complimenti. Sono consapevole che non ho il driver FileGDB e quindi mi chiedo come farlo. Ho visto la pagina a cui ti riferisci, dice che è necessario Compile GDAL with the FGDB section commented . Non ho la fonte GDAL; L'ho appena installato dalla ruota, quindi immagino che questi passaggi non siano applicabili nel mio caso. Dove dovrei andare da qui?
Alex Tereshenkov,

1
La GDAL_DRIVER_PATHvariabile è la chiave. Leggi trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH e se ciò non ti pone sulla strada giusta, vedi il thread su lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies,

Passaggi un po 'fuorvianti in quanto non avevo bisogno di compilare nulla: le ruote che ho installato avevano già tutto ciò di cui avevo bisogno, si trattava solo di incollare i file nella cartella giusta. Ma grazie mille per le informazioni utili comunque, buono a sapersi per alcuni altri casi d'uso.
Alex Tereshenkov,

Questa è assolutamente la risposta corretta. Non c'è bisogno di cambiare l'installazione, basta impostare i percorsi giusti!
Benjamin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.