本文整理汇总了Python中qgis.core.QgsRasterShader.setRasterShaderFunction方法的典型用法代码示例。如果您正苦于以下问题:Python QgsRasterShader.setRasterShaderFunction方法的具体用法?Python QgsRasterShader.setRasterShaderFunction怎么用?Python QgsRasterShader.setRasterShaderFunction使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsRasterShader
的用法示例。
在下文中一共展示了QgsRasterShader.setRasterShaderFunction方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: createRasterShader
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def createRasterShader(fields, mode = "rgb", scale = "float"):
shader = QgsRasterShader()
colRamp = QgsColorRampShader()
colRamp.setColorRampType(QgsColorRampShader.INTERPOLATED)
ramp = []
col = QColor()
for line in fields:
val = float(line[0])
txt = unicode(line[1])
if mode == "rgb" or mode == "rnd":
if scale != "float":
color = [float(x)/255.0 for x in line[2:6]]
col.setRgbF(*color)
elif mode == "hsv":
if scale != "float":
color = [float(x)/float(y) for x,y in zip(line[2:6], [360, 100, 100, 255])]
col.setHsvF(*color)
elif mode == "hex":
col.setNamedColor(str(line[2]))
ramp.append(QgsColorRampShader.ColorRampItem(val, col, txt))
colRamp.setColorRampItemList(ramp)
shader.setRasterShaderFunction(colRamp)
return(shader)
示例2: mmi_ramp
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def mmi_ramp(raster_layer):
"""Generate an mmi ramp using standardised range of 1-12
A standarised range is used so that two shakemaps of different
intensities can be properly compared visually with colours stretched
accross the same range.
The colours used are the 'standard' colours commonly shown for the
mercalli scale e.g. on wikipedia and other sources.
:param raster_layer: A raster layer that will have an mmi style applied.
:type raster_layer: QgsRasterLayer
"""
items = []
for class_max in range(1, 13):
colour = QtGui.QColor(mmi_colour(class_max))
label = '%i' % class_max
ramp_item = QgsColorRampShader.ColorRampItem(class_max, colour, label)
items.append(ramp_item)
raster_shader = QgsRasterShader()
ramp_shader = QgsColorRampShader()
ramp_shader.setColorRampType(QgsColorRampShader.INTERPOLATED)
ramp_shader.setColorRampItemList(items)
raster_shader.setRasterShaderFunction(ramp_shader)
band = 1
renderer = QgsSingleBandPseudoColorRenderer(
raster_layer.dataProvider(),
band,
raster_shader)
raster_layer.setRenderer(renderer)
示例3: testSingleBandPseudoColorRenderer_Exact
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def testSingleBandPseudoColorRenderer_Exact(self):
# get min and max of the band to renderer
bandNo = 3
stats = self.raster_layer.dataProvider().bandStatistics(bandNo, QgsRasterBandStats.Min | QgsRasterBandStats.Max)
minValue = stats.minimumValue
maxValue = stats.maximumValue
# create shader for the renderer
shader = QgsRasterShader(minValue, maxValue)
colorRampShaderFcn = QgsColorRampShader(minValue, maxValue)
colorRampShaderFcn.setColorRampType(QgsColorRampShader.Exact)
colorRampShaderFcn.setClassificationMode(QgsColorRampShader.Continuous)
colorRampShaderFcn.setClip(True)
items = []
for index in range(10):
items.append(QgsColorRampShader.ColorRampItem(index, QColor('#{0:02d}{0:02d}{0:02d}'.format(index)), "{}".format(index)))
colorRampShaderFcn.setColorRampItemList(items)
shader.setRasterShaderFunction(colorRampShaderFcn)
# create instance to test
rasterRenderer = QgsSingleBandPseudoColorRenderer(self.raster_layer.dataProvider(), bandNo, shader)
self.raster_layer.setRenderer(rasterRenderer)
# do test
dom, root = self.rendererToSld(self.raster_layer.renderer())
self.assertNoOpacity(root)
self.assertChannelBand(root, 'sld:GrayChannel', '{}'.format(bandNo))
# check ColorMapEntry classes
colorMap = root.elementsByTagName('sld:ColorMap')
colorMap = colorMap.item(0).toElement()
self.assertFalse(colorMap.isNull())
self.assertEqual(colorMap.attribute('type'), 'values')
self.assertFalse(colorMap.hasAttribute('extendend'))
colorMapEntries = colorMap.elementsByTagName('sld:ColorMapEntry')
self.assertEqual(colorMapEntries.count(), 10)
for index in range(colorMapEntries.count()):
colorMapEntry = colorMapEntries.at(index).toElement()
self.assertEqual(colorMapEntry.attribute('quantity'), '{}'.format(index))
self.assertEqual(colorMapEntry.attribute('label'), '{}'.format(index))
self.assertEqual(colorMapEntry.attribute('opacity'), '')
self.assertEqual(colorMapEntry.attribute('color'), '#{0:02d}{0:02d}{0:02d}'.format(index))
# add check that is set ColoMap extended="true" if colormap is bigger that 255 entries
# !NOTE! can't reuse previous shader => segmentation fault
shader = QgsRasterShader(minValue, maxValue)
colorRampShaderFcn = QgsColorRampShader(minValue, maxValue)
colorRampShaderFcn.setColorRampType(QgsColorRampShader.Exact)
colorRampShaderFcn.setClassificationMode(QgsColorRampShader.Continuous)
colorRampShaderFcn.setClip(True)
items = []
for index in range(255):
items.append(QgsColorRampShader.ColorRampItem(index, QColor.fromHsv(index, 255, 255, 255), "{}".format(index)))
colorRampShaderFcn.setColorRampItemList(items)
shader.setRasterShaderFunction(colorRampShaderFcn)
# create instance to test
rasterRenderer = QgsSingleBandPseudoColorRenderer(self.raster_layer.dataProvider(), bandNo, shader)
示例4: aggregate_layers
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def aggregate_layers(self, layers, d):
aggregation = self.frequency.itemData(self.frequency.currentIndex())
month = str(d.month)
month = month if len(month) == 2 else '0' + month
day = str(d.day)
day = day if len(day) == 2 else '0' + day
filtered_layers = filter(lambda x: '.tif' in x, layers)
datasets = []
file_name = None
for l in filtered_layers:
datasets.append(Dataset(l))
sum = datasets[0]
for i in range(1,len(datasets)-1):
sum += datasets[i]
if aggregation == 'SUM':
Env.overwrite = True
avg = sum
file_name = self.download_folder.text() + '/' + str(d.year) + '_' + month + '_' + day + '_SUM.tif'
avg.save(file_name)
elif aggregation == 'AVG':
Env.overwrite = True
avg = sum
avg /= len(datasets)
file_name = self.download_folder.text() + '/' + str(d.year) + '_' + month + '_' + day + '_AVG.tif'
avg.save(file_name)
if self.add_to_canvas.isChecked() is True:
self.bar.pushMessage(None, str(file_name), level=QgsMessageBar.INFO)
title = None
if aggregation == 'SUM':
title = self.tr('TRMM Aggregate (Sum): ') + str(d.year) + '-' + str(month) + '-' + str(day)
elif aggregation == 'AVG':
title = self.tr('TRMM Aggregate (Average): ') + str(d.year) + '-' + str(month) + '-' + str(day)
rl = self.iface.addRasterLayer(file_name, title)
fcn = QgsColorRampShader()
fcn.setColorRampType(QgsColorRampShader.INTERPOLATED)
lst = [
QgsColorRampShader.ColorRampItem(0, QColor(247, 251, 255, 0), '< 2.6 [mm]'),
QgsColorRampShader.ColorRampItem(2.6, QColor(222, 235, 247), '< 5.2 [mm]'),
QgsColorRampShader.ColorRampItem(5.2, QColor(199, 220, 239), '< 7.8 [mm]'),
QgsColorRampShader.ColorRampItem(7.8, QColor(162, 203, 226), '< 10.4 [mm]'),
QgsColorRampShader.ColorRampItem(10.4, QColor(114, 178, 215), '< 13 [mm]'),
QgsColorRampShader.ColorRampItem(13, QColor(73, 151, 201), '< 15.6 [mm]'),
QgsColorRampShader.ColorRampItem(15.6, QColor(40, 120, 184), '< 18 [mm]'),
QgsColorRampShader.ColorRampItem(18, QColor(13, 87, 161), '< 20 [mm]'),
QgsColorRampShader.ColorRampItem(20, QColor(8, 48, 107), '>= 20 [mm]')
]
fcn.setColorRampItemList(lst)
shader = QgsRasterShader()
shader.setRasterShaderFunction(fcn)
renderer = QgsSingleBandPseudoColorRenderer(rl.dataProvider(), 1, shader)
rl.setRenderer(renderer)
rl.triggerRepaint()
示例5: testShaderCrash
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def testShaderCrash(self):
"""Check if we assign a shader and then reassign it no crash occurs."""
myPath = os.path.join(unitTestDataPath('raster'),
'band1_float32_noct_epsg4326.tif')
myFileInfo = QFileInfo(myPath)
myBaseName = myFileInfo.baseName()
myRasterLayer = QgsRasterLayer(myPath, myBaseName)
myMessage = 'Raster not loaded: %s' % myPath
assert myRasterLayer.isValid(), myMessage
myRasterShader = QgsRasterShader()
myColorRampShader = QgsColorRampShader()
myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
myItems = []
myItem = QgsColorRampShader.ColorRampItem(10,
QtGui.QColor('#ffff00'), 'foo')
myItems.append(myItem)
myItem = QgsColorRampShader.ColorRampItem(100,
QtGui.QColor('#ff00ff'), 'bar')
myItems.append(myItem)
myItem = QgsColorRampShader.ColorRampItem(1000,
QtGui.QColor('#00ff00'), 'kazam')
myItems.append(myItem)
myColorRampShader.setColorRampItemList(myItems)
myRasterShader.setRasterShaderFunction(myColorRampShader)
myPseudoRenderer = QgsSingleBandPseudoColorRenderer(
myRasterLayer.dataProvider(), 1, myRasterShader)
myRasterLayer.setRenderer(myPseudoRenderer)
return
######## works first time #############
myRasterShader = QgsRasterShader()
myColorRampShader = QgsColorRampShader()
myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
myItems = []
myItem = QgsColorRampShader.ColorRampItem(10,
QtGui.QColor('#ffff00'), 'foo')
myItems.append(myItem)
myItem = QgsColorRampShader.ColorRampItem(100,
QtGui.QColor('#ff00ff'), 'bar')
myItems.append(myItem)
myItem = QgsColorRampShader.ColorRampItem(1000,
QtGui.QColor('#00ff00'), 'kazam')
myItems.append(myItem)
myColorRampShader.setColorRampItemList(myItems)
myRasterShader.setRasterShaderFunction(myColorRampShader)
######## crash on next line (fixed now)##################
myPseudoRenderer = QgsSingleBandPseudoColorRenderer(
myRasterLayer.dataProvider(), 1, myRasterShader)
myRasterLayer.setRenderer(myPseudoRenderer)
示例6: setRamp
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def setRamp(layer, iface):
renderer = layer.renderer()
provider = layer.dataProvider()
extent = layer.extent()
ver = provider.hasStatistics(1, QgsRasterBandStats.All)
stats = provider.bandStatistics(1, QgsRasterBandStats.All,extent, 0)
if ver is not False:
print "minimumValue = ", stats.minimumValue
print "maximumValue = ", stats.maximumValue
if (stats.minimumValue < 0):
min = 0
else:
min= stats.minimumValue
max = stats.maximumValue
range = max - min
add = range//2
interval = min + add
colDic = {'red':'#ff0000', 'yellow':'#ffff00','blue':'#0000ff'}
valueList =[min, interval, max]
lst = [ QgsColorRampShader.ColorRampItem(valueList[0], QColor(colDic['red'])),
QgsColorRampShader.ColorRampItem(valueList[1], QColor(colDic['yellow'])),
QgsColorRampShader.ColorRampItem(valueList[2], QColor(colDic['blue']))]
myRasterShader = QgsRasterShader()
myColorRamp = QgsColorRampShader()
myColorRamp.setColorRampItemList(lst)
myColorRamp.setColorRampType(QgsColorRampShader.INTERPOLATED)
myRasterShader.setRasterShaderFunction(myColorRamp)
myPseudoRenderer = QgsSingleBandPseudoColorRenderer(layer.dataProvider(),
layer.type(),
myRasterShader)
layer.setRenderer(myPseudoRenderer)
layer.triggerRepaint()
示例7: loadLabelImage
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def loadLabelImage(imagepath, labeldescriptor = None):
"""
Load a labeled single band raster in the canvas
Keyword arguments:
imagepath -- the path to the image
labeldescriptor -- a dictionnary for label (int) to tuple (QColor, QString) conversion
"""
if imagepath is None:
return
name = os.path.splitext( os.path.basename(imagepath) )[0]
qgslayer = QgsRasterLayer(imagepath, name)
if not qgslayer.isValid():
QtGui.QMessageBox.critical(None,
u"Erreur",
u"Impossible de charger la couche %s" % unicode(imagepath))
QgsMapLayerRegistry.instance().addMapLayer(qgslayer)
qgslayer.setDrawingStyle('SingleBandPseudoColor')
colorlist = []
max_label = 0
for label in sorted(labeldescriptor.keys()):
color = labeldescriptor[label][0]
labeltxt = labeldescriptor[label][1]
colorlist.append(QgsColorRampShader.ColorRampItem(label, color, labeltxt))
if labeltxt > max_label:
max_label = labeltxt
s = QgsRasterShader()
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.INTERPOLATED)
c.setColorRampItemList(colorlist)
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(qgslayer.dataProvider(), 1, s)
qgslayer.setRenderer(ps)
for bandNo in range(1,qgslayer.dataProvider().bandCount()+1):
qgslayer.dataProvider().setUseSrcNoDataValue( bandNo, False )
QGisLayers.iface.legendInterface().refreshLayerSymbology(qgslayer)
if hasattr(qgslayer, "setCacheImage"):
qgslayer.setCacheImage(None)
qgslayer.triggerRepaint()
示例8: displaced_people_style
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def displaced_people_style(layer):
"""Simple style to display a displaced count with a binary style.
:param layer: The layer to style.
:type layer: QgsRasterLayer
"""
color_ramp = QgsColorRampShader()
color_ramp.setColorRampType(QgsColorRampShader.INTERPOLATED)
color_ramp.setColorRampItemList(legend_raster_displaced)
shader = QgsRasterShader()
shader.setRasterShaderFunction(color_ramp)
renderer = QgsSingleBandPseudoColorRenderer(
layer.dataProvider(), 1, shader)
layer.setRenderer(renderer)
示例9: mmi_ramp_roman
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def mmi_ramp_roman(raster_layer):
"""Generate an mmi ramp using range of 1-10 on roman.
A standarised range is used so that two shakemaps of different
intensities can be properly compared visually with colours stretched
accross the same range.
The colours used are the 'standard' colours commonly shown for the
mercalli scale e.g. on wikipedia and other sources.
:param raster_layer: A raster layer that will have an mmi style applied.
:type raster_layer: QgsRasterLayer
.. versionadded:: 4.0
"""
items = []
sorted_mmi_scale = sorted(
earthquake_mmi_scale['classes'], key=itemgetter('value'))
for class_max in sorted_mmi_scale:
colour = class_max['color']
label = '%s' % class_max['key']
ramp_item = QgsColorRampShader.ColorRampItem(
class_max['value'], colour, label)
items.append(ramp_item)
raster_shader = QgsRasterShader()
ramp_shader = QgsColorRampShader()
ramp_shader.setColorRampType(QgsColorRampShader.INTERPOLATED)
ramp_shader.setColorRampItemList(items)
raster_shader.setRasterShaderFunction(ramp_shader)
band = 1
renderer = QgsSingleBandPseudoColorRenderer(
raster_layer.dataProvider(),
band,
raster_shader)
raster_layer.setRenderer(renderer)
示例10: set_raster_style
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def set_raster_style(raster_layer, style):
"""Set QGIS raster style based on InaSAFE style dictionary for QGIS >= 2.0.
This function will set both the colour map and the transparency
for the passed in layer.
:param raster_layer: A QGIS raster layer that will be styled.
:type raster_layer: QgsVectorLayer
:param style: List of the form as in the example below.
:type style: list
Example::
style_classes = [dict(colour='#38A800', quantity=2, transparency=0),
dict(colour='#38A800', quantity=5, transparency=50),
dict(colour='#79C900', quantity=10, transparency=50),
dict(colour='#CEED00', quantity=20, transparency=50),
dict(colour='#FFCC00', quantity=50, transparency=34),
dict(colour='#FF6600', quantity=100, transparency=77),
dict(colour='#FF0000', quantity=200, transparency=24),
dict(colour='#7A0000', quantity=300, transparency=22)]
:returns: A two tuple containing a range list and a transparency list.
:rtype: (list, list)
"""
# Note imports here to prevent importing on unsupported QGIS versions
# pylint: disable=E0611
# pylint: disable=W0621
# pylint: disable=W0404
# noinspection PyUnresolvedReferences
from qgis.core import (QgsRasterShader,
QgsColorRampShader,
QgsSingleBandPseudoColorRenderer,
QgsRasterTransparency)
# pylint: enable=E0611
# pylint: enable=W0621
# pylint: enable=W0404
ramp_item_list = []
transparency_list = []
LOGGER.debug(style)
for style_class in style:
LOGGER.debug('Evaluating class:\n%s\n' % style_class)
if 'quantity' not in style_class:
LOGGER.exception('Class has no quantity attribute')
continue
class_max = style_class['max']
if math.isnan(class_max):
LOGGER.debug('Skipping class - max is nan.')
continue
class_min = style_class['min']
if math.isnan(class_min):
LOGGER.debug('Skipping class - min is nan.')
continue
colour = QtGui.QColor(style_class['colour'])
label = ''
if 'label' in style_class:
label = style_class['label']
# noinspection PyCallingNonCallable
ramp_item = QgsColorRampShader.ColorRampItem(class_max, colour, label)
ramp_item_list.append(ramp_item)
# Create opacity entries for this range
transparency_percent = 0
if 'transparency' in style_class:
transparency_percent = int(style_class['transparency'])
if transparency_percent > 0:
# Check if range extrema are integers so we know if we can
# use them to calculate a value range
# noinspection PyCallingNonCallable
pixel = QgsRasterTransparency.TransparentSingleValuePixel()
pixel.min = class_min
# We want it just a little bit smaller than max
# so that ranges are discrete
pixel.max = class_max
# noinspection PyPep8Naming
pixel.percentTransparent = transparency_percent
transparency_list.append(pixel)
band = 1 # gdal counts bands from base 1
LOGGER.debug('Setting colour ramp list')
raster_shader = QgsRasterShader()
color_ramp_shader = QgsColorRampShader()
color_ramp_shader.setColorRampType(QgsColorRampShader.INTERPOLATED)
color_ramp_shader.setColorRampItemList(ramp_item_list)
LOGGER.debug('Setting shader function')
raster_shader.setRasterShaderFunction(color_ramp_shader)
LOGGER.debug('Setting up renderer')
renderer = QgsSingleBandPseudoColorRenderer(
raster_layer.dataProvider(),
band,
raster_shader)
LOGGER.debug('Assigning renderer to raster layer')
#.........这里部分代码省略.........
示例11: _setNewRasterStyle
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def _setNewRasterStyle(theQgsRasterLayer, theStyle):
"""Set QGIS raster style based on InaSAFE style dictionary for QGIS >= 2.0.
This function will set both the colour map and the transparency
for the passed in layer.
Args:
* theQgsRasterLayer: QgsRasterLayer
* style: Dictionary of the form as in the example below.
Returns:
* list: RangeList
* list: TransparencyList
Example:
style_classes = [dict(colour='#38A800', quantity=2, transparency=0),
dict(colour='#38A800', quantity=5, transparency=50),
dict(colour='#79C900', quantity=10, transparency=50),
dict(colour='#CEED00', quantity=20, transparency=50),
dict(colour='#FFCC00', quantity=50, transparency=34),
dict(colour='#FF6600', quantity=100, transparency=77),
dict(colour='#FF0000', quantity=200, transparency=24),
dict(colour='#7A0000', quantity=300, transparency=22)]
"""
# Note imports here to prevent importing on unsupported QGIS versions
# pylint: disable=E0611
# pylint: disable=W0621
# pylint: disable=W0404
from qgis.core import (QgsRasterShader,
QgsColorRampShader,
QgsSingleBandPseudoColorRenderer,
QgsRasterTransparency)
# pylint: enable=E0611
# pylint: enable=W0621
# pylint: enable=W0404
myClasses = theStyle['style_classes']
myRampItemList = []
myTransparencyList = []
myLastValue = 0
for myClass in myClasses:
LOGGER.debug('Evaluating class:\n%s\n' % myClass)
myMax = myClass['quantity']
if math.isnan(myMax):
LOGGER.debug('Skipping class.')
continue
myColour = QtGui.QColor(myClass['colour'])
myLabel = QtCore.QString()
if 'label' in myClass:
myLabel = QtCore.QString(myClass['label'])
myRampItem = QgsColorRampShader.ColorRampItem(myMax, myColour, myLabel)
myRampItemList.append(myRampItem)
# Create opacity entries for this range
myTransparencyPercent = 0
if 'transparency' in myClass:
myTransparencyPercent = int(myClass['transparency'])
if myTransparencyPercent > 0:
# Check if range extrema are integers so we know if we can
# use them to calculate a value range
myPixel = QgsRasterTransparency.TransparentSingleValuePixel()
myPixel.min = myLastValue
myPixel.max = myMax
myPixel.percentTransparent = myTransparencyPercent
myTransparencyList.append(myPixel)
myLastValue = myMax
myBand = 1 # gdal counts bands from base 1
LOGGER.debug('Setting colour ramp list')
myRasterShader = QgsRasterShader()
myColorRampShader = QgsColorRampShader()
myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
myColorRampShader.setColorRampItemList(myRampItemList)
LOGGER.debug('Setting shader function')
myRasterShader.setRasterShaderFunction(myColorRampShader)
LOGGER.debug('Setting up renderer')
myRenderer = QgsSingleBandPseudoColorRenderer(
theQgsRasterLayer.dataProvider(),
myBand,
myRasterShader)
LOGGER.debug('Assigning renderer to raster layer')
theQgsRasterLayer.setRenderer(myRenderer)
LOGGER.debug('Setting raster transparency list')
#if len(myTransparencyList) > 0:
# myRasterTransparency = QgsRasterTransparency()
# myRasterTransparency.setTransparentSingleValuePixelList(
# myTransparencyList)
# myRenderer.setRasterTransparency(myRasterTransparency)
LOGGER.debug('Saving style as default')
theQgsRasterLayer.saveDefaultStyle()
LOGGER.debug('Setting raster style done!')
return myRampItemList, myTransparencyList
示例12: _setNewRasterStyle
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def _setNewRasterStyle(theQgsRasterLayer, theClasses):
"""Set QGIS raster style based on InaSAFE style dictionary for QGIS >= 2.0.
This function will set both the colour map and the transparency
for the passed in layer.
Args:
* theQgsRasterLayer: QgsRasterLayer
* theClasses: List of the form as in the example below.
Returns:
* list: RangeList
* list: TransparencyList
Example:
style_classes = [dict(colour='#38A800', quantity=2, transparency=0),
dict(colour='#38A800', quantity=5, transparency=50),
dict(colour='#79C900', quantity=10, transparency=50),
dict(colour='#CEED00', quantity=20, transparency=50),
dict(colour='#FFCC00', quantity=50, transparency=34),
dict(colour='#FF6600', quantity=100, transparency=77),
dict(colour='#FF0000', quantity=200, transparency=24),
dict(colour='#7A0000', quantity=300, transparency=22)]
"""
# Note imports here to prevent importing on unsupported QGIS versions
# pylint: disable=E0611
# pylint: disable=W0621
# pylint: disable=W0404
from qgis.core import (QgsRasterShader,
QgsColorRampShader,
QgsSingleBandPseudoColorRenderer,
QgsRasterTransparency)
# pylint: enable=E0611
# pylint: enable=W0621
# pylint: enable=W0404
myRampItemList = []
myTransparencyList = []
LOGGER.debug(theClasses)
for myClass in theClasses:
LOGGER.debug('Evaluating class:\n%s\n' % myClass)
if 'quantity' not in myClass:
LOGGER.exception('Class has no quantity attribute')
continue
myMax = myClass['max']
if math.isnan(myMax):
LOGGER.debug('Skipping class - max is nan.')
continue
myMin = myClass['min']
if math.isnan(myMin):
LOGGER.debug('Skipping class - min is nan.')
continue
myColour = QtGui.QColor(myClass['colour'])
myLabel = QtCore.QString()
if 'label' in myClass:
myLabel = QtCore.QString(myClass['label'])
myRampItem = QgsColorRampShader.ColorRampItem(myMax, myColour, myLabel)
myRampItemList.append(myRampItem)
# Create opacity entries for this range
myTransparencyPercent = 0
if 'transparency' in myClass:
myTransparencyPercent = int(myClass['transparency'])
if myTransparencyPercent > 0:
# Check if range extrema are integers so we know if we can
# use them to calculate a value range
myPixel = QgsRasterTransparency.TransparentSingleValuePixel()
myPixel.min = myMin
# We want it just a leeetle bit smaller than max
# so that ranges are discrete
myPixel.max = myMax
myPixel.percentTransparent = myTransparencyPercent
myTransparencyList.append(myPixel)
myBand = 1 # gdal counts bands from base 1
LOGGER.debug('Setting colour ramp list')
myRasterShader = QgsRasterShader()
myColorRampShader = QgsColorRampShader()
myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
myColorRampShader.setColorRampItemList(myRampItemList)
LOGGER.debug('Setting shader function')
myRasterShader.setRasterShaderFunction(myColorRampShader)
LOGGER.debug('Setting up renderer')
myRenderer = QgsSingleBandPseudoColorRenderer(
theQgsRasterLayer.dataProvider(),
myBand,
myRasterShader)
LOGGER.debug('Assigning renderer to raster layer')
theQgsRasterLayer.setRenderer(myRenderer)
LOGGER.debug('Setting raster transparency list')
myRenderer = theQgsRasterLayer.renderer()
myTransparency = QgsRasterTransparency()
#.........这里部分代码省略.........
示例13: RasterSymbolizer
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
class RasterSymbolizer(QgsRasterLayer):
def __init__(self, layer):
self.colDic = {'tan':'#ffebb0', 'green':'#267300', 'brown':'#734d00', 'white':'#ffffff',
'red':'#e60000', 'light gray':'#f0f0f0', 'blue':'#004cab'}
self.shader = QgsRasterShader()
self.ramp = QgsColorRampShader()
self.colLst = []
self.valLst = []
self.labLst = []
self.opacity = 1.0
self.layer = layer
self.provider = layer.dataProvider()
extent = layer.extent()
self.ver = self.provider.hasStatistics(1, QgsRasterBandStats.All)
self.stats = self.provider.bandStatistics(1, QgsRasterBandStats.All, extent, 0)
def render_GCD(self, type):
self.setRendererOptions(type)
self.shader.setRasterShaderFunction(self.ramp)
renderer = QgsSingleBandPseudoColorRenderer(self.layer.dataProvider(), 1, self.shader)
self.layer.setRenderer(renderer)
self.layer.renderer().setOpacity(self.opacity)
self.layer.triggerRepaint()
def setRendererOptions(self, type):
if type == "DEM":
self.setValueBreaks_DEM()
self.setColorRamp_DEM()
elif type == "DoD":
self.setValueBreaks_DoD()
self.setColorRamp_DoD()
elif type == "Slope_deg":
self.setValueBreaks_SlopeDeg()
self.setColorRamp_Slope()
elif type == "Slope_per":
self.setValueBreaks_SlopePer()
self.setColorRamp_Slope()
elif type == "Roughness":
self.setValueBreaks_Roughness()
self.setColorRamp_Roughness()
def setValueBreaks_DEM(self):
lo = self.stats.minimumValue
hi = self.stats.maximumValue
rng = hi - lo
interval = rng/3.0
self.valLst = [lo, lo+interval, hi-interval, hi]
def setValueBreaks_DoD(self):
nClasses = 20
lo = self.stats.minimumValue
hi = self.stats.maximumValue
mid = 0.0
if abs(lo) > abs(hi):
hi = abs(lo)
else:
lo = hi*-1.0
rng = hi*2.0
interval = rng/(nClasses*1.0)
nRound = self.magnitude(rng)
if nRound < 0:
nRound = abs(nRound) + 2
else:
nRound = 2
self.valLst.append(lo)
for i in range(1,nClasses+1,1):
self.valLst.append(lo + i*interval)
self.labLst.append(str(round(self.valLst[i-1], nRound))+" to "+str(round(self.valLst[i], nRound)))
def setValueBreaks_SlopeDeg(self):
self.valLst.append(self.stats.minimumValue)
self.valLst.append(2.0)
self.valLst.append(5.0)
self.valLst.append(10.0)
self.valLst.append(15.0)
self.valLst.append(25.0)
self.valLst.append(35.0)
self.valLst.append(45.0)
self.valLst.append(60.0)
self.valLst.append(80.0)
#.........这里部分代码省略.........
示例14: create_raster_layer
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
def create_raster_layer(matrix):
driver = gdal.GetDriverByName("GTiff")
filename = tempfile.mktemp(prefix="hmtk", suffix=".tif")
# sort the data by lon, lat
gridded_data = numpy.array(
sorted(matrix, key=lambda row: (90 + row[1]) * 180 + (180 + row[0])))
# extract it into separate vars
lons, lats, vals = (
gridded_data[:, 0], gridded_data[:, 1], gridded_data[:, 3])
ncols = lons[lons == lons[0]].size
nrows = lats[lats == lats[0]].size
# put values in a grid
gridded_vals = vals.reshape((ncols, nrows)).T
dataset = driver.Create(filename, ncols, nrows, 1, gdal.GDT_Float32)
dataset.SetGeoTransform((
min(lons),
(max(lons) - min(lons)) / ncols,
0,
max(lats),
0,
-(max(lats) - min(lats)) / nrows))
out_srs = osr.SpatialReference()
out_srs.ImportFromEPSG(4326)
dataset.SetProjection(out_srs.ExportToWkt())
out_band = dataset.GetRasterBand(1)
out_band.WriteArray(gridded_vals)
out_band.SetNoDataValue(0)
out_band.FlushCache()
out_band = None
dataset = None
fileInfo = QFileInfo(filename)
baseName = fileInfo.baseName()
layer = QgsRasterLayer(filename, baseName)
stat = layer.dataProvider().bandStatistics(1)
minVal = stat.minimumValue
maxVal = stat.maximumValue
entries_nr = 20
colorRamp = QgsStyleV2().defaultStyle().colorRamp("Spectral")
currentValue = float(minVal)
intervalDiff = float(maxVal - minVal) / float(entries_nr - 1)
colorRampItems = []
for i in reversed(xrange(entries_nr)):
item = QgsColorRampShader.ColorRampItem()
item.value = currentValue
item.label = unicode(currentValue)
currentValue += intervalDiff
item.color = colorRamp.color(float(i) / float(entries_nr))
item.color.setAlphaF(0.75)
colorRampItems.append(item)
rasterShader = QgsRasterShader()
colorRampShader = QgsColorRampShader()
colorRampShader.setColorRampItemList(colorRampItems)
colorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
rasterShader.setRasterShaderFunction(colorRampShader)
layer.setDrawingStyle('SingleBandPseudoColor')
layer.renderer().setShader(rasterShader)
QgsMapLayerRegistry.instance().addMapLayer(layer)
return layer
示例15: idw_interpolation
# 需要导入模块: from qgis.core import QgsRasterShader [as 别名]
# 或者: from qgis.core.QgsRasterShader import setRasterShaderFunction [as 别名]
#.........这里部分代码省略.........
if raster_layer:
if raster_layer.isValid():
color_shader = QgsColorRampShader()
color_shader.setColorRampType(QgsColorRampShader.INTERPOLATED)
colors = {
'deep_green': '#1a9641',
'light_green': '#a6d96a',
'pale_yellow': '#ffffc0',
'light_red': '#fdae61',
'red': '#d7191c'
}
provider = raster_layer.dataProvider()
stats = provider.bandStatistics(
1,
QgsRasterBandStats.All,
raster_layer.extent(),
0)
values = {}
if stats:
min = stats.minimumValue
max = stats.maximumValue
stat_range = max - min
add = stat_range / 4
values[0] = min
value = min
for index in range(1, 4):
value += add
values[index] = value
values[4] = max
else:
display_warning_message_box(
parent_dialog,
parent_dialog.tr(
'Error'),
parent_dialog.tr('Error loading isochrone map'
' Problem indexing the isochrones map'))
color_list = [
QgsColorRampShader.ColorRampItem(
values[0],
QColor(colors['deep_green'])),
QgsColorRampShader.ColorRampItem(
values[1],
QColor(colors['light_green'])),
QgsColorRampShader.ColorRampItem(
values[2],
QColor(colors['pale_yellow'])),
QgsColorRampShader.ColorRampItem(
values[3],
QColor(colors['light_red'])),
QgsColorRampShader.ColorRampItem(
values[4],
QColor(colors['red']))
]
color_shader.setColorRampItemList(color_list)
raster_shader = QgsRasterShader()
raster_shader.setRasterShaderFunction(color_shader)
renderer = QgsSingleBandPseudoColorRenderer(
raster_layer.dataProvider(),
1,
raster_shader)
raster_layer.setRenderer(renderer)
else:
if parent_dialog:
display_warning_message_box(
parent_dialog,
parent_dialog.tr(
'Problem'),
parent_dialog.tr('Problem styling the isochrone map'))
else:
display_warning_message_box(
parent_dialog,
'Problem',
'Problem styling the isochrone map')
QgsMapLayerRegistry.instance().addMapLayers([raster_layer])
else:
if parent_dialog:
display_warning_message_box(
parent_dialog,
parent_dialog.tr(
'Error'),
parent_dialog.tr('Error loading isochrone map '
'Could not load interpolated file!'))
else:
display_warning_message_box(
parent_dialog,
'Error',
'Error loading isochrone map '
'Could not load interpolated file!')
return raster_layer