Bagaimana cara menambahkan dukungan untuk driver FileGDB (Esri file gdb API) di fiona?

12

Ada banyak pertanyaan tentang itu tetapi tidak satupun dari mereka menyelesaikan masalah saya.

Saya punya mesin dengan:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdal diinstal: gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal dipasang dari roda GDAL-1.11.4-cp34-none-win_amd64.whldari sini

GDAL diinstal ke C:\Python34\Lib\site-packages\osgeo. Di sana saya memiliki banyak file .exe untuk file gdal dan ogr dan .pyd.

  • fiona diinstal: diinstal dari roda Fiona-1.6.3-cp34-none-win_amd64.whl, dari situs web yang sama.

Saya dapat menjalankan kode ini dan dijalankan dengan sukses:

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

Saya juga bisa mendapatkan format OGR: ogrinfo --formatsmencetak banyak di Windows cmd (tanpa FileGDB di sana).

Saya dapat menjalankan kode ini dan dijalankan dengan sukses:

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

Namun, kode ini tidak akan berjalan:

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

Karena saya tidak memiliki pustaka terkompilasi Esri File GDB yang diperlukan.

Saya telah mengunduh dan membongkar FileGDB_API_VS2012_1_3.zipdari halaman unduhan Esri . Seperti yang saya mengerti, tidak perlu mengkompilasi apapun karena file .dll sudah ada di sana.

Apa prosedur yang benar untuk mendaftarkan dll dari Esri File GDB API untuk dapat menggunakannya di fiona di lingkungan saya?


UPDATE: (berdasarkan jawaban Luke)

Saya telah mengunduh File Geodatabase API 1.4 version for Windows (Visual Studio 2010)dari halaman unduhan Esri . Saya menyalin FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllke C:\Python34\Lib\site-packages\osgeo. Sekarang saya punya dua file di sini, ogr_FileGDB.dlldan FileGDBAPI.dll.

Saya telah membuat variabel Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. Dalam PATHvariabel, saya tidak punya sesuatu yang spesifik kecuali Python C:\Python34\Lib\site-packages\osgeo.

Sekarang ketika menjalankan ogrinfo --formatsI get -> "FileGDB" (read/write)dan saya dapat menggunakan kode Python untuk bekerja dengan driver FileGDB.

Alex Tereshenkov
sumber
1.4 Berkas Geodatabase API telah dirilis untuk lonnng waktu sekarang. Tidak ada alasan untuk menggunakan 1.3.
Vince
@ Lukas, terima kasih, tapi saya perlu akses tulis ke gdb. Afaik, Anda hanya dapat membaca dengan OpenFileGDB ... Adakah tautan atau halaman dokumen khusus bagaimana mencapainya dengan kompilasi dan bagaimana menunjukkannya ke dll (via variabel Windows dll)? Akan sangat membantu.
Alex Tereshenkov
@Vince, saya tidak keberatan menggunakan 1.4 atau versi lain yang akan memungkinkan saya mengedit file gdb :) Saya tidak memiliki halaman docs / spec dengan instruksi yang jelas bagaimana bisa melakukan itu.
Alex Tereshenkov
@AlexTereshenkov Ketika Anda menggunakan python 64bit, salin Esri bin64 \ FileGDBAPI.dll ke [python install dir]\Lib\site-packages\osgeodir seperti yang saya tentukan dalam jawaban saya, bukan dir gdalplugins yang Anda sebutkan di edit. Hanya plugin driver yang masuk direktori itu, bukan dll pihak ke-3.
user2856
1
@AlexTereshenkov, ogr_FileGDB.dll adalah driver FileGDB (bukan OpenFileGDB yang dibangun ke gdal / ogr). Dll ini dikompilasi dari kode driver GDAL / OGR . Itu harus di direktori yang ditentukan oleh GDAL_DRIVER_PATH env var.
user2856

Jawaban:

9

The Gohlke GDAL / OGR roda termasuk pengemudi FileGDB disusun sebagai plugin.

