Outdated version of the documentation. Find the latest one here.

Utilizarea straturilor raster

Această secțiune enumeră diverse operațiuni pe care le puteți efectua cu straturile raster.

Detaliile stratului

Un strat raster constă într-una sau mai multe benzi raster - cu referire la rastere cu o singură bandă sau multibandă. O bandă reprezintă o matrice de valori. Imaginea color obișnuită (cum ar fi o fotografie aeriană) este un format raster cu o bandă roșie, una albastră și una verde. Straturile cu bandă unică reprezintă, de obicei, fie variabile continue (de exemplu, elevația) fie variabile discrete (cum ar fi utilizarea terenului). În unele cazuri, un strat raster vine cu o paletă, iar valorile rasterului făcând referire la culori stocate în paletă.

>>> rlayer.width(), rlayer.height()
(812, 301)
>>> rlayer.extent()
u'12.095833,48.552777 : 18.863888,51.056944'
>>> rlayer.rasterType()
2  # 0 = GrayOrUndefined (single band), 1 = Palette (single band), 2 = Multiband
>>> rlayer.bandCount()
3
>>> rlayer.metadata()
u'<p class="glossy">Driver:</p>...'
>>> rlayer.hasPyramids()
False

Stilul desenării

Când un strat raster este încărcat, în funcție de tipul său, va moșteni un stil de desenare implicit. Acesta poate fi modificat, fie prin modificarea manuală a proprietăților rasterului, fie programatic. Există următoarele stiluri de desenare:

Index Constant: QgsRasterLater.X

Comentariu

1 SingleBandGray

Imagine cu o singură bandă, afișată într-o gamă de nuanțe de gri

2 SingleBandPseudoColor

Imagine cu bandă unică, desenată de un algoritm cu pseudoculori

3 PalettedColor “Palette” image drawn using color table
4 PalettedSingleBandGray “Palette” layer drawn in gray scale
5 PalettedSingleBandPseudoColor “Palette” layerdrawn using a pseudocolor algorithm
7 MultiBandSingleBandGray

Strat care conține 2 sau mai multe benzi, din care o singură bandă desenată într-o gamă cu tonuri de gri

8 MultiBandSingleBandPseudoColor

Strat care conține 2 sau mai multe benzi, din care o singură bandă este desenată folosind un algoritm cu pseudoculori

9 MultiBandColor

Strat conținând 2 sau mai multe benzi, mapate în spațiul de culori RGB.

Pentru a interoga stilul de desenare curent:

>>> rlayer.drawingStyle()
9

Straturile cu o singură bandă raster pot fi desenate fie în nuanțe de gri (valori mici = negru, valori ridicate = alb), sau cu un algoritm cu pseudoculori, care atribuie culori valorilor din banda singulară. Rasterele cu o singură bandă pot fi desenate folosindu-se propria paletă. Straturile multibandă sunt, de obicei, desenate prin maparea benzilor la culori RGB. Altă posibilitate este de a utiliza doar o singură bandă pentru desenarea în tonuri de gri sau cu pseudoculori.

Următoarele secțiuni explică modul în care se poate interoga și modifica stilul de desenare al stratului. După efectuarea schimbărilor, ați putea forța actualizarea suprafeței hărții, a se vedea Recitirea straturilor.

TODO: contrast enhancements, transparency (no data), user defined min/max, band statistics

Rastere cu o singură bandă

Sunt redate în nuanțe de gri, în mod implicit. Pentru a se schimba stilul de desenare pentru pseudoculori:

>>> rlayer.setDrawingStyle(QgsRasterLayer.SingleBandPseudoColor)
>>> rlayer.setColorShadingAlgorithm(QgsRasterLayer.PseudoColorShader)

The PseudoColorShader is a basic shader that highlighs low values in blue and high values in red. Another, FreakOutShader uses more fancy colors and according to the documentation, it will frighten your granny and make your dogs howl.

