Bagaimana cara mengakses kelas fitur dalam file geodatabases dengan Python dan GDAL?


21

Saya mencoba mengakses dataset vektor dalam ESRI File Geodatabase menggunakan Python + GDAL. Saya telah berhasil mengkompilasi GDAL dengan file geodatabase API. Driver FileGDB berfungsi dengan benar sejak masuk

ogrinfo --formats

menunjukkan driver FileGDB dan masuk

ogrinfo myfilegdb.gdb 

memberi saya informasi yang benar tentang isi database.

Namun, saya tidak dapat menemukan cara mengakses konten itu sendiri dengan Python. Untuk mengakses shapefile, saya akan menulis:

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

Saat mengakses kelas fitur FileGDB saya akan berasumsi menggunakan perintah:

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

tetapi ini tampaknya tidak berfungsi karena tidak dapat mengidentifikasi / menemukan kumpulan data. Adakah yang tahu cara memanggil kelas fitur individual dari ESRI FileGDB.

Saya menggunakan Python 2.7, GDAL 1.9.1, filegdb api 1.2 di Ubuntu 12.04 x64. Terima kasih atas sarannya!


Bisakah Anda memberi saya ide untuk menginstal OGR untuk driver FileGDB?
Giser

Jawaban:


18

Kamu hampir sampai. Ini pada Windows 7, Python 2.6.5 32bit, dan 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 '
>>>

Setelah Anda membuka FGDB, kemudian gunakan GetLayeruntuk mendapatkan di FeatureClass Anda.


Setelah Anda tahu itu tampak sangat logis :-) terima kasih banyak, solusi Anda akan berhasil.
Niels


3

Jauh lebih sederhana dan intuitif jika Anda menggunakan fiona dan geopanda

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

Catatan: fiona menggunakan gdal dan geopanda menggunakan fiona

Lihat juga Membaca nama lapisan file geodatabase dengan Python


Prasyarat: pip instal "GDAL-3.0.2-cp36-cp36m-win_amd64.whl" # lihat di sini lfd.uci.edu/~gohlke/pythonlibs , pip pasang roda, pip pasang pipwin, pipwin install numpy, pipwin install panda , pipwin instal rupawan, pipwin instal gdal, pipwin instal fiona, pipwin instal pyproj, pipwin instal enam, pipwin instal rtree, instal pipwin instal geopandas, Periksa python ada di Path Lingkungan Anda, Di GDAL CPx.y menunjukkan versi Python Anda untuk Sistem 32-bit menggunakan 32 bit, koma berarti baris baru
mohsen hs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.