PyQGIS, tarama görüntüsünü işlenen görüntü olarak kaydeder, daha sonra üzerinde GDAL araçları kullanır


12

QGis Save Raster kodunu Rendered Image olarak kullanmaya çalıştım . ibir raster katmanıdır:

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)

İşe yaramaz, bunun yerine bana nihai çıktı olarak sökülmemiş raster verir. Çıktısı çünkü gerçekten sorunu anlamıyorum writeRaster(dosyaya pipedFile) olduğu tarz Yukarıda bağlantılı cevabını süreç çalışıyor bu yüzden. Sadece GDAL'leri çalıştırmak için çıktı görüntüsünü kullanmaya çalıştığımda warpreprojectve bir translateşekilde steril olmayan rasterlere geri dönüyor.

Neyi yanlış yaptım?

GÜNCELLEME : çıktısının QgsRasterFileWriter biçimi belirlenir . Çıktısı warpreprojectolan değil tarz, ama .tifbir eşlik eder .aux.xmlİçinde renk bilgilere sahip gibi görünüyor dosyası:

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

Çıktısı translateolan değil tarz ve hiçbir ek dosyası vardır. Ancak, GeoTIFF değil bir PNG olduğu için belki de açıklama budur.

expandSeçeneğine bakmayı denedim translate, ama bu bana bir web tarayıcısında görüntülenmeyen görüntü dosyaları veriyor - nedenini araştırmadım.

GÜNCELLEME 2 : Hayır, hiçbir çıktı dosyası olmadanexpand sonuçları kullanarak . Denemeyi merak ediyorum .pct2rgb

GÜNCELLEME 3 : Dosya kilitlemenin sorunlara neden olup olmadığını merak ediyorum. Olabilir mi?


İşleme çağrıları devralınan koddur. Çözgü projesinin tamamen yanlış argümanları var mı? Öyleyse, nasıl çalıştığını bilmiyorum.
Tom Chadwin

1
Sadece bir tahmin ama için gdalogr:translate, değiştirmeyi deneyin prov_rasterile prov_raster['OUTPUT'].
Joseph

Hayır, prov_rasterbu dosyaya giden yolu içeren bir dize, bu yüzden anladımTypeError: string indices must be integers
Tom Chadwin

Yanıtlar:


2

QgsRenderer'dan dosyayı kodunuzdaki gibi kaydettiğinizde şunu anlamalısınız:

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

Raster stilini kaydetmiyorsunuz, bunun yerine bu görselleştirmeyi temsil eden gerçek RGB dosyasını kaydediyorsunuz, bu yüzden sınıflandırılmıyor veya stil oluşturulmuyor, ancak işlenen görüntünün bir baskı ekranını almışsınız gibi.

Bu yüzden gdalwarp ve translate bunu değiştiremez, çünkü görüntü bantlarında sabit kodlanmış olduğundan, olması gereken tek bir bantla kesilmiş olmalarıdır, bunu kesinlikle kontrol etmeliyim.

DÜZENLE

Raster artık sadece bir bant olması koşuluyla xml dosyasında görebilirsiniz

<PAMRasterBand band="1">

Etiketler olmalı:

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

Yani sorun içeride gdalogr:warpreproject. Sahip olduğum bir rasterde sağladığınız aynı kodu kullandım ama çıktı RGB, ne olduğunu bilmiyorum, belki raster dosyanızın bir örneğini vermelisiniz.

NOT

İlk kaydettiğiniz raster, bir stil katmanı değil, stil edilmiş raster'i temsil eden gerçek bir RGB görüntüsü olduğunu söylediğim gibi xml'nin stil verisi yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.