Python ve GDAL ile dosya coğrafi veritabanlarındaki özellik sınıflarına nasıl erişilir?


21

Python + GDAL kullanarak bir ESRI File Geodatabase'deki vektör veri kümesine erişmeye çalışıyorum. GDAL'yi geodatabase API dosyasıyla başarıyla derledim. FileGDB sürücüsü girildiğinden beri doğru çalışıyor

ogrinfo --formats

FileGDB sürücüsünü gösterir ve

ogrinfo myfilegdb.gdb 

bana veritabanının içeriği hakkında doğru bilgi verir.

Ancak, içeriğe Python'da nasıl erişildiğini bulamıyorum. Bir şekil dosyasına erişmek için şunu yazarım:

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

Bir FileGDB özellik sınıfına erişirken, komutları kullanmayı varsayacağım:

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

ancak veri kümesini tanımlayamadığı / bulamadığı için bu işe yaramaz gibi görünüyor. Bireysel özellik sınıflarının ESRI FileGDB'den nasıl çağırılacağını bilen var mı?

Ubuntu 12.04 x64'te Python 2.7, GDAL 1.9.1, filegdb api 1.2 kullanıyorum. Herhangi bir öneriniz için teşekkür ederiz!


OGR for FileGDB sürücüsünü kurmak için bana biraz fikir verebilir misiniz?
giser

Yanıtlar:


18

Neredeyse oradasın. Bu, Windows 7, Python 2.6.5 32bit ve GDAL 1.9.0'da:

>>> 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'yi açtıktan sonra, özellik sınıfınıza GetLayergeçmek için kullanın .


Bir kere o kadar mantıklı gözüktüğünü öğrendikten sonra :-) çok teşekkürler, çözümünüz hile yapar.
Niels


3

Fiona ve geopandas kullanıyorsanız çok daha basit ve sezgisel

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

Not: fiona gdal kullanır ve geopandas fiona kullanır

Ayrıca bkz : Python'da coğrafi veri tabanı katmanlarının adlarını okuma


Önkoşul: pip yükleme "GDAL-3.0.2-cp36-cp36m-win_amd64.whl" #burada burada lfd.uci.edu/~gohlke/pythonlibs , pip yükleme tekerlekleri, pip kurulum pipwin, pipwin kurulum numpy, pipwin kurulum pandalar pipwin düzgün yükleme, pipwin yükleme gdal, pipwin fiona yükleme, pipwin yükleme pyproj, pipwin yükleme altı, pipwin yükleme rtree, pipwin yükleme geopandas, python çevre yolunda kontrol edin, GDAL CPx.y için Python sürümünü gösterir. 32-bit sistem kullanmak 32-bit kullanır, virgül yeni bir hat demektir
mohsen hs
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.