J'ai essayé d'utiliser le code de QGis Save Raster as Rendered Image . i
est une couche 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)
Cela ne fonctionne pas, me donnant plutôt le raster dépourvu de style comme sortie finale. Je ne comprends vraiment pas le problème, car la sortie de writeRaster
(le fichier pipedFile
) est stylée, donc le processus de la réponse liée à ci-dessus fonctionne. C'est juste que lorsque j'essaie d'utiliser l'image de sortie pour parcourir GDAL warpreproject
et translate
, elle revient en quelque sorte au raster sans style.
Qu'est ce que j'ai mal fait?
MISE À JOUR : La sortie de QgsRasterFileWriter
est stylisée. La sortie de warpreproject
n'est pas stylisée, mais .tif
est accompagnée d'un .aux.xml
fichier qui semble contenir des informations de couleur:
<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>
La sortie de translate
n'est pas stylisée et n'a pas de fichier supplémentaire. Cependant, comme il s'agit d'un PNG et non d'un GeoTIFF, c'est peut-être l'explication.
J'ai essayé de regarder l' expand
option de translate
, mais cela me donne des fichiers image qui ne s'affichent pas dans un navigateur Web - je n'ai pas cherché pourquoi.
MISE À JOUR 2 : Non, l'utilisation des expand
résultats dans aucun fichier de sortie du tout. Vous vous demandez d'essayer pct2rgb
.
MISE À JOUR 3 : Je me demande si le verrouillage des fichiers est à l'origine des problèmes. Est-ce que ça pourrait être?
gdalogr:translate
, essayez de remplacerprov_raster
parprov_raster['OUTPUT']
.prov_raster
c'est juste une chaîne avec le chemin d'accès à ce fichier, donc je reçoisTypeError: string indices must be integers
Réponses:
Vous devez comprendre que lorsque vous enregistrez le fichier à partir de QgsRenderer comme dans votre code:
Vous n'enregistrez pas le style raster, au lieu de cela, vous enregistrez le fichier RVB réel qui représente cette visualisation, il n'est donc pas classé ou stylisé, mais c'est comme si vous aviez pris un écran d'impression de l'image rendue.
Donc, gdalwarp et translate ne peuvent pas changer cela, car il est codé en dur dans les bandes de l'image, ce qui doit arriver, c'est qu'elles sont écrêtées par une seule bande ou plus, je dois le vérifier attentivement.
ÉDITER
Je peux voir dans le fichier xml que vous avez fourni que le raster n'a plus qu'une seule bande
Il devrait y avoir les balises:
Le problème est donc là
gdalogr:warpreproject
. J'ai utilisé le même code que vous avez fourni dans un raster que j'ai, mais la sortie est RVB, je ne sais pas ce qui se passe, peut-être devriez-vous donner un échantillon de votre fichier raster.REMARQUE
Le xml n'a pas de données de style, comme je l'ai dit, le raster que vous avez d'abord enregistré n'est pas un calque stylisé, mais une image RVB réelle représentant le raster stylisé.
la source