Fiona'da FileGDB (Esri file gdb API) sürücüsü desteği nasıl eklenir?


13

Bu konuda bir sürü soru vardı ama hiçbiri sorunumu çözmedi.

Bir makinem var:

  • Windows 7 x64
  • Python 3.4.3 x64
  • gdal yüklü gdalinfo --version --> GDAL 1.11.4, released 2016/01/25:; gdal bir çarkından yüklendiği GDAL-1.11.4-cp34-none-win_amd64.whldan burada

GDAL içine kurulur C:\Python34\Lib\site-packages\osgeo. Orada gdal ve ogr ve .pyd dosyaları için bir sürü .exe dosyaları var.

  • fiona yüklü: bir tekerlekten Fiona-1.6.3-cp34-none-win_amd64.whl, aynı web sitesinden kuruldu .

Bu kodu çalıştırmak mümkün ve başarıyla yürütür:

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

Ayrıca OGR formatlarını da elde edebiliyorum: ogrinfo --formatsWindows cmd'de bunlardan bir demet yazdırıyor (orada FileGDB olmadan).

Bu kodu çalıştırmak mümkün ve başarıyla yürütür:

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

Ancak, bu kod çalışmaz:

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

Çünkü gerekli olan Esri File GDB derlenmiş kitaplıkları yok.

Ben indirilen ve paketlenmemiş olması FileGDB_API_VS2012_1_3.zipden Esri indirme sayfasına . Anladığım kadarıyla, .dll zaten orada olduğu gibi bir şey derlemeye gerek yoktur.

Benim ortamımda fiona kullanmak için Esri Dosya GDB API dll kaydetmek için doğru prosedür nedir?


GÜNCELLEME: (Luke'un cevabına dayanarak)

Ben indirmiş File Geodatabase API 1.4 version for Windows (Visual Studio 2010)gelen Esri indirme sayfasına . Ben kopyalanan FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dlliçin C:\Python34\Lib\site-packages\osgeo. Şimdi burada iki dosyam var ogr_FileGDB.dllve FileGDBAPI.dll.

Bir Windows değişkeni oluşturdum GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins. Gelen PATHdeğişken, ben dışında herhangi bir şey Python özgü yok C:\Python34\Lib\site-packages\osgeo.

Çalıştırırken Şimdi ogrinfo --formatsben get -> "FileGDB" (read/write)ve FileGDB sürücüsü ile çalışmak için Python kodunu kullanmak mümkün.


1.4 Dosya Geodatabase API'si artık uzun bir süredir piyasaya sürüldü . Gerçekten 1.3 kullanmak için bir neden yok.
Vince

@ Luke, teşekkürler, ama gdb'ye yazma erişimine ihtiyacım var. Afaik, sadece OpenFileGDB ile okuyabilirsiniz ... Herhangi bir belirli bağlantı veya doc sayfası nasıl derleme ile bunu başarmak ve nasıl dll (Windows değişkenleri vb üzerinden) işaret? Çok yardımcı olur.
Alex Tereshenkov

@Vince, 1.4 veya gdb dosyasını düzenlememe izin verecek başka bir sürüm kullanmanın sakıncası yok :) Bunu nasıl yapabileceğimi açık talimatları ile docs sayfası / spec yok.
Alex Tereshenkov

@AlexTereshenkov 64bit python kullanırken, Esri bin64 \ FileGDBAPI.dll [python install dir]\Lib\site-packages\osgeodosyasını düzenlemede bahsettiğiniz gdalplugins dizinine değil, cevabımda belirttiğim gibi dir dizinine kopyalayın. Yalnızca sürücü eklentileri bu dizine gider, 3. taraf dll'leri değil.
user2856

1
@AlexTereshenkov, ogr_FileGDB.dll, FileGDB sürücüsüdür (gdal / ogr içine yerleşik OpenFileGDB değil). Bu dll GDAL / OGR sürücü kodundan derlenmiştir . GDAL_DRIVER_PATH env var. Tarafından belirtilen dizinde olması gerekir.
user2856

Yanıtlar:


9

