Jak dodać obsługę FileGDB (Esri file gdb API) w Fiona?

13

Było mnóstwo pytań na ten temat, ale żadne z nich nie rozwiązało mojego problemu.

Mam maszynę z:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdal zainstalowane: gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal został zainstalowany z kołem GDAL-1.11.4-cp34-none-win_amd64.whlod tutaj

GDAL jest zainstalowany w C:\Python34\Lib\site-packages\osgeo. Mam tam kilka plików .exe dla plików gdal i ogr i .pyd.

  • Zainstalowana fiona: została zainstalowana z koła Fiona-1.6.3-cp34-none-win_amd64.whl, z tej samej strony.

Jestem w stanie uruchomić ten kod i wykonuje się on pomyślnie:

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

Jestem również w stanie uzyskać formaty OGR: ogrinfo --formatsdrukuje kilka z nich na cmd Windows (choć nie ma tam FileGDB).

Jestem w stanie uruchomić ten kod i wykonuje się on pomyślnie:

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

Jednak ten kod nie działa:

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

Ponieważ nie mam wymaganych bibliotek skompilowanych przez Esri File GDB.

Pobrałem i rozpakowałem FileGDB_API_VS2012_1_3.zipze strony pobierania Esri . Jak zrozumiałem, nie trzeba niczego kompilować, ponieważ plik .dll już tam jest.

Jaka jest prawidłowa procedura rejestracji biblioteki DLL interfejsu GDB Esri File GDB, aby móc korzystać z nich w środowisku Fiona w moim środowisku?


AKTUALIZACJA: (na podstawie odpowiedzi Luke'a)

Pobrałem File Geodatabase API 1.4 version for Windows (Visual Studio 2010)ze strony pobierania Esri . Skopiowałem FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dlldo C:\Python34\Lib\site-packages\osgeo. Teraz mam tutaj dwa pliki ogr_FileGDB.dlli FileGDBAPI.dll.

Utworzyłem zmienną Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. W PATHzmiennej nie mam nic specyficznego dla Pythona oprócz C:\Python34\Lib\site-packages\osgeo.

Teraz podczas uruchamiania ogrinfo --formatsotrzymuję -> "FileGDB" (read/write)i mogę używać kodu Python do pracy ze sterownikiem FileGDB.

Alex Tereshenkov
źródło
Interfejs API geobazy danych 1.4 został wydany już od dłuższego czasu. Naprawdę nie ma powodu, aby używać 1.3.
Vince
@Luke, dziękuję, ale potrzebuję dostępu do zapisu na gdb. Afaik, możesz czytać tylko z OpenFileGDB ... Jakieś konkretne linki lub strony z dokumentami, jak to osiągnąć dzięki kompilacji i jak wskazać dll (za pomocą zmiennych Windows itp.)? Byłby bardzo pomocny.
Alex Tereshenkov
@Vince, nie mam nic przeciwko użyciu 1.4 lub innej wersji, która pozwoliłaby mi edytować plik gdb :) Brakuje strony / specyfikacji dokumentów z jasnymi instrukcjami, jak to zrobić.
Alex Tereshenkov
@AlexTereshenkov Gdy używasz 64-bitowego pytona, skopiuj plik Esri bin64 \ FileGDBAPI.dll do katalogu [python install dir]\Lib\site-packages\osgeozgodnie z moją odpowiedzią, a nie do katalogu gdalplugins, o którym wspomniałeś w swojej edycji. Tylko wtyczki sterowników znajdują się w tym katalogu, a nie pliki DLL innych firm.
user2856
1
@AlexTereshenkov, ogr_FileGDB.dll to sterownik FileGDB (nie OpenFileGDB, który jest wbudowany w gdal / ogr). Ta biblioteka DLL została skompilowana z kodu sterownika GDAL / OGR . Musi znajdować się w katalogu określonym przez zmienną GDAL_DRIVER_PATH env var.
user2856

Odpowiedzi:

9

Koło Gohlke GDAL / OGR zawiera sterownik FileGDB skompilowany jako wtyczka.

