QGIS使用栅格图层
使用栅格图层
图层详细信息
栅格图层一般包含一个或多个波段,即单波段栅格图层或多波段栅格图层。一般来说彩色图形包含红、蓝、绿三个波段。单波段图层一般用来表示连续变量(如高程)或离散变量(如土地利用)。在有些情况下,栅格图层包含一个调色板,栅格值对应的颜色会存储在调色板中,下面代码获取栅格图层的基本信息,例如长度、宽度、范围波段数、元数据等等。
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}
QGIS使用栅格图层相关推荐
- 如何在Author中加载SDE栅格图层?
如何在Author中加载SDE栅格图层? 版本: ArcIMS 9.1 在Author中加载SDE栅格图层,并保存AXL文件. 过程描述 1.使用ArcIMS Author工具正常的连接ArcSDE ...
- JAVA发布栅格图层_基于 WebGL实现自定义栅格图层踩坑实录
以下内容转载自totoro的文章<WebGL-Y轴翻转踩坑实录> 作者:totoro 链接:blog.totoroxiao.com/webgl-flipY- 来源:blog.totorox ...
- arcgis栅格计算器:将栅格图层指定值设置为Nodata及栅格图层求交
1. 首先需要找到栅格计算器的位置 2. 将栅格图层的某个数据设置为Nodata setnull函数可将特定的栅格值赋值为空值 SetNull("这里是栅格图像名称"==0 &am ...
- Arcgis Engine 实现单波段栅格图层色带渲染(包括色带反转)
最近有同事问我ArcMap中的色带反转怎么实现,刚好我在整理以前的项目,找到了一些源码备忘. 先说下思路,简单来说就是得到栅格图层的IRasterRenderer,转换为IRasterStretchC ...
- H5手绘地图(自定义栅格图层)踩坑
手绘地图简介 手绘地图顾名思义就是手工绘制的地图,比普通的地图更有观赏性和生动性,通过把特定的地点绘制出来,兼具实用和纪念性,同时更加具有可看性.一般在旅游景点有很多这种纸质版手绘地图.比如这种: 前 ...
- ArcGIS基础实验操作100例--实验49按分区划分栅格图层
本实验专栏参考自汤国安教授<地理信息系统基础实验操作100例>一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验49 按分区划分栅格图层 目录 一 ...
- arcgis for js叠加栅格图层(Raster Layer)
其实呢,这个问题或许与栅格图层(Raster Layer)关系并不十分大,也可能所有类型的图层都有这个问题,我对arcgis尚不十分了解,目前只在栅格图层遇到问题,所以先记下来,存疑. 栅格图层啥问题 ...
- Arcgis api for JavaScript 4.X 学习——图层加载(要素图层、栅格图层、切片图层)
1. 一定要掌握对应需求在官网中查询信息的能力,比如说要加载图层那么就需要对应到api reference下的layers下对应查找API Referencehttps://developers.ar ...
- ArcGIS多时序栅格图层空间范围不一致
背景 使用IDRISI进行分析模拟时,要保证输入栅格数据的坐标系统.像元大小.空间范围完全一致 方法 首先确定坐标系以及像元大小一致(网上有教程,不做赘述): 利用栅格计算器得到单一像元值的各栅格图层 ...
- 【记录8】Geoserver发布ArcGIS图层,使用QGIS上传图层样式
文章目录 前言 一.准备数据 二.使用Geoserver发服务 1.新建工作空间 2.新建存储仓库 3.发布图层 4.图层预览 三.使用ArcGIS和QGIS导出样式文件 1.导出为lyr格式 2.下 ...
最新文章
- 有一些事情你不必要尝试
- 基于openfire+smack的Android、消息推送服务
- 如何让你用 Python 年薪 40 万?答案早就写到 JD 上了
- 数据库3(DBUtils)
- 如何转载-CSDN博客
- 【RippleNet】(一)preprocessor.py【未完】
- 阿里AI界的新伙伴,1秒钟自动生成20000条文案
- CentOS7.1下targetcli的使用
- RHEL6.2上使用 libvirt创建和管理KVM虚拟机
- jquery ajax 删除确认,jquery 漂亮的删除确认和提交无刷新删除示例
- 用Proxy进行预处理
- 使用键盘操作将桌面计算机图标隐藏,windows7系统中怎么隐藏桌面图标提高工作效率保持桌面整洁...
- web逻辑思维题目_有关于最难的逻辑思维题目及答案
- 测屏幕坏点 android,手机屏幕坏点检测方法有哪些【详细介绍】
- ensp 华为路由器配置远程登陆(telnet,ssh)
- 转载 一堂价值39万元的课,把她看完,你一定会有所获!
- 凸包Graham算法
- android-sdk下载安装
- 运算符与基本数据类型int和string的方法汇总(二)
- springboot2初期笔记存档