Як отримати доступ до класів функцій у файлових базах даних з Python та GDAL?


21

Я намагаюся отримати доступ до векторного набору даних у базі даних геоданих ESRI за допомогою Python + GDAL. Я успішно компілював GDAL з файлом API geodatabase. З моменту введення драйвер FileGDB працює коректно

ogrinfo --formats

показує драйвер FileGDB та входить

ogrinfo myfilegdb.gdb 

дає мені правильну інформацію про вміст бази даних.

Однак я не можу дізнатися, як отримати доступ до самого контенту в Python. Для доступу до файлу форм я напишу:

driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.Open('shapefile.shp', 0)

Під час доступу до класу функцій FileGDB я б припустив використовувати команди:

driver = ogr.GetDriverByName('FileGDB')
ds = driver.Open('myfilegdb.gdb/feature_class', 0)

але це, здається, не працює, оскільки він не може ідентифікувати / знайти набір даних. Хтось знає, як викликати окремі класи функцій з ESRI FileGDB.

Я використовую Python 2.7, GDAL 1.9.1, filegdb api 1.2 на Ubuntu 12.04 x64. Дякуємо за будь-які пропозиції!


Чи можете ви дати мені якусь ідею встановити OGR для драйвера FileGDB?
giser

Відповіді:


18

Ти майже там. Це на Windows 7, Python 2.6.5 32bit та GDAL 1.9.0:

>>> from osgeo import ogr
>>> driver = ogr.GetDriverByName("FileGDB")
>>> ds = driver.Open(r"C:\temp\buildings.gdb", 0)
>>> ds
<osgeo.ogr.DataSource; proxy of <Swig Object of type 'OGRDataSourceShadow *' at 0x02BB7038> >
>>> ds.GetLayer("buildings")
<osgeo.ogr.Layer; proxy of <Swig Object of type 'OGRLayerShadow *' at 0x02BB7050> >
>>> b = ds.GetLayer("buildings")
>>> sr = b.GetSpatialRef()
>>> sr
<osgeo.osr.SpatialReference; proxy of <Swig Object of type 'OSRSpatialReferenceShadow *' at 0x02BB7080> >
>>> sr.ExportToProj4()
'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '
>>>

Після того, як ви відкриєте FGDB, тоді використовуйте, GetLayerщоб перейти до свого класу функцій.


Як тільки ви знаєте, це здається таким логічним :-) велике спасибі, ваше рішення робить трюк.
Нільс

6

Я хотів би додати, що "FileGDB" - це власний драйвер, який може не входити до вас в пакет GDAL http://www.gdal.org/drv_filegdb.html . Це призводить до GetDriverByNameповернення None.

Є також драйвер "OpenFileGDB", який читається лише і включений за замовчуванням http://www.gdal.org/drv_openfilegdb.html

>>> from osgeo import ogr
>>> driver = ogr.GetDriverByName("OpenFileGDB")

3

Набагато простіше та інтуїтивніше, якщо ви користуєтесь фіонами та геопандами

import fiona 
import geopandas as gpd

# Get all the layers from the .gdb file 
layers = fiona.listlayers(gdb_file)

for layer in layers:
    gdf = gpd.read_file(gdb_file,layer=layer)
    # Do stuff with the gdf

Примітка: fiona використовує gdal, а geopandas використовує fiona

Див. Також Читання назв шарів файлів бази даних геоданих у Python


Попередні реквізити: встановити pip "GDAL-3.0.2-cp36-cp36m-win_amd64.whl" # див. Тут lfd.uci.edu/~gohlke/pythonlibs , колеса для встановлення pip, встановити pipwin, встановити pipwin numpy, встановити панди , встановити pipwin формально, встановити pipwin gdal, встановити pipwin fiona, встановити pipwin pyproj, встановити pipwin шість, встановити pipwin rtree, встановити pipwin geopandas, перевірити python у вашому середовищі Шлях, у GDAL CPx.y показана версія вашого Python для 32-розрядна система використовує 32 біт, кома означає новий рядок
mohsen hs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.