GOHLKE GDAL / OGR tekerlekli bir eklentisi olarak derlenmiş FileGDB sürücüsü içerir.

FileGDB sürücüsünü çalıştırmak için:

  1. Esri bin64 \ FileGDB.dll dosyasını kopyalayın [python install/virtualenv dir]\Lib\site-packages\osgeo(32bit python kullanıyorsanız bin \ FileGDB.dll kullanın). FileGDB.dll dosyasını gdalplugins dizinine kopyalamayın.
  2. GDAL_DRIVER_PATH ortam değişkenini şunlardan birini ayarlayın:
    • el ile; veya
    • düzenleme [python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.pyve açma satır 10.
      # uncomment the next line to enable plugins
      os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')

Bir GDB'nin FileGDB sürücüsü ile açılması şimdi çalışmalıdır.

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

Not:

Python 2.7 kullanarak sadece FileGDB eklentisi FileGDB API v1.3 (MSVC 2008) ile çalışmak için alabilirim. v.1.4 segfaults python olarak. Bunun nedeni, Gohlke tarafından sağlanan python ve GDAL ve Fiona kütüphanelerinin MSVC 2008 ile derlenmiş olması ve v. 1.4'ün MSVC 2010 (ve üstü) ile derlenmesidir.

FileGDB API v1.4, Python 3.4 ve Gohlke tarafından sağlanan ve MSVC 2010 ile derlenen GDAL ve Fiona kütüphaneleri ile iyi çalışır.


Ben kopyalamak ediyorum bin64\FileGDBAPI.dllden FileGDB_API_1_5_1-VS2010.zipbulunan github.com/Esri/file-geodatabase-api/tree/master/... de step 1(3.5 64bit Python) çalışması için
Mattijn

Benim geopandasgdal'ım miniconda komut satırı kullanılarak otomatik olarak kuruldu conda install geopandas. Gelen __init__.pyhat 10 zaten uncommented, bu yüzden sen başvuruyorsunuz çizgidir sanmıyorum. Ayrıca gdalpluginsdosya yok
user32882

@ user32882 Bu talimatlar, conda yüklü gdal için değil ...
user2856

Conda için nasıl kurabilirim? Mümkün mü?
user32882

4

Anahtar bilgiler burada:

OGR formatlarını da elde edebiliyorum: ogrinfo --formats, Windows cmd'de bunlardan bir demet yazdırıyor (orada FileGDB olmadan).

Bu bana GDAL_DRIVER_PATHortam değişkeninizin ayarlanmadığını söyler . Https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver adresindeki talimatlara bakın . "FileGDB" ifadesi ogrinfo --formats(veya fio env --formats) görüntülendikten sonra, hazır olursunuz.


Teşekkürler. CBS ile ilgili soruları cevaplamak için zamanınız olduğunda şaşırttı - muhtemelen fiona, düzgün ve diğer şeylerle süper meşgulsünüz. Çok güzel şeyler yazdın, kudos. FileGDB sürücüsüne sahip olmadığımı ve bunun nasıl yapılacağını sorduğumu biliyorum. Başvurduğunuz sayfayı gördüm, diyor ki Compile GDAL with the FGDB section commented . GDAL kaynağım yok; Sadece tekerlekten taktım, bu yüzden sanırım bu adımlar benim durumumda geçerli değil. Buradan nereye gitmeliyim?
Alex Tereshenkov

1
GDAL_DRIVER_PATHDeğişken anahtarıdır. Trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH adresini okuyun ve bu sizi doğru yola koymazsa lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html adresindeki ileti dizisine bakın. .
sgillies

Hiçbir şey derlemem gerekmediğinden biraz yanıltıcı adımlar - kurduğum tekerlekler zaten ihtiyacım olan her şeye sahipti, sadece dosyaları doğru klasöre yapıştırmakla ilgiliydi. Ama yine de yararlı bilgiler için bir ton teşekkürler, diğer bazı kullanım durumları için bilmek iyi.
Alex Tereshenkov

Bu kesinlikle doğru cevap. Kurulumu değiştirmenize gerek yok, sadece doğru yolları ayarlayın!
Benjamin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.