วิธีเข้าถึงคลาสคุณลักษณะในฐานข้อมูลไฟล์ด้วย 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.