पायथन और जीडीएएल के साथ फाइल जियोडेट डेटाबेस में फीचर क्लासेस को कैसे एक्सेस करें?


21

मैं पायथन + GDAL का उपयोग करके एक ESRI फ़ाइल जियोडेटाबेस में एक वेक्टर डेटासेट एक्सेस करने का प्रयास कर रहा हूं। मैंने GDAL को फ़ाइल जियोडैटेबेस एपीआई के साथ सफलतापूर्वक संकलित किया है। FileGDB ड्राइवर प्रवेश करने के बाद से सही ढंग से काम कर रहा है

ogrinfo --formats

FileGDB ड्राइवर और प्रवेश दिखाता है

ogrinfo myfilegdb.gdb 

मुझे डेटाबेस की सामग्री के बारे में सही जानकारी देता है।

हालाँकि, मुझे यह पता नहीं चल पाया है कि पाइथन में सामग्री का उपयोग कैसे किया जाता है। एक आकृति के उपयोग के लिए, मैं लिखूंगा:

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 से अलग-अलग फीचर क्लासेस को कैसे कॉल किया जाता है।

मैं Ubuntu 12.04 x64 पर पायथन 2.7, GDAL 1.9.1, फ़ाइलगार्ड एपी 1.2 का उपयोग कर रहा हूं। किसी भी सुझाव के लिए धन्यवाद!


क्या आप मुझे FileGDB ड्राइवर के लिए OGR स्थापित करने के लिए कुछ विचार दे सकते हैं?
गिसर

जवाबों:


18

तुम लगभग वहां थे। यह विंडोज 7, पायथन 2.6.5 32 बिट, और जीडीएएल 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

नोट: फियोना गदल का उपयोग करता है और जिओपांडास फियोना का उपयोग करता है

यह भी देखें कि पायथन में जियोडेटाबेस फ़ाइल परतों के नाम पढ़ना


पूर्व-आवश्यकताएं: पाइप स्थापित करें "GDAL-3.0.2-cp36-cp36m-win_amd64.whl" #see यहाँ lfd.uci.edu/~gohlke/pythonlives , पाइप इंस्टॉल व्हील्स, पाइप इंस्टॉल करें pipwin, pipwin install numpy, pipwin install pandasas पांडा। , pipwin को सुडौल रूप से स्थापित करें, pipwin को gdal, pipwin को स्थापित करें fiona, pipwin को pyproj स्थापित करें, pipwin को छह स्थापित करें, pipwin को स्थापित करें rtree, pipwin को स्थापित करें geopandas, Check python आपके पर्यावरण पथ में है, GDAL CPx.y में आपके Python के संस्करण को दिखाया गया है 32-बिट सिस्टम 32 बिट का उपयोग करता है, अल्पविराम का अर्थ है एक नई लाइन
mohsen hs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.