Как добавить поддержку драйвера 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.

user2856
источник
Я бы скопировал 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), вам будет хорошо.

sgillies
источник
Спасибо. Удивлен, что у вас есть время ответить на вопросы о 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
Немного вводящих в заблуждение шагов, так как мне не нужно ничего компилировать - на колесах, которые я установил, уже было все, что мне нужно, это было просто вставка файлов в нужную папку. Но большое спасибо за полезную информацию в любом случае, полезно знать для некоторых других случаев использования.
Алексей Терешенков
Это абсолютно правильный ответ. Не нужно менять установку, просто установите правильные пути!
Бенджамин