QGIS python开发手册–使用栅格图层.docx
4页QGIS python 开发手册–使用栅格图层August 12, 2015barry.z使用栅格图层图层详细信息栅格图层一般包含一个或多个波段,即单波段栅格图层或多波段栅格图层一般来说彩色图形包含红、蓝、绿三个波段单波段图层一般用来表示连续变量(如高程)或离散变量(如土地利用)在有些情况下,栅格图层包含一个调色板,栅格值对应的颜色会存储在调色板中,下面代码获取栅格图层的基本信息,例如长度、宽度、范围波段数、元数据等等rlayer.width(), rlayer.height()(812, 301)rlayer.extent()rlayer.extent().toString()u'12.095833,48.552777 : 18.863888,51.056944'rlayer.rasterType()2 # 0 = GrayOrUndefined (single band), 1 = Palette (single band), 2 = Multibandrlayer.bandCount()3rlayer.metadata()u'...'rlayer.hasPyramids() False渲染器当栅格图层加载后,QGIS 会根据栅格类型使用一个默认的渲染器。
渲染器可以在图层的属性中修改,也可以使用程序修改.下面代码查询当前使用的渲染器:rlayer.renderer()qgis._core.QgsSingleBandPseudoColorRenderer object at 0x7f471c1da8a0rlayer.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)) ]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}。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


