Mer

QGIS 2.4.0 Innstilling av rasterlag til singlebandpseudocolor med minimum og maksimum rasterverdier

QGIS 2.4.0 Innstilling av rasterlag til singlebandpseudocolor med minimum og maksimum rasterverdier


Jeg bruker QGIS Chugiak 2.4.0, og jeg har noen kode som jeg vil:

  1. Legg til rasterlag på kartduken
  2. Se etter minimum og maksimal rasterverdi
  3. Bruk enkeltbånds pseudokolor -gjengivelsestype for de minste maksverdiene
  4. Bruk et fint fargekart (f.eks. RdYlBl)
  5. Oppdater kartduken/legenden med disse innstillingene

Jeg fant noen kode i PyGis kokebok som vist nedenfor:

layer = QgsRasterLayer (fil, brukernavn) rastermin =? rastermax =? layer.setDrawingStyle ("SingleBandPseudoColor") layer.setColorShadingAlgorithm (QgsRasterLayer.ColorRampShader) lst = [QgsColorRampShader.ColorRampItem (rastermin, QColor (0,255,0)), QShCol.RomColorRayRampor.ColorRampor.ColorRampor.ColorRampor.CorRamporRamporRamporRampor. .rasterShader (). rasterShaderFunction () fcn.setColorRampType (QgsColorRampShader.INTERPOLATED) fcn.setColorRampItemList (lst)

Først og fremst vet jeg ikke hvordan jeg skal hente minimums- og maksimumsverdiene for rasterlaget. For det andre virker det somsetColorShadingAlgorithmfungerer ikke i QGIS Chugiak 2.4.0. For det tredje, i stedet for å brukeQColor (0,255,0)Jeg vil gjerne bruke en av de fine eksisterende fargekartene i QGIS, f.eks. RdYlBl.

Er det noen som har peiling på hvordan jeg løser dette?

Med vennlig hilsen, Wilco


Jeg er ny på PyQGIS og lette faktisk etter en løsning på det samme spørsmålet: hvorfor er det?setColorShadingAlgorithmjobber ikke. Imidlertid har jeg et svar på det første spørsmålet ditt, hvordan du beregner min- og maksverdiene til et rasterlag. Det er sikkert en enklere og renere måte å gjøre det på, men jeg har gjort det ved hjelp avgdalbibliotek:

fra osgeo import gdal raster = "raster.tif" # load raster gdalData = gdal.Open (raster) # get number of bands bands = gdalData.RasterCount # process raster for i in xrange (1, bands + 1): band = gdalData.GetRasterBand (i) # hente maks og min min = band.GetMinimum () max = band.GetMaximum () hvis min er Ingen eller maks er Ingen: (min, maks) = band.ComputeRasterMinMax (1) print 'Min = %.3f, maks = %. 3f ' %(min, maks)

Andre halvdel av spørsmålet ditt besvares i xunilks svar på dette GIS StackExchange -innlegget.

Jeg har kombinert de to i følgende Python -skript, som finner min og maks for rasteren og bruker den resulterende fargerampen:

fra PyQt4.QtGui import * fra PyQt4.QtCore import * fra qgis.core import * fra osgeo import gdal # bruk PyQT QFileInfo for å få grunnnavnet til rasterfilen rPath = '/path/to/raster.tif' fileInfo = QFileInfo (rPath) rLabel = fileInfo.baseName () # bruk filnavnet som etiketten for raster rLayer = QgsRasterLayer (rPath, rLabel) # legg til laget på kartet QgsMapLayerRegistry.instance (). addMapLayer (rLayer) # load raster gdalData = gdal.Open (rPath) # get number of bands bands = gdalData.RasterCount # behandle rasteren for i i xrange (1, band + 1): band = gdalData.GetRasterBand (i) # hente maks og min min = band.GetMinimum () max = band.GetMaximum () hvis min er None eller max er None: (min, max) = band.ComputeRasterMinMax (1) range = max-min add = range // 2 int = min + add colDic = {' red ':'#ff0000 ',' yellow ':'#ffff00 ',' blue ':'#0000ff '} valueList = [min, int, max] lst = [QgsColorRampShader.ColorRampItem (valueList [0], QColor (colDic) ['blå'])),  QgsColorRampShader.ColorRampItem (valueList [1], QColor (col Dic ['gul'])),  QgsColorRampShader.ColorRampItem (valueList [2], QColor (colDic ['red']))] myRasterShader = QgsRasterShader () myColorRamp = QgsColorRampShader () myColorRamp.setColorRamporType QgsColorRampShader.INTERPOLATED) myRasterShader.setRasterShaderFunction (myColorRamp) myPseudoRenderer = QgsSingleBandPseudoColorRenderer ( rLayer.dataProvider (), rLayer.type ()) render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.Render.RenderRayerRenderRayerRenderRayer () .refreshLayerSymbology (rLayer)

Se videoen: QGIS Tutorial Part 1a - Las Palamas