FionaでFileGDB(Esriファイルgdb API)ドライバーのサポートを追加する方法は?


12

それについてはたくさんの質問がありましたが、誰も私の問題を解決しませんでした。

私はマシンを持っています:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdalがインストールされました:gdalinfo --version --> GDAL 1.11.4, released 2016/01/25; ここからホイール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同じWebサイトの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はすでにそこにあるので何もコンパイルする必要はありません。

Esri File GDB APIのdllを登録して、私の環境のfionaで使用できるようにする正しい手順は何ですか?


更新:(ルークの回答に基づく)

EsriのダウンロードページFile Geodatabase API 1.4 version for Windows (Visual Studio 2010)からダウンロードしました。をにコピーしました。ここに2つのファイルがあります。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、変数、私は除いて何もPythonの特定を持っていませんC:\Python34\Lib\site-packages\osgeo

今実行しているときogrinfo --formats、私は取得-> "FileGDB" (read/write)してFileGDBドライバを操作するためのPythonコードを使用することができています。


1.4ファイルジオデータベース APIがリリースされました。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\osgeo編集で言及したgdalpluginsディレクトリではなく、回答で指定したディレクトリにコピーします。そのディレクトリには、サードパーティのdllではなく、ドライバプラグインのみが含まれます。
user2856

1
@ AlexTereshenkov、ogr_FileGDB.dllはFileGDB ドライバーです(gdal / ogrに組み込まれているOpenFileGDBではありません)。このdllは、GDAL / OGR ドライバーコードからコンパイルされます。GDAL_DRIVER_PATH環境変数で指定されたディレクトリにある必要があります。
user2856

回答:


9

ゴールケGDAL / OGRホイールは、プラグインとしてコンパイルFileGDBドライバを含みます。

FileGDBドライバーを機能させるには:

  1. Esri bin64 \ FileGDB.dllをコピーします[python install/virtualenv dir]\Lib\site-packages\osgeo(32ビットpythonを使用する場合はbin \ FileGDB.dllを使用します)。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')

これで、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 API v1.3(MSVC 2008)で動作するFileGDBプラグインしか取得できませんでした。v.1.4としてsegfaults python。これは、Gohlkeが提供するpythonおよびGDALおよびFionaライブラリがMSVC 2008でコンパイルされ、v。1.4がMSVC 2010(以降)でコンパイルされているためだと考えられます。

FileGDB API v1.4は、Python 3.4と、MSVC 2010でコンパイルされたGohlkeが提供するGDALおよびFionaライブラリで正常に動作します。


github.com/Esri/file-geodatabase-api/tree/master / ...にあるからコピーbin64\FileGDBAPI.dllしてFileGDB_API_1_5_1-VS2010.zip動作step 1させる(Python 3.5 64ビット)
Mattijn

私のgdalはgeopandas、minicondaコマンドラインを使用して自動的にインストールされましたconda install geopandas。では__init__.pyライン10がすでにコメント解除されているので、私はそれはあなたが参照している行ではないと思います。また、gdalpluginsファイルはありません
-user32882

@ user32882これらの命令はcondaのための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)に表示されたら、準備は万端です。


ありがとう。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

何もコンパイルする必要がなかったため、少し誤解を招く手順がありました。インストール済みのホイールには必要なものがすべて揃っていたので、適切なフォルダーにファイルを貼り付けるだけでした。しかし、とにかく有用な情報を提供してくれてありがとう。他のユースケースにも知っておくといい。
アレックステレシェンコフ

これは絶対に正しい答えです。インストールを変更する必要はありません。正しいパスを設定するだけです!
ベンジャミン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.