Există, de asemenea, ColorRampShader, care mapează culorile specificate după propria hartă de culori. Dispune de trei moduri de interpolare a valorilor:

  • liniar (INTERPOLAT ): culoarea rezultată fiind interpolată liniar, de la intrările hărții de culori, în sus sau în jos față de valoarea înscrisă în harta de culori

  • discret (DISCRET): culorile folosite fiind cele cu o valoare egală sau mai mare față de cele din harta de culori

  • exact (EXACT): culoarea nu este interpolată, desenându-se doar pixelii cu o valoare egală cu cea introdusă în harta de culori

Pentru a seta o gamă de culori pentru umbrire interpolate, variind de la verde la galben (pentru valori ale pixelilor între 0-255):

>>> rlayer.setColorShadingAlgorithm(QgsRasterLayer.ColorRampShader)
>>> lst = [ QgsColorRampShader.ColorRampItem(0, QColor(0,255,0)), \
    QgsColorRampShader.ColorRampItem(255, QColor(255,255,0)) ]
>>> fcn = rlayer.rasterShader().rasterShaderFunction()
>>> fcn.setColorRampType(QgsColorRampShader.INTERPOLATED)
>>> fcn.setColorRampItemList(lst)

Pentru a reveni la nuanțele de gri implicite, utilizați:

>>> rlayer.setDrawingStyle(QgsRasterLayer.SingleBandGray)

Rastere multibandă

În mod implicit, QGIS mapează primele trei benzi valorilor roșu, verde și albastru, pentru a crea o imagine color (desenată în stilul MultiBandColor. În unele cazuri, ați putea dori să suprascrieți aceste setări. Următorul cod inversează banda roșie (1) cu cea verde (2):

>>> rlayer.setGreenBandName(rlayer.bandName(1))
>>> rlayer.setRedBandName(rlayer.bandName(2))

În cazul în care doar o singură bandă este necesară pentru vizualizarea rasterului, poate fi aleasă desenarea simplă bandă — fie în tonuri de gri fie cu pseudoculori, ca în secțiunea anterioară:

>>> rlayer.setDrawingStyle(QgsRasterLayer.MultiBandSingleBandPseudoColor)
>>> rlayer.setGrayBandName(rlayer.bandName(1))
>>> rlayer.setColorShadingAlgorithm(QgsRasterLayer.PseudoColorShader)
>>> # now set the shader

Recitirea straturilor

Dacă schimbați simbologia stratului și ați dori să vă asigurați că schimbările sunt imediat vizibile pentru utilizator, puteți apela aceste metode:

if hasattr(layer, "setCacheImage"): layer.setCacheImage(None)
layer.triggerRepaint()

Primul apel garantează că imaginea din cache a stratului este ștearsă în cazul în care cache-ul este activat. Această funcționalitate este disponibilă începând de la QGIS 1.4, în versiunile anterioare această funcție neexistând — pentru a fi siguri de cod, că funcționează cu toate versiunile de QGIS, vom verifica în primul rând dacă metoda există.

Al doilea apel emite semnalul care va forța orice suport de hartă, care conține stratul, să emită o reîmprospătare.

With WMS raster layers, these commands do not work. In this case, you have to do it explicitily:

layer.dataProvider().reloadData()
layer.triggerRepaint()

În cazul în care s-a schimbat simbologia stratului (a se vedea secțiunea despre straturile raster și cele vectoriale cu privire la modul cum se face acest lucru), ați putea forța QGIS să actualizeze simbologia din lista straturilor (legendă). Acest lucru poate fi realizat după cum urmează (iface este un exemplu de QgisInterface)

iface.legendInterface().refreshLayerSymbology(layer)

Interogarea valorilor

Pentru a face, la un moment dat, o interogare asupra valorilor din benzile stratului raster:

ident = rlayer.dataProvider().identify(QgsPoint(15.30,40.98), \
  QgsRaster.IdentifyFormatValue)
if ident.isValid():
  print ident.results()

The results method in this case returs a dictionary, with band indices as keys, and band values as values.

{1: 17, 2: 220}