Làm cách nào để thêm hỗ trợ cho trình điều khiển FileGDB (Esri file gdb API) trong fiona?


12

Đã có hàng tấn câu hỏi về điều đó nhưng không ai trong số họ giải quyết vấn đề của tôi.

Tôi có một máy với:

  • Windows 7 x64
  • Python 3,4.3 x64
  • gdal cài đặt : gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; gdal đã được cài đặt từ một bánh xe GDAL-1.11.4-cp34-none-win_amd64.whltừ đây

GDAL được cài đặt vào C:\Python34\Lib\site-packages\osgeo. Ở đó tôi có một loạt các tập tin .exe cho các tập tin gdal và ogr và .pyd.

  • fiona đã cài đặt: được cài đặt từ một bánh xe Fiona-1.6.3-cp34-none-win_amd64.whl, từ cùng một trang web.

Tôi có thể chạy mã này và nó thực thi thành công:

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

Tôi cũng có thể nhận được các định dạng OGR: ogrinfo --formatsin một loạt chúng trong cmd Windows (mặc dù không có FileGDB ở đó).

Tôi có thể chạy mã này và nó thực thi thành công:

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

Tuy nhiên, mã này sẽ không chạy:

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

Bởi vì tôi không có thư viện biên dịch Esri File GDB được yêu cầu.

Tôi đã tải xuống và giải nén FileGDB_API_VS2012_1_3.ziptừ trang tải xuống Esri . Theo tôi hiểu, không cần phải biên dịch bất cứ thứ gì vì đã có sẵn.

Quy trình chính xác để đăng ký dll API EsB File Esri để có thể sử dụng chúng trong fiona trong môi trường của tôi là gì?


CẬP NHẬT: (dựa trên câu trả lời của Luke)

Tôi đã tải xuống File Geodatabase API 1.4 version for Windows (Visual Studio 2010)từ trang tải xuống Esri . Tôi đã sao chép FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllvào C:\Python34\Lib\site-packages\osgeo. Bây giờ tôi có hai tập tin ở đây, ogr_FileGDB.dllFileGDBAPI.dll.

Tôi đã tạo một biến Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. Trong PATHbiến, tôi không có gì cụ thể về Python ngoại trừ C:\Python34\Lib\site-packages\osgeo.

Bây giờ khi chạy, ogrinfo --formatstôi nhận -> "FileGDB" (read/write)và có thể sử dụng mã Python để làm việc với trình điều khiển FileGDB.


1,4 file Geodatabase API đã được phát hành cho một lonnng thời gian bây giờ. Thực sự không có lý do để sử dụng 1.3.
Vince

@Luke, cảm ơn, nhưng tôi cần quyền truy cập ghi vào gdb. Afaik, bạn chỉ có thể đọc với OpenFileGDB ... Bất kỳ liên kết hoặc trang tài liệu cụ thể nào để đạt được điều đó với quá trình biên dịch và làm thế nào để chỉ ra dll (thông qua các biến Windows, v.v.)? Sẽ rất hữu ích.
Alex Tereshenkov

@Vince, tôi không phiền khi sử dụng 1.4 hoặc bất kỳ phiên bản nào khác cho phép tôi chỉnh sửa tệp gdb :) Tôi thiếu trang tài liệu / thông số kỹ thuật với hướng dẫn rõ ràng để có thể làm điều đó.
Alex Tereshenkov

@AlexTereshenkov Khi bạn đang sử dụng python 64 bit, hãy sao chép Esri bin64 \ FileGDBAPI.dll vào [python install dir]\Lib\site-packages\osgeothư mục như tôi đã chỉ định trong câu trả lời của tôi, không phải là thư mục gdalplugins mà bạn đề cập trong chỉnh sửa của mình. Chỉ các plugin trình điều khiển đi trong thư mục đó, không phải dlls của bên thứ 3.
dùng2856

1
@AlexTereshenkov, ogr_FileGDB.dll là trình điều khiển FileGDB (không phải OpenFileGDB được tích hợp trong gdal / ogr). Dll này được tổng hợp từ mã trình điều khiển GDAL / OGR . Nó cần phải nằm trong thư mục được chỉ định bởi GDAL_DRIVER_PATH env var.
dùng2856

Câu trả lời:


