fiona에서 FileGDB (Esri 파일 gdb API) 드라이버에 대한 지원을 추가하는 방법은 무엇입니까?


13

그것에 대해 많은 질문이 있었지만 아무도 내 문제를 해결하지 못했습니다.

나는 다음과 같은 기계를 가지고있다 :

  • 윈도우 7 x64
  • 파이썬 3.4.3 x64
  • 설치되는 페달 : 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. 거기에 gdal 및 ogr 및 .pyd 파일에 대한 .exe 파일이 있습니다.

  • fiona installed : Fiona-1.6.3-cp34-none-win_amd64.whl같은 웹 사이트에서 wheel로 설치되었습니다 .

이 코드를 실행할 수 있으며 성공적으로 실행됩니다.

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 --formatsWindows 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 컴파일 라이브러리가 없기 때문에.

Esri 다운로드 페이지FileGDB_API_VS2012_1_3.zip 에서 다운로드하여 압축 을 풀었습니다 . 내가 이해했듯이 .dll이 이미 있으므로 아무것도 컴파일 할 필요가 없습니다.

내 환경에서 fiona에서 사용할 수 있도록 Esri File GDB API의 dll을 등록하는 올바른 절차는 무엇입니까?


업데이트 : (누가의 답변에 따라)

Esri 다운로드 페이지File Geodatabase API 1.4 version for Windows (Visual Studio 2010) 에서를 다운로드했습니다 . 나는 복사 받는 . 지금은 여기에 두 개의 파일을 가지고 와 .FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dllC:\Python34\Lib\site-packages\osgeoogr_FileGDB.dllFileGDBAPI.dll

Windows 변수를 만들었습니다 GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. 에서 PATH변수 I는 제외하고 아무것도 파이썬 관련이 없습니다 C:\Python34\Lib\site-packages\osgeo.

실행중인 경우 지금 ogrinfo --formatsI get 및을 -> "FileGDB" (read/write)하고 FileGDB 드라이버 작업을위한 파이썬 코드를 사용할 수있게되었습니다.


1.4 파일 지오 데이터베이스 API는 A에 대한 릴리스되었습니다 lonnng의 현재 시간. 실제로 1.3을 사용할 이유가 없습니다.
— Vince

@Luke, 감사하지만 gdb에 대한 쓰기 권한이 필요합니다. Afaik, OpenFileGDB로만 읽을 수 있습니다 ... 특정 링크 또는 문서 페이지에서 컴파일로 달성하는 방법과 dll을 지적하는 방법 (Windows 변수 등을 통해)? 매우 도움이 될 것입니다.
— Alex Tereshenkov

@Vince, 1.4 또는 gdb 파일을 편집 할 수있는 다른 버전을 사용하지 않아도됩니다. :) docs page / spec이없는 방법에 대한 명확한 지침이 없습니다.
— Alex Tereshenkov

@AlexTereshenkov 64 비트 파이썬을 사용하면서 Esri bin64 \ FileGDBAPI.dll을 [python install dir]\Lib\site-packages\osgeo편집에서 언급 한 gdalplugins 디렉토리가 아니라 내 대답에 지정된 디렉토리에 복사하십시오 . 타사 플러그인이 아닌 해당 디렉토리에 드라이버 플러그인 만 있습니다.
— user2856

1
@AlexTereshenkov, ogr_FileGDB.dll은 FileGDB 드라이버입니다 (gdal / ogr에 내장 된 OpenFileGDB 아님). 이 dll은 GDAL / OGR 드라이버 코드 에서 컴파일됩니다 . GDAL_DRIVER_PATH env var에 의해 지정된 디렉토리에 있어야합니다.
— user2856

답변:


9

Gohlke GDAL / OGR 휠은 플러그인으로 컴파일 FileGDB의 드라이버가 포함되어 있습니다.

FileGDB 드라이버를 작동 시키려면 :

  1. Esri bin64 \ FileGDB.dll을 [python install/virtualenv dir]\Lib\site-packages\osgeo(32 비트 파이썬을 사용하는 경우 bin \ FileGDB.dll 사용)에 복사하십시오 . FileGDB.dll을 gdalplugins 디렉토리로 복사하지 마십시오.
  2. GDAL_DRIVER_PATH 환경 변수를 설정하십시오.
    • 수동; 또는
    • [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.py10 행 편집 및 주석 해제.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

FileGDB 드라이버로 GDB를 열면 작동합니다.

>>> 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 파이썬으로. Gohlke가 제공하는 python과 GDAL 및 Fiona 라이브러리는 MSVC 2008로 컴파일되고 v. 1.4는 MSVC 2010 이상으로 컴파일되기 때문입니다.

FileGDB API v1.4는 Python 3.4 및 Gohlke에서 제공하는 GDAL 및 Fiona 라이브러리 (MSVC 2010으로 컴파일 됨)에서 잘 작동합니다.


나는 복사 할 거라고 bin64\FileGDBAPI.dll에서 FileGDB_API_1_5_1-VS2010.zip에 위치한 github.com/Esri/file-geodatabase-api/tree/master/... 에서 step 1(3.5 64 비트 파이썬)가 작동하도록
— Mattijn

내 gdal은 geopandasminiconda 명령 줄 을 사용하여 자동으로 설치되었습니다 conda install geopandas. 에서 __init__.py라인 (10)가 이미 주석, 그래서 당신이 언급하는 줄 생각하지 않습니다. 또한 gdalplugins파일 이 없습니다
— user32882

@ user32882이 지침은 conda가 설치된 gdal 용이 아닙니다.
— user2856

콘 다를 위해 어떻게 설정할 수 있습니까? 이게 가능해?
— 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에 대한 질문에 대답 할 시간이 있다는 사실에 놀랐습니다. 아마도 피오나, 매끈한 및 다른 것들로 매우 바쁠 것입니다. 당신이 쓴 아주 멋진 것들, kudos. FileGDB 드라이버가 없으므로 그 방법을 묻습니다. 귀하가 참조하는 페이지를 보았습니다 Compile GDAL with the FGDB section commented . GDAL 소스가 없습니다. 방금 바퀴에서 설치 했으므로 해당 단계가 제 경우에는 적용되지 않는 것 같습니다. 여기서 어디로 가야합니까?
— Alex Tereshenkov

1
GDAL_DRIVER_PATH변수가 핵심이다. trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH를 읽고 올바른 경로로 설정하지 않으면 list.osgeo.org/pipermail/gdal-dev/2014-May/039066.html 의 스레드를 참조하십시오. .
— sgillies

내가 컴파일 할 필요가없는 약간의 오해의 여지가있는 단계-내가 설치 한 바퀴에는 이미 필요한 모든 것이 있었으며 파일을 올바른 폴더에 붙여 넣는 것입니다. 그러나 어쨌든 유용한 정보에 대해 많은 의견을 보내주십시오.
— Alex Tereshenkov

이것은 절대적으로 정답입니다. 설치를 바꿀 필요가 없으며 올바른 경로를 설정하십시오!
— Benjamin

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.