PyQGIS रेखापुंज को प्रदान की गई छवि के रूप में सहेजता है, फिर उस पर GDAL टूल का उपयोग करें


12

मैंने QGis Save Raster के कोड को Rendered Image के रूप में उपयोग करने की कोशिश की है । iएक रेखापुंज परत है:

pipelayer = i
pipeextent = pipelayer.extent()
pipewidth, pipeheight = (pipelayer.width(),
                         pipelayer.height())
piperenderer = pipelayer.renderer()
pipeprovider = pipelayer.dataProvider()
crs = pipelayer.crs().toWkt()
pipe = QgsRasterPipe()
pipe.set(pipeprovider.clone())
pipe.set(piperenderer.clone())
pipedFile = os.path.join(tempfile.gettempdir(),
                         safeLayerName + '_pipe.tif')
print pipedFile
file_writer = QgsRasterFileWriter(pipedFile)
file_writer.writeRaster(pipe,
                        pipewidth,
                        pipeheight,
                        pipeextent,
                        pipelayer.crs())

in_raster = pipedFile
prov_raster = os.path.join(tempfile.gettempdir(),
                           'json_' + safeLayerName +
                           '_prov.tif')
out_raster = dataPath + '.png'
crsSrc = i.crs()
crsDest = QgsCoordinateReferenceSystem(4326)
xform = QgsCoordinateTransform(crsSrc, crsDest)
extentRep = xform.transform(i.extent())
extentRepNew = ','.join([unicode(extentRep.xMinimum()),
                         unicode(extentRep.xMaximum()),
                         unicode(extentRep.yMinimum()),
                         unicode(extentRep.yMaximum())])
processing.runalg("gdalogr:warpreproject", in_raster,
                  i.crs().authid(), "EPSG:4326", "", 0, 1,
                  5, 2, 75, 6, 1, False, 0, False, "",
                  prov_raster)
processing.runalg("gdalogr:translate", prov_raster, 100,
                  True, "", 0, "", extentRepNew, False, 0,
                  0, 75, 6, 1, False, 0, False, "",
                  out_raster)

यह काम नहीं करता है, इसके बजाय मुझे अंतिम आउटपुट के रूप में अस्थिर रेखापुंज दे रहा है। मैं वास्तव में समस्या को नहीं समझता, क्योंकि writeRaster(फ़ाइल pipedFile) का आउटपुट स्टाइल है, इसलिए ऊपर दिए गए उत्तर से प्रक्रिया काम कर रही है। यह सिर्फ इतना है कि जब मैं GDAL के माध्यम से चलाने के लिए उत्पादन छवि का उपयोग करने की कोशिश है warpreprojectऔर translate, यह किसी भी तरह unstyled रेखापुंज में बदल जाती।

मैंने क्या गल्त किया है?

अद्यतन : के उत्पादन में QgsRasterFileWriter किया जाता है स्टाइल। के उत्पादन में warpreprojectकिया जाता है नहीं स्टाइल है, लेकिन .tifएक के साथ है .aux.xmlउस में रंग जानकारी के लिए प्रकट होता है जो फ़ाइल:

<PAMDataset>
  <PAMRasterBand band="1">
    <Histograms>
      <HistItem>
        <HistMin>-0.498046875</HistMin>
        <HistMax>255.498046875</HistMax>
        <BucketCount>256</BucketCount>
        <IncludeOutOfRange>0</IncludeOutOfRange>
        <Approximate>1</Approximate>
        <HistCounts>314|4|3|2|3|5|4|4|5|8|10|9|16|16|23|26|37|46|58|62|69|77|77|94|127|94|131|136|133|162|169|172|171|184|200|186|207|196|186|177|179|194|182|182|178|177|181|195|196|196|195|195|179|226|206|215|193|197|202|212|207|206|232|204|229|253|233|240|248|234|234|268|240|238|259|286|268|287|259|264|255|267|268|271|256|321|277|284|317|286|290|277|312|334|319|325|323|310|349|357|347|326|337|338|336|383|374|349|411|382|382|417|406|405|414|427|404|434|447|430|468|424|446|442|450|461|448|458|457|459|412|414|469|466|443|475|464|472|481|519|504|458|473|481|514|523|522|494|542|580|604|623|686|648|707|763|808|799|819|853|932|1046|1062|1118|1145|1215|1293|1393|1335|1392|1390|1317|1232|1247|1215|1088|1032|896|847|731|708|666|608|634|556|500|484|456|433|408|406|401|386|388|414|414|387|382|340|346|382|385|368|348|334|376|359|318|339|326|357|315|319|357|333|328|329|310|344|295|300|351|347|324|358|349|363|361|347|396|386|433|395|434|479|473|523|550|644|655|672|778|882|1014|1183|1400|1681|2075|2531|3529|4851|7235|10793|60773|7297|1999</HistCounts>
      </HistItem>
    </Histograms>
    <Metadata>
      <MDI key="STATISTICS_MAXIMUM">255</MDI>
      <MDI key="STATISTICS_MEAN">203.31482680479</MDI>
      <MDI key="STATISTICS_MINIMUM">0</MDI>
      <MDI key="STATISTICS_STDDEV">63.158702013579</MDI>
    </Metadata>
  </PAMRasterBand>
