Як додати підтримку драйвера FileGDB (API файлу grib Esri) у fiona?


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 встановлена: була встановлена ​​з колеса 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друкує купу їх у cmd Windows (але 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 файлу GDB файлів Esri, щоб мати можливість використовувати їх у 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 файлів Geodatabase 1.4 вийшов вже довгий час. Дійсно немає підстав для використання 1.3.
Вінс

@Luke, дякую, але мені потрібен доступ для запису до gdb. Afaik, ти можеш читати лише з OpenFileGDB ... Будь-які конкретні посилання чи сторінку документа, як цього досягти за допомогою компіляції та як вказати на dll (через змінні Windows тощо)? Було б дуже корисно.
Олексій Терешенков

@Vince, я не проти використання 1.4 або будь-якої іншої версії, яка дозволила б мені редагувати файл gdb :) Мені не вистачає сторінки / специфікації документів з чіткими інструкціями, як це зробити.
Олексій Терешенков

@AlexTereshenkov Оскільки ви використовуєте 64-бітний python, скопіюйте Esri bin64 \ FileGDBAPI.dll у [python install dir]\Lib\site-packages\osgeodir, як я вказав у своїй відповіді, а не gdalplugins dir, який ви згадуєте у своїй редакції. У цьому каталозі йдуть лише плагіни драйверів, а не сторонні dll.
користувач2856

1
@AlexTereshenkov, ogr_FileGDB.dll - драйвер FileGDB (не OpenFileGDB, який вбудований у gdal / ogr). Цей dll складається з коду драйвера GDAL / OGR . Він повинен знаходитись у каталозі, визначеному GDAL_DRIVER_PATH env var.
користувач2856

Відповіді:


9

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

Щоб працювати з драйвером FileGDB:

  1. Скопіюйте Esri bin64 \ FileGDB.dll [python install/virtualenv dir]\Lib\site-packages\osgeo(використовуйте bin \ FileGDB.dll, якщо використовується 32-бітний пітон). Не копіюйте 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 для роботи з API FileGDB v1.3 (MSVC 2008). як v.1.4 segfaults python. Я припускаю, що це тому, що бібліотеки python та GDAL та Fiona, надані Голке, зібрані з MSVC 2008, а v. 1.4 - з MSVC 2010 (та пізнішими версіями).

API FileGDB 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 / ... на , step 1щоб змусити його працювати (в Python 3.5 64bit)
Mattijn

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

@ user32882 Ці інструкції не призначені для конда, встановленого gdal ...
user2856

Як я можу його встановити для конди? Чи можливо це?
user32882

4

Ключова інформація тут:

Я також можу отримати формати OGR: ogrinfo --formats друкує купу їх у cmd Windows (але 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, і якщо це не встановило вас на правильний шлях, перегляньте нитку на списку.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies

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

Це абсолютно правильна відповідь. Не потрібно змінювати інсталяцію навколо, просто встановіть правильні шляхи!
Бенджамін

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.