Как добавить поддержку драйвера FileGDB (Esri file gdb API) в Фионе?


13

По этому вопросу было множество вопросов, но ни один из них не решил мою проблему.

У меня есть машина с:

  • Windows 7 x64
  • Python 3.4.3 x64
  • GDAL установлено: gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; GDAL была установлена с колесом GDAL-1.11.4-cp34-none-win_amd64.whlот сюда

GDAL установлен в C:\Python34\Lib\site-packages\osgeo. Там у меня есть куча файлов .exe для файлов gdal, ogr и .pyd.

  • Фиона установлена: была установлена ​​с руля Fiona-1.6.3-cp34-none-win_amd64.whl, с того же сайта.

Я могу запустить этот код, и он успешно выполняется:

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

Я также могу получать форматы OGR: ogrinfo --formatsпечатает их несколько в Windows cmd (хотя там и нет FileGDB).

Я могу запустить этот код, и он успешно выполняется:

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

Однако этот код не будет работать:

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

Потому что у меня нет скомпилированных библиотек Esri File GDB, которые необходимы.

Я скачал и распаковал FileGDB_API_VS2012_1_3.zipсо страницы загрузки Esri . Как я понял, не нужно ничего компилировать, так как .dll уже есть.

Как правильно зарегистрировать dll API Esri File GDB, чтобы использовать их в fiona в моей среде?


ОБНОВЛЕНИЕ: (основываясь на ответе Люка)

Я скачал File Geodatabase API 1.4 version for Windows (Visual Studio 2010)со страницы загрузки Esri . Я скопировал FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllв C:\Python34\Lib\site-packages\osgeo. Теперь у меня есть два файла здесь, ogr_FileGDB.dllи FileGDBAPI.dll.

Я создал переменную Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. В PATHпеременной у меня нет ничего специфичного для Python, кроме C:\Python34\Lib\site-packages\osgeo.

Теперь при запуске ogrinfo --formatsя получаю -> "FileGDB" (read/write)и могу использовать код Python для работы с драйвером FileGDB.


API файловой базы геоданных 1.4 выпущен уже давно . Там действительно нет оснований для использования 1.3.
Винс

@ Люк, спасибо, но мне нужен доступ для записи в GDB. Afaik, вы можете читать только с OpenFileGDB ... Какие-то конкретные ссылки или страницы документа, как этого добиться с помощью компиляции и как указать на DLL (через переменные Windows и т. Д.)? Было бы очень полезно.
Алексей Терешенков

@ Винс, я не возражаю против использования 1.4 или любой другой версии, которая позволила бы мне редактировать файл gdb :) Мне не хватает страницы / спецификации документации с четкими инструкциями, как это сделать.
Алексей Терешенков

@AlexTereshenkov Поскольку вы используете 64-битный питон, скопируйте Esri bin64 \ FileGDBAPI.dll в каталог, [python install dir]\Lib\site-packages\osgeoкак я указал в своем ответе, а не в каталог gdalplugins, который вы упомянули при редактировании. В этот каталог попадают только плагины драйверов, а не сторонние библиотеки.
user2856

1
@AlexTereshenkov, ogr_FileGDB.dll - это драйвер FileGDB (не OpenFileGDB, встроенный в gdal / ogr). Эта dll скомпилирована из кода драйвера GDAL / OGR . Он должен находиться в каталоге, указанном в переменной GDAL_DRIVER_PATH env.
user2856

Ответы:


9

Колеса Gohlke GDAL / OGR включает в себя драйвер FileGDB скомпилированный как плагин.

Чтобы заставить работать драйвер FileGDB:

  1. Скопируйте Esri bin64 \ FileGDB.dll в [python install/virtualenv dir]\Lib\site-packages\osgeo(используйте bin \ FileGDB.dll при использовании 32-битного Python). Не копируйте FileGDB.dll в каталог gdalplugins.
  2. Установите переменную среды GDAL_DRIVER_PATH, либо:
    • вручную; или же
    • отредактируйте [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyи раскомментируйте строку 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Открытие GDB с драйвером FileGDB теперь должно работать.

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

Замечания:

Используя Python 2.7, я мог получить только плагин FileGDB для работы с FileGDB API v1.3 (MSVC 2008). как v.1.4 segfaults python. Я предполагаю, что это потому, что библиотеки Python и GDAL и Fiona, предоставляемые Gohlke, скомпилированы с MSVC 2008, а версия 1.4 скомпилирована с MSVC 2010 (и более поздними версиями).

FileGDB API v1.4 прекрасно работает с Python 3.4 и библиотеками GDAL и Fiona, предоставленными Gohlke, которые скомпилированы с MSVC 2010.


Я бы скопировал bin64\FileGDBAPI.dllс FileGDB_API_1_5_1-VS2010.zipрасположенного на github.com/Esri/file-geodatabase-api/tree/master/… at, step 1чтобы заставить его работать (в Python 3.5 64bit)
Mattijn

Мой gdal был автоматически установлен с geopandasпомощью командной строки miniconda conda install geopandas. В __init__.pyстроке 10 уже нет комментариев, поэтому я не думаю, что это строка, на которую вы ссылаетесь. Тоже нет gdalpluginsфайла
user32882

@ user32882 Эти инструкции не для Конды, установленной gdal ...
user2856

Как я могу настроить его для Conda? Это возможно?
user32882

4

Ключевая информация здесь:

Я также могу получать форматы OGR: ogrinfo --formats печатает их несколько в Windows cmd (хотя там и нет FileGDB).

Это говорит мне, что ваша GDAL_DRIVER_PATHпеременная окружения не установлена. См. Инструкции по адресу https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Как только "FileGDB" появится в ogrinfo --formats(или fio env --formats), вам будет хорошо.


Спасибо. Удивлен, что у вас есть время ответить на вопросы о GIS.SE - вы, вероятно, очень заняты Фиона, стройные и другие вещи. Очень классные вещи, которые вы написали, слава. Я знаю, что у меня нет драйвера FileGDB, поэтому спрашиваю, как это сделать. Я видел страницу, на которую вы ссылаетесь, она говорит, что нужно Compile GDAL with the FGDB section commented . У меня нет источника GDAL; Я только что установил его с руля, поэтому я думаю, что эти шаги не применимы в моем случае. Куда мне идти отсюда?
Алексей Терешенков

1
GDAL_DRIVER_PATHПеременная является ключевым. Прочитайте trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH, и если это не поможет вам выбрать правильный путь, просмотрите ветку по адресу lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html. ,
sgillies

Немного вводящих в заблуждение шагов, так как мне не нужно ничего компилировать - на колесах, которые я установил, уже было все, что мне нужно, это было просто вставка файлов в нужную папку. Но большое спасибо за полезную информацию в любом случае, полезно знать для некоторых других случаев использования.
Алексей Терешенков

Это абсолютно правильный ответ. Не нужно менять установку, просто установите правильные пути!
Бенджамин

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.