अजगर पॉलीगोन में GDAL बहुभुज खाली बहुभुज बना रहा है?


12

मुझे अजगर में बहुभुज फ़ंक्शन का उपयोग करने में परेशानी हो रही है। इसके लिए कुकबुक उदाहरण यहां पाया जा सकता है

मेरे कोड का प्रासंगिक भाग है:

sourceRaster = gdal.Open('myraster.tif')
band = sourceRaster.GetRasterBand(1)
bandArray = band.ReadAsArray()
outShapefile = "polygonized"
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.path.exists(outShapefile+".shp"):
    driver.DeleteDataSource(outShapefile+".shp")
outDatasource = driver.CreateDataSource(outShapefile+ ".shp")
outLayer = outDatasource.CreateLayer("polygonized", srs=None)
gdal.Polygonize( band, None, outLayer, -1, [], callback=None )
outDatasource.Destroy()
sourceRaster = None

मुझे पता है कि बैंड के पास प्रासंगिक जानकारी है, यहाँ एक स्निपेट है bandArray:

array([[ 4.,  4.,  3.,  3.,  3.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,  3.,
         3.,  3.,  3.,  3.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,
         4.,  4.,  4.,  4.],

जब मैं QGIS में विशेषता तालिका खोलता हूं, तो यह खाली है: QGIS स्क्रेंसेप्ट्योर

संपादित करें:

Raster -> रूपांतरण -> बहुभुज उपकरण का उपयोग करके रूपांतरण QGIS में ठीक काम करता है

बहुभुज होने के लिए रेखापुंज का स्क्रीनशॉट:

बहुभुज के लिए रेखापुंज

और QGIS उपकरण से परिणामी रूपांतरण का स्क्रीनशॉट:

QGIS उपकरण से बहुभुज रेखापुंज

मैं विंडोज 7, जीडीएएल संस्करण 1.10.0-3 पर एक्सिल्टेड डिस्ट्रो का उपयोग कर रहा हूं

समस्या यह है कि मैं GDAL और कुकबुक उदाहरण का उपयोग करके अजगर में एक रेखापुंज को बहुभुज नहीं कर सकता, मैं QGIS GUI में कोई समस्या नहीं के साथ इस एक ही रेखापुंज को बहुभुज कर सकता हूं


आपका रैस्टर कैसा दिखता है? क्या इसमें वास्तव में बहुभुज होते हैं? यदि आप इसके बजाय gdal_polygonize.py का उपयोग करते हैं तो क्या यह काम करता है?
ब्रैडहार्ड्स

QGIS में काम करने की प्रक्रिया के स्क्रीनशॉट को जोड़ने के लिए संपादित
Camdenl

यहां वास्तविक समस्या क्या है?
Fezter

जोड़ा गया विशिष्ट समस्या
कैमडेन

3
मुझे एक समान समस्या थी (रिक्त आकार-प्रकार बनाया जा रहा था), और क्षेत्र बनाने से कोई मदद नहीं मिली। मैं जो गलत कर रहा था, वह यह था कि मैंने पॉलीगॉइन करने से पहले अपने कोड में शेपफाइल को बंद नहीं किया था। आप इसे अपने उदाहरण में बंद करते हैं, मैं इसे केवल दूसरों के संदर्भ के लिए पोस्ट कर रहा हूं।
स्टेफनी

जवाबों:


19

समस्या यह है कि मैं रैस्टर बैंड को स्टोर करने के लिए एक फ़ील्ड नहीं बना रहा था। Gdal_polygonize.py फ़ाइल के माध्यम से खुदाई करने के बाद, मुझे एहसास हुआ कि gdal.Polygonize को कॉल करते समय यह स्वचालित रूप से नहीं किया जाता है, जो यहां पाए गए फ़ंक्शन का उपयोग करता है

यहाँ एक फ़ील्ड बनाने और फ़ील्ड में एक बैंड लिखने के लिए आवश्यक अतिरिक्त कदम है:

newField = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
outLayer.CreateField(newField)

फिर हम इस क्षेत्र में 0 के सूचकांक के साथ बैंड लिख सकते हैं:

gdal.Polygonize(band, None, outLayer, 0, [], callback=None )

मैं अजगर में बहुभुज के रूप में अपने रेखापुंज प्राप्त करने के लिए gdal.Polygonize () फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूं। लेकिन अंतिम पंक्ति में यह रनटाइम त्रुटि दिखा रहा है !! क्यों?
शिउली पेरविन

यह जियॉर्फेरेटेड रैस्टर फाइलों के साथ अच्छी तरह से काम करता है। परिणाम बहुत सारे बहुभुज हैं, लेकिन मैं केवल एक बड़े बहुभुज को रेखापुंज की रूपरेखा दिखाना चाहता हूं। क्या किसी को भी यह पता नहीं है कि यह उसी समय कैसे काम करता है?
शिउली पेरविन

फिर भी मुझे खाली शेपफाइल मिल रहा है, लेकिन मेरे पास dbf फाइल में पंक्तियाँ हैं। कृपया मुझे स्पष्ट करें!
सत्य चंद्र

मुझे बस यह समस्या थी लेकिन डमी फ़ील्ड को जोड़ने के बजाय, आप -1 का एक सूचकांक दर्ज कर सकते हैं। यहां देखें कि फ़ील्ड केवल तभी जोड़ा जाता है यदि अनुक्रमणिका = = 0।
jon_two
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.