Comment ajouter la prise en charge du pilote FileGDB (Esri file gdb API) dans Fiona?

12

Il y a eu des tonnes de questions à ce sujet, mais aucune n'a résolu mon problème.

J'ai une machine avec:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdal installé: gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal a été installé à partir d'une roue GDAL-1.11.4-cp34-none-win_amd64.whld' ici

Le GDAL est installé dans C:\Python34\Lib\site-packages\osgeo. Là, j'ai un tas de fichiers .exe pour les fichiers gdal et ogr et .pyd.

  • fiona installé: a été installé à partir d'une roue Fiona-1.6.3-cp34-none-win_amd64.whl, à partir du même site Web.

Je peux exécuter ce code et il s'exécute avec succès:

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

Je peux également obtenir des formats OGR: en ogrinfo --formatsimprime un tas dans le cmd Windows (sans FileGDB cependant).

Je peux exécuter ce code et il s'exécute avec succès:

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

Cependant, ce code ne s'exécutera pas:

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

Parce que je n'ai pas les bibliothèques compilées Esri File GDB qui sont nécessaires.

J'ai téléchargé et décompressé à FileGDB_API_VS2012_1_3.zippartir de la page de téléchargement d'Esri . Si j'ai bien compris, il n'est pas nécessaire de compiler quoi que ce soit car le fichier .dll est déjà là.

Quelle est la procédure correcte pour enregistrer la DLL de l'API Esri File GDB pour pouvoir les utiliser dans fiona dans mon environnement?


MISE À JOUR: (basé sur la réponse de Luke)

J'ai téléchargé le File Geodatabase API 1.4 version for Windows (Visual Studio 2010)depuis la page de téléchargement d'Esri . J'ai copié le fichier FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dlldans le C:\Python34\Lib\site-packages\osgeo. Maintenant, j'ai deux fichiers ici, ogr_FileGDB.dllet FileGDBAPI.dll.

J'ai créé une variable Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. Dans la PATHvariable, je n'ai rien de spécifique à Python sauf le C:\Python34\Lib\site-packages\osgeo.

Maintenant, lorsque j'exécute, ogrinfo --formatsj'obtiens -> "FileGDB" (read/write)et je peux utiliser le code Python pour travailler avec le pilote FileGDB.

Alex Tereshenkov
la source
L'API 1.4 Geodatabase File est disponible depuis un certain temps. Il n'y a vraiment aucune raison d'utiliser 1.3.
Vince
@ Luke, merci, mais j'ai besoin d'un accès en écriture au gdb. Afaik, vous ne pouvez lire qu'avec OpenFileGDB ... Des liens spécifiques ou une page doc comment y parvenir avec la compilation et comment pointer vers la dll (via les variables Windows etc)? Serait très utile.
Alex Tereshenkov
@Vince, cela ne me dérange pas d'utiliser 1.4 ou toute autre version qui me permettrait d'éditer le fichier gdb :) Je manque la page / spécification de documentation avec des instructions claires sur la façon de le faire.
Alex Tereshenkov
@AlexTereshenkov Comme vous utilisez du python 64 bits, copiez le Esri bin64 \ FileGDBAPI.dll dans le répertoire [python install dir]\Lib\site-packages\osgeocomme je l'ai spécifié dans ma réponse, pas le répertoire gdalplugins que vous mentionnez dans votre édition. Seuls les plugins de pilotes vont dans ce répertoire, pas les DLL tierces.
user2856
1
@AlexTereshenkov, ogr_FileGDB.dll est le pilote FileGDB (pas OpenFileGDB qui est intégré à gdal / ogr). Cette dll est compilée à partir du code du pilote GDAL / OGR . Il doit se trouver dans le répertoire spécifié par la var env GDAL_DRIVER_PATH.
user2856

Réponses:

9

La roue Gohlke GDAL / OGR inclut le pilote FileGDB compilé comme un plugin.

Pour faire fonctionner le pilote FileGDB:

  1. Copiez le fichier Esri bin64 \ FileGDB.dll dans [python install/virtualenv dir]\Lib\site-packages\osgeo(utilisez bin \ FileGDB.dll si vous utilisez du python 32 bits). Ne copiez pas FileGDB.dll dans le répertoire gdalplugins.
  2. Définissez la variable d'environnement GDAL_DRIVER_PATH, soit:
    • manuellement; ou
    • modifier [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyet décommenter la ligne 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

L'ouverture d'un GDB avec le pilote FileGDB devrait maintenant fonctionner.

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

Remarque:

En utilisant Python 2.7, je ne pouvais que faire fonctionner le plugin FileGDB avec l'API FileGDB v1.3 (MSVC 2008). comme v.1.4 segfaults python. Je suppose que c'est parce que python et les bibliothèques GDAL et Fiona fournies par Gohlke sont compilés avec MSVC 2008 et v. 1.4 est compilé avec MSVC 2010 (et versions ultérieures).

L'API FileGDB v1.4 fonctionne correctement avec Python 3.4 et les bibliothèques GDAL et Fiona fournies par Gohlke qui sont compilées avec MSVC 2010.

user2856
la source
Je voudrais copier à bin64\FileGDBAPI.dllpartir FileGDB_API_1_5_1-VS2010.zipde github.com/Esri/file-geodatabase-api/tree/master/… at step 1pour le faire fonctionner (en Python 3.5 64 bits)
Mattijn
Mon gdal a été automatiquement installé geopandasà l'aide de la ligne de commande miniconda conda install geopandas. À la __init__.pyligne 10, c'est déjà sans commentaire, donc je ne pense pas que ce soit la ligne à laquelle vous faites référence. Il n'y a pas non plus de gdalpluginsfichier
user32882
@ user32882 Ces instructions ne concernent pas gdal installé par conda ...
user2856
Comment puis-je le configurer pour conda? Est-ce possible?
user32882
4

Les informations clés sont ici:

Je suis également en mesure d'obtenir des formats OGR: ogrinfo --formats en imprime un tas dans le cmd Windows (sans FileGDB cependant).

Cela me dit que votre GDAL_DRIVER_PATHvariable d'environnement n'est pas définie. Voir les instructions sur https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Une fois que "FileGDB" apparaîtra dans ogrinfo --formats(ou fio env --formats), vous serez prêt à partir.

sgillies
la source
Merci. Surpris que vous ayez le temps de répondre aux questions sur GIS.SE - vous êtes probablement très occupé avec fiona, bien fait et d'autres trucs. Des choses très cool que vous avez écrites, bravo. Je suis conscient que je n'ai pas le pilote FileGDB et je demande donc comment faire cela. J'ai vu la page à laquelle vous vous référez, elle dit qu'il faut le faire Compile GDAL with the FGDB section commented . Je n'ai pas la source GDAL; Je viens de l'installer à partir de la roue, donc je suppose que ces étapes ne sont pas applicables dans mon cas. Où dois-je aller d'ici?
Alex Tereshenkov
1
La GDAL_DRIVER_PATHvariable est la clé. Lisez trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH et si cela ne vous met pas sur la bonne voie, consultez le fil à lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies
Des étapes un peu trompeuses car je n'avais pas besoin de compiler quoi que ce soit - les roues que j'ai installées avaient déjà tout ce dont j'avais besoin, il s'agissait juste de coller les fichiers dans le bon dossier. Mais merci beaucoup pour les informations utiles, bon à savoir pour d'autres cas d'utilisation.
Alex Tereshenkov
C'est absolument la bonne réponse. Pas besoin de changer l'installation, il suffit de définir les bons chemins!
Benjamin