PyQGIS збережіть растр як відтворене зображення, а потім використовуйте на ньому інструменти GDAL


12

Я спробував використовувати код із QGis Save Raster як відтворене зображення . 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, як - то повертається до растру без стилів.

Що я зробив неправильно?

UPDATE : Вихід 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 : Мені цікаво, чи блокування файлів викликає проблеми. Це може бути?


Обробні дзвінки передаються у спадок. Чи є у військовогопроекту абсолютно неправильні аргументи? Якщо так, я не знаю, як це взагалі працює.
Том Чадвін

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...

Ви не зберігаєте растрові стилі, натомість ви зберігаєте фактичний RGB-файл, який представляє цю візуалізацію, тому він не класифікується чи не стилюється, але це так, як ви зняли екран друку відображеного зображення.

Тож gdalwarp та переклад не можуть змінити це, оскільки це жорстко закодовано в смугах зображення, що має відбуватися, це те, що вони відсікаються однією смугою або близько того, я мушу це перевірити.

EDIT

Я бачу у файлі xml, який ви вказали, що растр має лише одну смугу

<PAMRasterBand band="1">

Там повинні бути теги:

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

Тож проблема в gdalogr:warpreproject. Я використовував той самий код, який ви вказали в растрі, який я маю, але вихід RGB, я не знаю, що відбувається, можливо, вам слід надати зразок вашого растрового файлу.

ПРИМІТКА

У xml немає даних про стиль, як я сказав, що растр, який ви спочатку зберегли, - це не стильовий шар, а власне RGB-зображення, що представляє стильовий растр.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.