Houve muitas perguntas sobre isso, mas nenhuma delas resolveu meu problema.
Eu tenho uma máquina com:
- Windows 7 x64
- Python 3.4.3 x64
- gdal instalado:
gdalinfo --version --> GDAL 1.11.4, released 2016/01/25
; gdal foi instalado a partir de uma rodaGDAL-1.11.4-cp34-none-win_amd64.whl
de aqui
O GDAL está instalado no C:\Python34\Lib\site-packages\osgeo
. Lá eu tenho um monte de arquivos .exe para arquivos gdal e ogr e .pyd.
- fiona instalado: foi instalado a partir de uma roda
Fiona-1.6.3-cp34-none-win_amd64.whl
, no mesmo site.
Eu sou capaz de executar este código e ele executa com sucesso:
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()
Também consigo obter formatos OGR: ogrinfo --formats
imprime vários deles no cmd do Windows (sem o FileGDB lá).
Eu sou capaz de executar este código e ele executa com sucesso:
import fiona
with fiona.drivers():
with fiona.open(path=r'C:\Data\GIS\TemplateData.gdb', driver='OpenFileGDB') as source:
print(source.meta)
No entanto, esse código não será executado:
with fiona.drivers():
with fiona.open(path=r'C:\Data\GIS\TemplateData.gdb', driver='FileGDB') as source:
print(source.meta)
Porque eu não tenho as bibliotecas compiladas do Esri File GDB que são necessárias.
Fiz o download e descompactei FileGDB_API_VS2012_1_3.zip
na página de downloads da Esri . Pelo que entendi, não há necessidade de compilar nada, pois a DLL já está lá.
Qual é o procedimento correto para registrar a DLL da API do Esri File GDB para poder usá-las no fiona no meu ambiente?
ATUALIZAÇÃO: (com base na resposta de Luke)
Fiz File Geodatabase API 1.4 version for Windows (Visual Studio 2010)
o download na página de downloads da Esri . Eu copiei o FileGDB_API_VS2010_1_4\bin64\FileGDBAPI.dll
para o C:\Python34\Lib\site-packages\osgeo
. Agora eu tenho dois arquivos aqui ogr_FileGDB.dll
e FileGDBAPI.dll
.
Eu criei uma variável do Windows GDAL_DRIVER_PATH : C:\Python34\Lib\site-packages\osgeo\gdalplugins
. Na PATH
variável, não tenho nada específico em Python, exceto o C:\Python34\Lib\site-packages\osgeo
.
Agora, ao executar o que ogrinfo --formats
eu recebo -> "FileGDB" (read/write)
e posso usar o código Python para trabalhar com o driver FileGDB.
[python install dir]\Lib\site-packages\osgeo
diretório conforme especificado na minha resposta, e não o diretório gdalplugins que você mencionou na sua edição. Somente plug-ins de driver entram nesse diretório, não dlls de terceiros.Respostas:
A roda Gohlke GDAL / OGR inclui o driver FileGDB compilado como um plug-in.
Para que o driver FileGDB funcione:
[python install/virtualenv dir]\Lib\site-packages\osgeo
(use bin \ FileGDB.dll se estiver usando o python de 32 bits). Não copie o FileGDB.dll para o diretório gdalplugins.[python install/virtualenv dir]\Lib\site-packages\osgeo\__init__.py
e descomentar a linha 10.# uncomment the next line to enable plugins
os.environ['GDAL_DRIVER_PATH'] = os.path.join(os.path.dirname(__file__), 'gdalplugins')
A abertura de um GDB com o driver FileGDB agora deve funcionar.
Nota:
Usando o Python 2.7, só consegui que o plugin FileGDB funcionasse com a API FileGDB v1.3 (MSVC 2008). como v.1.4 segfaults python. Suponho que isso ocorre porque o python e as bibliotecas GDAL e Fiona fornecidas pela Gohlke são compiladas com o MSVC 2008 e a v. 1.4 é compilada com o MSVC 2010 (e posterior).
A API FileGDB v1.4 funciona bem com o Python 3.4 e as bibliotecas GDAL e Fiona fornecidas pela Gohlke, que são compiladas com o MSVC 2010.
fonte
bin64\FileGDBAPI.dll
a partirFileGDB_API_1_5_1-VS2010.zip
localizado na github.com/Esri/file-geodatabase-api/tree/master/... emstep 1
fazê-lo funcionar (em Python 3.5 64bit)geopandas
usando a linha de comando minicondaconda install geopandas
. Na__init__.py
linha 10 já não é comentada, então não acho que seja a linha a que você está se referindo. Também não há nenhumgdalplugins
arquivoAs informações principais estão aqui:
Isso me diz que sua
GDAL_DRIVER_PATH
variável de ambiente não está definida. Consulte as instruções em https://trac.osgeo.org/gdal/wiki/FileGDB#Testingthedriver . Quando o "FileGDB" aparecer emogrinfo --formats
(oufio env --formats
), você estará pronto .fonte
Compile GDAL with the FGDB section commented
. Eu não tenho a fonte GDAL; Acabei de instalá-lo a partir do volante, então acho que essas etapas não são aplicáveis no meu caso. Para onde devo ir daqui?GDAL_DRIVER_PATH
variável é a chave. Leia trac.osgeo.org/gdal/wiki/ConfigOptions#GDAL_DRIVER_PATH e, se isso não o colocar no caminho certo, consulte o tópico em lists.osgeo.org/pipermail/gdal-dev/2014-May/039066.html .Copiar arquivos FileGDBAPI.dll na pasta C: \ Arquivos de Programas \ QGIS 2.18 \ bin e ogr_FileGDB.dll na pasta C: \ Arquivos de Programas \ QGIS 2.18 \ bin \ gdalplugins faz o truque para mim. Aqui está um documento que explica seu uso .
fonte