Wie füge ich Unterstützung für den FileGDB-Treiber (Esri file gdb API) in fiona hinzu?


12

Es gab eine Menge Fragen dazu, aber keine davon hat mein Problem gelöst.

Ich habe eine Maschine mit:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdal installiert : gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal wurde GDAL-1.11.4-cp34-none-win_amd64.whlvon hier aus von einem rad aus eingebaut

Die GDAL ist installiert in C:\Python34\Lib\site-packages\osgeo. Dort habe ich eine Reihe von .exe-Dateien für gdal und ogr und .pyd-Dateien.

  • fiona installiert: wurde von einem Rad Fiona-1.6.3-cp34-none-win_amd64.whlaus von derselben Website installiert .

Ich kann diesen Code ausführen und er wird erfolgreich ausgeführt:

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

Ich bin auch in der Lage, OGR-Formate zu erhalten: ogrinfo --formatsDruckt eine Reihe von Formaten im Windows-Cmd (ohne FileGDB).

Ich kann diesen Code ausführen und er wird erfolgreich ausgeführt:

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

Dieser Code wird jedoch nicht ausgeführt:

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

Weil ich keine Esri File GDB kompilierten Bibliotheken habe, die benötigt werden.

Ich habe FileGDB_API_VS2012_1_3.zipvon der Esri-Downloadseite heruntergeladen und entpackt . Wie ich verstanden habe, muss nichts kompiliert werden, da die DLL bereits vorhanden ist.

Was ist das richtige Verfahren, um die DLL der Esri File GDB-API zu registrieren, um sie in meiner Umgebung in fiona verwenden zu können?


UPDATE: (basierend auf Lukes Antwort)

Ich habe das File Geodatabase API 1.4 version for Windows (Visual Studio 2010)von der Esri-Downloadseite heruntergeladen . Ich habe das FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllauf die kopiert C:\Python34\Lib\site-packages\osgeo. Jetzt habe ich zwei Dateien hier ogr_FileGDB.dllund FileGDBAPI.dll.

Ich habe eine Windows-Variable erstellt GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. In der PATHVariablen habe ich nichts Python-spezifisches außer dem C:\Python34\Lib\site-packages\osgeo.

Jetzt beim Ausführen des ogrinfo --formatsbekomme ich -> "FileGDB" (read/write)und kann den Python-Code für die Arbeit mit dem FileGDB-Treiber verwenden.


Die 1.4 File Geodatabase API ist seit einiger Zeit veröffentlicht. Es gibt wirklich keinen Grund, 1.3 zu verwenden.
Vince

@ Luke, danke, aber ich brauche Schreibzugriff auf die GDB. Afaik, Sie können nur mit OpenFileGDB lesen ... Gibt es spezielle Links oder Dokumentenseiten, wie Sie dies mit der Kompilierung erreichen und wie Sie auf die DLL hinweisen (über Windows-Variablen usw.)? Wäre sehr hilfreich.
Alex Tereshenkov

@Vince, es macht mir nichts aus, 1.4 oder eine andere Version zu verwenden, mit der ich die Datei gdb bearbeiten kann :) Mir fehlt die Dokumentseite / -spezifikation mit klaren Anweisungen, wie ich das tun kann.
Alex Tereshenkov

@AlexTereshenkov Wenn Sie 64-Bit-Python verwenden, kopieren Sie die Datei Esri bin64 \ FileGDBAPI.dll in das Verzeichnis, das [python install dir]\Lib\site-packages\osgeoich in meiner Antwort angegeben habe, nicht in das Verzeichnis gdalplugins, das Sie in Ihrer Bearbeitung erwähnt haben. In diesem Verzeichnis befinden sich nur Treiber-Plugins, keine DLLs von Drittanbietern.
user2856

1
@AlexTereshenkov, ogr_FileGDB.dll ist der FileGDB- Treiber (nicht OpenFileGDB, das in gdal / ogr integriert ist). Diese DLL wird aus dem GDAL / OGR- Treibercode kompiliert . Es muss sich in dem von GDAL_DRIVER_PATH env var angegebenen Verzeichnis befinden.
user2856

Antworten:


9

Das Gohlke GDAL / OGR-Rad enthält den als Plugin kompilierten FileGDB-Treiber.

