পাইকিজিআইএস রেন্ডারকে রেন্ডার করা চিত্র হিসাবে সংরক্ষণ করুন, তারপরে এটিতে জিডিএল সরঞ্জামগুলি ব্যবহার করুন


12

আমি কিউজিস সেভ রাস্টার থেকে কোডটি রেন্ডার ইমেজ হিসাবে ব্যবহার করার চেষ্টা করেছি । 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) করা হয় , স্টাইল, যাতে উত্তর উপরে লিঙ্ক থেকে প্রক্রিয়া কাজ করে যাচ্ছে। এটি ঠিক তখনই যখন আমি জিডিএল এর মাধ্যমে চালানোর জন্য আউটপুট চিত্রটি ব্যবহার করার চেষ্টা করি warpreprojectএবং translateএটি কোনওরকম স্টাইলহীন রাস্টারগুলিতে ফিরে আসে।

আমি কি ভুল করেছি?

আপডেট : আউটপুট 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হয় না স্টাইল, এবং কোন অতিরিক্ত ফাইল আছে। তবে এটি যেহেতু এটি কোনও পিএনজি জিওটিআইএফএফ নয়, সম্ভবত এটির ব্যাখ্যা।

আমি expandবিকল্পটি দেখার চেষ্টা করেছি translate, তবে এটি আমাকে এমন চিত্রযুক্ত ফাইল দেয় যা কোনও ওয়েব ব্রাউজারে প্রদর্শিত হয় না - আমি কেন তদন্ত করিনি।

আপডেট 2 : না, expandফলাফলের মোটেই কোনও আউটপুট ফাইল নেই । চেষ্টা করে ভাবছি pct2rgb

আপডেট 3 : আমি ভাবছি যদি ফাইল লক করা সমস্যা তৈরি করে। এটা হতে পারে?


প্রসেসিং কলগুলি উত্তরাধিকার সূত্রে প্রাপ্ত কোড। ওয়ারপ্রিপ্রজেক্টের কি সম্পূর্ণ ভুল যুক্তি রয়েছে? যদি তা হয় তবে আমি জানি না এটি কীভাবে কাজ করে।
টম চ্যাডউইন

1
মাত্র একটি অনুমান কিন্তু gdalogr:translate, প্রতিস্থাপন চেষ্টা prov_rasterসঙ্গে prov_raster['OUTPUT']
জোসেফ

না, prov_rasterসেই ফাইলটির পথের সাথে কেবল একটি স্ট্রিং, তাই আমি পেয়েছিTypeError: string indices must be integers
টম চ্যাডউইন

উত্তর:


2

আপনার বুঝতে হবে যে আপনি যখন আপনার কোড হিসাবে QgsRenderer থেকে ফাইলটি সংরক্ষণ করেন:

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

আপনি রাস্টার স্টাইলযুক্ত সংরক্ষণ করছেন না, পরিবর্তে আপনি প্রকৃত আরজিবি ফাইল সংরক্ষণ করছেন যা সেই চিত্রটি উপস্থাপন করে, সুতরাং এটি শ্রেণিবদ্ধ বা স্টাইলযুক্ত নয়, তবে এটি রেন্ডার ইমেজের একটি মুদ্রণ স্ক্রিন গ্রহণ করার মতো।

সুতরাং gdalwarp এবং অনুবাদ এটি পরিবর্তন করতে পারে না, কারণ এটি চিত্রের ব্যান্ডগুলিতে হার্ডকোড করা হয়েছে, যা ঘটতে হবে তা হ'ল তারা কোনও একক ব্যান্ড দ্বারা ক্লিপ করছে বা তাই, আমাকে এটি তদন্ত করতে হবে।

সম্পাদনা

আপনি যে এক্সএমএল ফাইল সরবরাহ করেছেন তা আমি দেখতে পাচ্ছি যে রাস্টারদের এখন কেবল একটি ব্যান্ড রয়েছে

<PAMRasterBand band="1">

ট্যাগগুলি থাকা উচিত:

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

সুতরাং সমস্যা হয় gdalogr:warpreproject। আমার কাছে থাকা রাস্টারগুলিতে আপনি সরবরাহ করেছেন একই কোডটি আমি ব্যবহার করেছি তবে আউটপুটটি আরজিবি, কী হচ্ছে তা আমি জানি না, সম্ভবত আপনার রাস্টার ফাইলের একটি নমুনা দেওয়া উচিত।

বিঃদ্রঃ

এক্সএমএলটির কোনও স্টাইলের ডেটা নেই, কারণ আমি বলেছি যে আপনি যে রাস্টারটি প্রথমে সংরক্ষণ করেছেন সেটি স্টাইলযুক্ত স্তর নয়, তবে স্টাইলযুক্ত রাস্টারকে উপস্থাপন করে এমন একটি আসল আরজিবি চিত্র।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.