QGIS python开发手册--使用栅格图层

本文介绍如何在QGIS中管理和操作栅格图层,包括获取基本信息、设置不同的渲染器、刷新图层以及查询特定位置的栅格值等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

使用栅格图层

图层详细信息

栅格图层一般包含一个或多个波段,即单波段栅格图层或多波段栅格图层。一般来说彩色图形包含红、蓝、绿三个波段。单波段图层一般用来表示连续变量(如高程)或离散变量(如土地利用)。在有些情况下,栅格图层包含一个调色板,栅格值对应的颜色会存储在调色板中,下面代码获取栅格图层的基本信息,例如长度、宽度、范围波段数、元数据等等。
    rlayer.width(), rlayer.height()
    (812, 301)
    rlayer.extent()
    <qgis._core.QgsRectangle object at 0x000000000F8A2048>
    rlayer.extent().toString()
    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

渲染器

当栅格图层加载后,QGIS会根据栅格类型使用一个默认的渲染器。渲染器可以在图层的属性中修改,也可以使用程序修改.下面代码查询当前使用的渲染器:
    >>> rlayer.renderer()
    <qgis._core.QgsSingleBandPseudoColorRenderer object at 0x7f471c1da8a0>
    >>> rlayer.renderer().type()
    u'singlebandpseudocolor'
使用QgsRasterLayer对象的setRenderer()方法可以给图层设置渲染器,可选的渲染器包括: * QgsMultiBandColorRenderer * QgsPalettedRasterRenderer * QgsSingleBandColorDataRenderer * QgsSingleBandGrayRenderer * QgsSingleBandPseudoColorRenderer 这些渲染器全部继承于QgsRasterRenderer。 单波段栅格图层既可以以灰度图的方式显示,也可以通过色带映射的方式以彩色方式显示。多波段栅格图层,一般把波段映射成RGB颜色值进行显示。当然多波段栅格图层也可以使用灰度或者色带的方式显示其中的一个波段。 下面的小节会展开介绍如何查询和修改栅格图层的显示风格。
单波段栅格图层
下面的例子使用一个从绿色到黄色的色带(对应栅格值0-255)来渲染单波段栅格图层,首先创建一个QgsRasterShader对象,并配置他的shader函数:
>> fcn = QgsColorRampShader()
>>> fcn.setColorRampType(QgsColorRampShader.INTERPOLATED)
>> lst = [ QgsColorRampShader.ColorRampItem(0, QColor(0,255,0)), \
QgsColorRampShader.ColorRampItem(255, QColor(255,255,0)) ]
>>> fcn.setColorRampItemList(lst)
>>> shader = QgsRasterShader()
>>> shader.setRasterShaderFunction(fcn)
shader函数完成像素值和颜色值的映射,映射方式有三种: * 线性:使用线性插值的方式获得像素的颜色值 * 离散:像素值大于或等于某一个阈值对应的颜色值,类似与ArcGIS中的分类渲染 * 精确:不进行插值,只有设置的色带中有对应的值才显示,类似于ArcGIS中的唯一值渲染 第二步,给栅格图层设置渲染器:
>>> renderer = QgsSingleBandPseudoColorRenderer(layer.dataProvider(), 1, shader)
>>> layer.setRenderer(renderer)
代码中的数字1为波段号。
多波段栅格图层
默认情况下,QGIS的多波段栅格图层使用RGB模式来生成彩色图像,有些情况下,如果用户想重置这个设置,可以使用下面的代码,代码重设了波段对应RGB的顺序,把波段1设为G,把波段2设为R:
rlayer.renderer().setGreenBand(1)
rlayer.renderer().setRedBand(2)

刷新图层

当用户修改了图层的符号设置并且需要立即显示的话,需要立即刷新图层,代码如下:
if hasattr(layer, "setCacheImage"):
      layer.setCacheImage(None)
layer.triggerRepaint()
前两行代码确保图层的缓存图片被删除。该方法在QGIS1.4以后有效,为了兼容QGIS的所有版本,请在使用前检查该函数是否存在。 triggerRepaint()方法用来强制地图刷新。 需要注意的是,对于WMS服务,只使用这个方法无效,还需要重新加载数据,刷新才会起作用,代码如下:
layer.dataProvider().reloadData()
layer.triggerRepaint()
在有些情况下,用户修改完图层的符号设置后,需要更新Layer List显示的图例,通过下面代码可以实现:
iface.legendInterface().refreshLayerSymbology(layer)

查询值

查询栅格图层中特定位置的值,使用identify()方法即可,代码如下:
ident = rlayer.dataProvider().identify(QgsPoint(15.30, 40.98), \
  QgsRaster.IdentifyFormatValue)
if ident.isValid():
  print ident.results()
result方法的返回结果是一个字段对象,包含每个波段对应的值:
{1: 17, 2: 220}
 

查看原文:http://www.giser.net/?p=1500
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值