So funktioniert der FileGDB-Treiber:

  1. Kopieren Sie die Esri bin64 \ FileGDB.dll nach [python install/virtualenv dir]\Lib\site-packages\osgeo(verwenden Sie bin \ FileGDB.dll, wenn Sie 32-Bit-Python verwenden). Kopieren Sie die Datei FileGDB.dll nicht in das Verzeichnis gdalplugins.
  2. Legen Sie die Umgebungsvariable GDAL_DRIVER_PATH fest:
    • manuell; oder
    • [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyZeile 10 bearbeiten und auskommentieren.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Das Öffnen einer GDB mit dem FileGDB-Treiber sollte jetzt funktionieren.

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

Hinweis:

Mit Python 2.7 konnte ich nur das FileGDB-Plugin für die FileGDB-API v1.3 (MSVC 2008) verwenden. als v.1.4 segfaults python. Ich gehe davon aus, dass Python und die von Gohlke bereitgestellten GDAL- und Fiona-Bibliotheken mit MSVC 2008 und Version 1.4 mit MSVC 2010 (und höher) kompiliert wurden.

Die FileGDB API v1.4 funktioniert gut mit Python 3.4 und den von Gohlke bereitgestellten GDAL- und Fiona-Bibliotheken, die mit MSVC 2010 kompiliert wurden.


Ich würde kopieren bin64\FileGDBAPI.dllvon FileGDB_API_1_5_1-VS2010.zipan sich github.com/Esri/file-geodatabase-api/tree/master/... auf step 1sie (in Python 3.5 64bit) arbeiten zu machen
Mattijn

Mein GDAL wurde automatisch geopandasüber die Miniconda-Befehlszeile installiert conda install geopandas. In __init__.pyZeile 10 ist bereits unkommentiert, daher denke ich nicht, dass es sich um die Zeile handelt, auf die Sie sich beziehen. Auch gibt es keine gdalpluginsDatei
user32882

@ user32882 Diese Anweisungen sind nicht für conda installiert gdal ...
user2856

Wie kann ich es für conda einrichten? Ist das möglich?
user32882

4

Die wichtigsten Informationen finden Sie hier:

Ich kann auch OGR-Formate erhalten: ogrinfo --formats druckt eine Reihe von Formaten im Windows-Cmd (ohne FileGDB).

Dies sagt mir, dass Ihre GDAL_DRIVER_PATHUmgebungsvariable nicht festgelegt ist. Siehe die Anweisungen unter https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Sobald "FileGDB" in ogrinfo --formats(oder fio env --formats) angezeigt wird , können Sie loslegen .


Vielen Dank. Überrascht, dass Sie Zeit haben, Fragen zu GIS.SE zu beantworten - Sie sind wahrscheinlich sehr beschäftigt mit Fiona, Shapely und anderen Dingen. Sehr coole Dinge, die du geschrieben hast, ein dickes Lob. Mir ist bewusst, dass ich den FileGDB-Treiber nicht habe, daher werde ich gefragt, wie das geht. Ich habe die Seite gesehen, auf die Sie sich beziehen, es heißt, man muss Compile GDAL with the FGDB section commented . Ich habe keine GDAL-Quelle. Ich habe es gerade vom Rad aus installiert, daher sind diese Schritte in meinem Fall vermutlich nicht anwendbar. Wohin soll ich von hier aus gehen?
Alex Tereshenkov

1
Die GDAL_DRIVER_PATHVariable ist der Schlüssel. Lesen Sie trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH. Wenn Sie dadurch nicht auf den richtigen Weg gebracht werden, lesen Sie den Thread unter lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
Sgillies

Ein bisschen irreführende Schritte, da ich nichts kompilieren musste - die Räder, die ich installiert habe, hatten bereits alles, was ich brauchte, es ging nur darum, die Dateien in den richtigen Ordner einzufügen. Aber vielen Dank für die nützlichen Informationen, die für einige andere Anwendungsfälle gut zu wissen sind.
Alex Tereshenkov

Dies ist absolut die richtige Antwort. Sie müssen die Installation nicht ändern, sondern müssen nur die richtigen Pfade festlegen!
Benjamin

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.