Aby uruchomić sterownik FileGDB:

  1. Skopiuj Esri bin64 \ FileGDB.dll do [python install/virtualenv dir]\Lib\site-packages\osgeo(użyj bin \ FileGDB.dll, jeśli używasz 32-bitowego pythona). Nie kopiuj pliku FileGDB.dll do katalogu gdalplugins.
  2. Ustaw zmienną środowiskową GDAL_DRIVER_PATH, albo:
    • ręcznie; lub
    • edytuj [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyi odkomentuj wiersz 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Otwarcie GDB za pomocą sterownika FileGDB powinno teraz działać.

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

Uwaga:

Za pomocą Pythona 2.7 mogłem tylko uzyskać wtyczkę FileGDB do pracy z FileGDB API v1.3 (MSVC 2008). jak python segfault v.1.4. Zakładam, że dzieje się tak, ponieważ Python oraz biblioteki GDAL i Fiona dostarczone przez Gohlke są kompilowane z MSVC 2008, a wersja 1.4 jest kompilowana z MSVC 2010 (i nowszymi).

FileGDB API v1.4 działa dobrze z Pythonem 3.4 oraz bibliotekami GDAL i Fiona dostarczonymi przez Gohlke, które są kompilowane z MSVC 2010.

użytkownik2856
źródło
Chciałbym skopiować bin64\FileGDBAPI.dllz FileGDB_API_1_5_1-VS2010.zipznajdującej się na stronie github.com/Esri/file-geodatabase-api/tree/master/… at, step 1aby działało (w Pythonie 3.5 64-bitowym)
Mattijn 30.01.18
Mój gdal został automatycznie zainstalowany przy geopandasużyciu wiersza polecenia miniconda conda install geopandas. W __init__.pylinii 10 nie ma już komentarza, więc nie sądzę, że jest to linia, o której mówisz. Również nie ma gdalpluginspliku
użytkownik32882
@ user32882 Te instrukcje nie są przeznaczone dla conda zainstalowanych gdal ...
user2856
Jak mogę skonfigurować to conda? czy to możliwe?
user32882
4

Najważniejsze informacje są tutaj:

Jestem również w stanie uzyskać formaty OGR: ogrinfo - formats wypisuje kilka z nich na cmd Windows (choć nie ma tam FileGDB).

To mówi mi, że twoja GDAL_DRIVER_PATHzmienna środowiskowa nie jest ustawiona. Zobacz instrukcje na https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Gdy „FileGDB” pojawi się w ogrinfo --formats(lub fio env --formats), możesz zacząć.

sgillies
źródło
dzięki. Zaskoczony, że masz czas, aby odpowiedzieć na pytania na GIS.SE - prawdopodobnie jesteś bardzo zajęty Fiona, foremną i innymi rzeczami. Bardzo fajne rzeczy, które napisałeś, uwielbienie. Wiem, że nie mam sterownika FileGDB, dlatego pytam, jak to zrobić. Widziałem stronę, do której się odwołujesz, mówi, że trzeba Compile GDAL with the FGDB section commented . Nie mam źródła GDAL; Właśnie zainstalowałem go z koła, więc chyba te kroki nie mają zastosowania w moim przypadku. Gdzie mam stąd iść?
Alex Tereshenkov
1
GDAL_DRIVER_PATHZmienna jest kluczem. Przeczytaj trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH, a jeśli to nie poprowadzi cię właściwą ścieżką, zobacz wątek na lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies
Trochę mylące kroki, ponieważ nie musiałem niczego kompilować - koła, które zainstalowałem, miały już wszystko, czego potrzebowałem, chodziło tylko o wklejenie plików we właściwym folderze. Ale i tak dziękuję za przydatne informacje, dobrze wiedzieć o innych przypadkach użycia.
Alex Tereshenkov
To jest absolutnie poprawna odpowiedź. Nie musisz zmieniać instalacji, po prostu ustaw właściwe ścieżki!
Benjamin