9

Các bánh xe Gohlke GDAL / OGR bao gồm tài xế FileGDB biên soạn như một plugin.

Để trình điều khiển FileGDB hoạt động:

  1. Sao chép Esri bin64 \ FileGDB.dll sang [python install/virtualenv dir]\Lib\site-packages\osgeo(sử dụng bin \ FileGDB.dll nếu sử dụng python 32 bit). Không sao chép FileGDB.dll vào thư mục gdalplugins.
  2. Đặt biến môi trường GDAL_DRIVER_PATH, một trong hai:
    • thủ công; hoặc là
    • chỉnh sửa [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyvà bỏ dòng 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Mở GDB bằng trình điều khiển FileGDB sẽ hoạt động.

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

Ghi chú:

Sử dụng Python 2.7 Tôi chỉ có thể có được plugin FileGDB để hoạt động với FileGDB API v1.3 (MSVC 2008). như v.1.4 pyfaults python. Tôi cho rằng điều này là do python và các thư viện GDAL và Fiona do Gohlke cung cấp được biên dịch với MSVC 2008 và v. 1.4 được biên dịch với MSVC 2010 (và sau đó).

FileGDB API v1.4 hoạt động tốt với Python 3.4 và các thư viện GDAL và Fiona do Gohlke cung cấp được biên dịch với MSVC 2010.


Tôi muốn sao chép bin64\FileGDBAPI.dlltừ FileGDB_API_1_5_1-VS2010.ziptọa lạc tại github.com/Esri/file-geodatabase-api/tree/master/... tại step 1để làm cho nó làm việc (bằng Python 3.5 64bit)
Mattijn

Gdal của tôi đã được cài đặt tự động bằng geopandascách sử dụng dòng lệnh miniconda conda install geopandas. Trong __init__.pydòng 10 đã không bị thiếu, vì vậy tôi không nghĩ đó là dòng bạn đang đề cập đến. Ngoài ra không có gdalpluginstệp
user32882

@ user32882 Những hướng dẫn này không dành cho conda đã cài đặt gdal ...
user2856

Làm thế nào tôi có thể thiết lập nó cho conda? Điều này có thể không?
dùng32882

4

Thông tin chính ở đây:

Tôi cũng có thể nhận được các định dạng OGR: ogrinfo --formats in một loạt chúng trong cmd Windows (mặc dù không có FileGDB ở đó).

Điều này cho tôi biết rằng GDAL_DRIVER_PATHbiến môi trường của bạn không được đặt. Xem hướng dẫn tại https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Khi "FileGDB" hiển thị trong ogrinfo --formats(hoặc fio env --formats), bạn sẽ thấy ổn.


cảm ơn. Ngạc nhiên vì bạn có thời gian để trả lời các câu hỏi trên GIS.SE - có lẽ bạn đang rất bận rộn với fiona, tạo hình và những thứ khác. Những điều rất tuyệt vời bạn đã viết, danh tiếng. Tôi biết rằng tôi không có trình điều khiển FileGDB do đó hỏi làm thế nào để làm điều đó. Tôi đã thấy trang bạn tham khảo, nó nói rằng một người cần phải Compile GDAL with the FGDB section commented . Tôi không có nguồn GDAL; Tôi vừa mới cài đặt nó từ bánh xe, vì vậy tôi đoán những bước đó không thể áp dụng trong trường hợp của tôi. Tôi nên đi đâu từ đây?
Alex Tereshenkov

1
Các GDAL_DRIVER_PATHbiến là chìa khóa. Đọc trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH và nếu điều đó không đưa bạn đi đúng hướng, hãy xem chủ đề tạilists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .
sgillies

Một số bước sai lầm khi tôi không cần phải biên dịch bất cứ thứ gì - các bánh xe tôi đã cài đặt đã có mọi thứ tôi cần, nó chỉ là về việc dán các tệp trong thư mục bên phải. Nhưng cảm ơn rất nhiều cho dù sao thông tin hữu ích, tốt để biết cho một số trường hợp sử dụng khác.
Alex Tereshenkov

Đây hoàn toàn là câu trả lời đúng. Không cần thay đổi cài đặt xung quanh, chỉ cần đặt đúng đường dẫn!
Benjamin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.