Saya telah mencoba menggunakan kode dari QGis Save Raster sebagai Rendered Image . i
adalah layer raster:
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)
Itu tidak berhasil, sebaliknya memberi saya raster tanpa gaya sebagai hasil akhir. Aku benar-benar tidak mengerti masalah, karena output dari writeRaster
(file pipedFile
) yang ditata, sehingga proses dari jawaban terkait dengan di atas bekerja. Hanya saja ketika saya mencoba menggunakan gambar output untuk dijalankan melalui GDAL warpreproject
dan translate
, entah bagaimana kembali ke raster tanpa gaya.
Apa yang telah saya lakukan salah?
UPDATE : Output dari QgsRasterFileWriter
yang bergaya. Output dari warpreproject
ini tidak ditata, tetapi .tif
disertai dengan .aux.xml
berkas yang tampaknya memiliki informasi warna di dalamnya:
<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>
Output dari translate
ini tidak ditata, dan tidak memiliki file tambahan. Namun, karena ini PNG bukan GeoTIFF, mungkin itulah penjelasannya.
Saya sudah mencoba melihat expand
opsi translate
, tetapi itu memberi saya file gambar yang tidak ditampilkan di browser web - Saya belum menyelidiki alasannya.
UPDATE 2 : Tidak, menggunakan expand
hasil tanpa file output sama sekali. Ingin tahu tentang mencoba pct2rgb
.
UPDATE 3 : Saya ingin tahu apakah penguncian file menyebabkan masalah. Mungkinkah?
gdalogr:translate
, coba gantiprov_raster
denganprov_raster['OUTPUT']
.prov_raster
hanya string dengan jalur ke file itu, jadi saya mengertiTypeError: string indices must be integers
Jawaban:
Anda harus memahami bahwa ketika Anda menyimpan file dari QgsRenderer seperti dalam kode Anda:
Anda tidak menyimpan gaya raster, sebaliknya Anda menyimpan file RGB sebenarnya yang mewakili visualisasi itu, sehingga tidak diklasifikasikan atau ditata, tetapi sepertinya Anda telah mengambil layar cetak dari gambar yang diberikan.
Jadi gdalwarp dan translate tidak dapat mengubah ini, karena hardcoded dalam band-band gambar, apa yang harus terjadi adalah bahwa mereka terpotong oleh satu band atau lebih, saya harus memeriksanya dengan baik.
EDIT
Saya dapat melihat di file xml Anda berikan bahwa raster sekarang hanya memiliki satu band
Seharusnya ada tag:
Jadi masalahnya ada di
gdalogr:warpreproject
. Saya menggunakan kode yang sama yang Anda berikan dalam raster yang saya miliki tetapi hasilnya RGB, saya tidak tahu apa yang terjadi, mungkin Anda harus memberikan sampel file raster Anda.CATATAN
Xml tidak memiliki data gaya, seperti yang saya katakan raster yang pertama kali Anda simpan bukan lapisan gaya, tetapi gambar RGB aktual yang mewakili raster gaya.
sumber