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.