วิธีเข้าถึงคลาสคุณลักษณะในฐานข้อมูลไฟล์ด้วย Python และ GDAL


21

ฉันพยายามเข้าถึงชุดข้อมูลเวกเตอร์ในฐานข้อมูลไฟล์ ESRI โดยใช้ Python + GDAL ฉันรวบรวม GDAL สำเร็จแล้วด้วยไฟล์ Geodatabase API ไดรเวอร์ FileGDB ทำงานอย่างถูกต้องตั้งแต่เข้ามา

ogrinfo --formats

แสดงให้เห็นถึงไดรเวอร์ FileGDB และการเข้าสู่

ogrinfo myfilegdb.gdb 

ให้ข้อมูลที่ถูกต้องกับเนื้อหาของฐานข้อมูล

อย่างไรก็ตามฉันไม่สามารถหาวิธีเข้าถึงเนื้อหาใน Python ได้ สำหรับการเข้าถึง shapefile ฉันจะเขียน:

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 32 บิตและ 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เพื่อรับคุณลักษณะของคุณ


เมื่อคุณรู้ว่ามันดูเหมือนเป็นตรรกะ :-) ขอบคุณมากทางออกของคุณจะหลอกลวง
Niels

6

ผมอยากจะเพิ่มว่า "FileGDB" เป็นคนขับ propriatary ที่อาจจะไม่ถูกรวมอยู่กับคุณ GDAL แพคเกจhttp://www.gdal.org/drv_filegdb.html ผลนี้ในการกลับมาGetDriverByNameNone

นอกจากนี้ยังมีไดรเวอร์ "OpenFileGDB" ซึ่งอ่านได้อย่างเดียวและรวมอยู่ในค่าเริ่มต้นที่http://www.gdal.org/drv_openfilegdb.html

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

3

ง่ายกว่าและเข้าใจได้ง่ายมากถ้าคุณใช้ fiona และ geopandas

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/pgoglke/pythonlibs , pip pip pip ติดตั้ง, pipwin ติดตั้ง pip, pipwin ติดตั้ง pandas , pipwin ติดตั้งหุ่นดี, pipwin ติดตั้ง gdal, pipwin ติดตั้ง fiona, pipwin ติดตั้ง pyproj, pipwin ติดตั้งหก, pipwin ติดตั้ง rtree, ติดตั้ง geopandas pipwin, ตรวจสอบหลามอยู่ในเส้นทางสภาพแวดล้อมของคุณใน GDAL CPx.y แสดงเวอร์ชันของ Python สำหรับ ระบบ 32 บิตใช้ 32 บิตเครื่องหมายจุลภาคหมายถึงบรรทัดใหม่
mohsen hs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.