</PAMDataset>

के उत्पादन में translateकिया जाता है नहीं स्टाइल और कोई अतिरिक्त फ़ाइल है। हालाँकि, चूंकि यह एक PNG नहीं है, एक GeoTIFF है, शायद यही स्पष्टीकरण है।

मैंने इसके expandविकल्प को देखने की कोशिश की है translate, लेकिन इससे मुझे छवि फ़ाइलें मिलती हैं जो वेब ब्राउज़र में प्रदर्शित नहीं होती हैं - मैंने इसकी जांच क्यों नहीं की है।

अद्यतन 2 : नहीं, का उपयोग कर expandमें परिणाम नहीं सब पर आउटपुट फ़ाइल। कोशिश करने के बारे में आश्चर्य है pct2rgb

अद्यतन 3 : मैं सोच रहा था कि क्या फ़ाइल लॉकिंग समस्याओं का कारण बन रही है। यह हो सकता है?


प्रोसेसिंग कॉल विरासत में मिला कोड है। क्या युद्ध की व्याख्या में पूरी तरह से गलत तर्क हैं? यदि हां, तो मुझे नहीं पता कि यह कैसे काम करता है।
टॉम चाडविन 19

1
बस एक अनुमान है, लेकिन साथ की gdalogr:translateकोशिश करो । prov_rasterprov_raster['OUTPUT']
जोसफ

नहीं है, prov_rasterसिर्फ इतना है कि फ़ाइल का पथ के साथ एक स्ट्रिंग है, इसलिए मैंTypeError: string indices must be integers
टॉम Chadwin

जवाबों:


2

आपको यह समझना चाहिए कि जब आप फ़ाइल को अपने कोड में QgsRenderer से बचाते हैं:

piperenderer = pipelayer.renderer()
pipe.set(piperenderer.clone())
file_writer.writeRaster(pipe...

आप रेखांकन स्टाइल को सहेज नहीं रहे हैं, इसके बजाय आप वास्तविक आरजीबी फ़ाइल को सहेज रहे हैं जो उस विज़ुअलाइज़ेशन का प्रतिनिधित्व करता है, इसलिए इसे वर्गीकृत या स्टाइल नहीं किया गया है, लेकिन यह ऐसा है जैसे आपने प्रदान की गई छवि का प्रिंट स्क्रीन लिया हो।

इसलिए gdalwarp और अनुवाद इसे बदल नहीं सकते हैं, क्योंकि यह छवि के बैंड में हार्डकोड है, क्या हो रहा है कि वे एक एकल बैंड से क्लिपिंग कर रहे हैं या नहीं, मुझे इसकी वस्तुतः जाँच करनी होगी।

संपादित करें

मैं आपके द्वारा प्रदान की गई xml फ़ाइल में देख सकता हूं कि रैस्टर में अब केवल एक बैंड है

<PAMRasterBand band="1">

टैग होना चाहिए:

<PAMRasterBand band="2">
<PAMRasterBand band="3">

तो समस्या में है gdalogr:warpreproject। मैंने उसी कोड का उपयोग किया है जो आपके पास मेरे पास उपलब्ध है, लेकिन आउटपुट RGB है, मुझे नहीं पता कि क्या चल रहा है, हो सकता है कि आप अपनी रेखापुंज फ़ाइल का एक नमूना दें।

ध्यान दें

Xml में कोई शैली डेटा नहीं है, जैसा कि मैंने कहा कि रेखापुंज को आपने सबसे पहले सहेजा है, एक स्टाइल लेयर नहीं है, लेकिन वास्तविक आरजीबी छवि स्टाइल वाले रास्टर का प्रतिनिधित्व करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.