Untuk mengaktifkan driver FileGDB:

  1. Salin Esri bin64 \ FileGDB.dll ke [python install/virtualenv dir]\Lib\site-packages\osgeo(gunakan bin \ FileGDB.dll jika menggunakan python 32bit). Jangan menyalin FileGDB.dll ke direktori gdalplugins.
  2. Tetapkan variabel lingkungan GDAL_DRIVER_PATH, baik:
    • secara manual; atau
    • edit [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pydan batalkan komentar pada baris 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Membuka GDB dengan driver FileGDB sekarang akan berfungsi.

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

catatan:

Menggunakan Python 2.7 Saya hanya bisa mendapatkan plugin FileGDB untuk bekerja dengan FileGDB API v1.3 (MSVC 2008). sebagai v.1.4 segfaults python. Saya berasumsi ini karena python dan pustaka GDAL dan Fiona yang disediakan oleh Gohlke dikompilasi dengan MSVC 2008 dan v. 1.4 dikompilasi dengan MSVC 2010 (dan kemudian).

FileGDB API v1.4 berfungsi dengan baik dengan Python 3.4 dan pustaka GDAL dan Fiona yang disediakan oleh Gohlke yang dikompilasi dengan MSVC 2010.

pengguna2856
sumber
Saya akan menyalin bin64\FileGDBAPI.dlldari yang FileGDB_API_1_5_1-VS2010.zipterdapat di github.com/Esri/file-geodatabase-api/tree/master/... at step 1untuk membuatnya berfungsi (dengan Python 3.5 64bit)
Mattijn
Gdal saya secara otomatis diinstal dengan geopandasmenggunakan baris perintah miniconda conda install geopandas. Di __init__.pybaris 10 sudah dihapus, jadi saya tidak berpikir itu adalah garis yang Anda maksud. Juga tidak ada gdalpluginsfile
user32882
@ user32882 Instruksi ini bukan untuk conda diinstal gdal ...
user2856
Bagaimana saya mengaturnya untuk konda? Apakah ini mungkin?
user32882
4

Informasi kuncinya ada di sini:

Saya juga bisa mendapatkan format OGR: ogrinfo - format mencetak banyak di Windows cmd (tanpa FileGDB di sana).

Ini memberitahu saya bahwa GDAL_DRIVER_PATHvariabel lingkungan Anda tidak disetel. Lihat instruksi di https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Setelah "FileGDB" muncul di ogrinfo --formats(atau fio env --formats), Anda akan siap untuk menggunakannya.

sgillies
sumber
Terima kasih. Terkejut Anda punya waktu untuk menjawab pertanyaan pada GIS.SE - Anda mungkin sangat sibuk dengan fiona, rupawan, dan hal-hal lainnya. Hal-hal yang sangat keren yang kamu tulis, pujian. Saya sadar bahwa saya tidak memiliki driver FileGDB maka menanyakan bagaimana melakukan itu. Saya telah melihat halaman yang Anda rujuk, katanya perlu Compile GDAL with the FGDB section commented . Saya tidak memiliki sumber GDAL; Saya baru saja menginstalnya dari roda, jadi saya kira langkah-langkah itu tidak berlaku dalam kasus saya. Kemana saya harus pergi dari sini?
Alex Tereshenkov
1
The GDAL_DRIVER_PATHvariabel kunci. Baca trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH dan jika itu tidak membuat Anda berada di jalur yang benar, lihat utas di lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies
Langkah yang sedikit menyesatkan karena saya tidak perlu mengkompilasi apa pun - roda yang saya instal sudah memiliki semua yang saya butuhkan, itu hanya tentang menempelkan file di folder yang benar. Tapi terima kasih banyak untuk info yang berguna, baik untuk mengetahui untuk beberapa kasus penggunaan lainnya.
Alex Tereshenkov
Ini benar-benar jawaban yang benar. Tidak perlu mengubah instalasi, cukup setel jalur yang benar!
Benjamin