- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
带坐标的矢量图层作为GIS 的核心数据,具有非常丰富的用途。人们往往喜欢在地图上
做各种标记,不仅美观,而且使地图清晰,一目了然。于是应运而生了使用各种各样的图标
作为地图标记的功能需求,在很多GIS 软件上,这早已不是什么新鲜事了。下面就QGIS2.18
来讲述矢量图层的渲染。
一、矢量图层渲染涉及到的几个类及相关关系
QgsVectorLayer
QgsSymbolV2
QgsSymbolLayerV2
QgsFeatureRendererV2
QgsFeatureRendererV2 控制着QgsVectorLayer 的 “渲染”样式,而具体用什么样式来
“渲染”,则是有 QgsSymbolV2 来定义的,QgsSymbolLayerV2 是 QgsSymbolV2 的扩展。
搞明白这几个类的关系有助于我们后面的理解。实际上,我们基本不会直接用到这几个类,
大多数时候是在用它们的子类。
(1)QgsVectorLayer 不必多说,只需要知道使用它的方法“setRendererV2()”来绑定它
的 Renderer 就好了。
(2)QgsFeatureRendererV2
来看看矢量图层都支持那些 Renderer,也就是 QgsFeatureRendererV2 这个类的派生关
系,如下图
从图上可以看到,这里支持的渲染方式还是蛮多的,GIS 的同学看到这些名字应该不会
太陌生,就是我们设置图层属性面板时候的那个下拉菜单里面的内容,见下图。
这里内容太多,就不逐个介绍了,本篇文章中我们只关注一个最简单也是最常用的
QgsSingleSymbolRendererV2 ,也就是我们经常使用在点图层标记上的单个的样式。
(3)QgsSymbolV2
这个类就是直接关系到图层显示的“造型”了,也就是在这里设置各种图层样式的属性。
还是先来看看它的派生类关系。
简单说明一下,QgsFillSymbolV2 对应的是多边形矢量图层,QgsLineSymbolV2 对应的
是线性矢量图层, 而 QgsMarkerSymbolV2 自然就是对应点矢量图层了。
关于这些类的设置大多集中在 “颜色”、“大小”、“透明度”等属性上,每个派生类
也都有自己的一些属性,详细的情况还是建议大家看看 API 文档 。
(4)QgsSymbolLayerV2
QGis 扩展了简单的 Symbol 图层样式,将原来单一的 Symbol 变成了 “图层”方式,
使得样式可定制的自由度开阔了许多, 当然派生关系也多了很多,见下图。
从这个图里面可以看到,分别对应这多边形、线和点都有各自的样式图层,将一个矢量
图形的图标拆分,基本每个地方都有可定制的余地,都有专门的样式图层类来控制。这里很
多同学应该特别关注一下 QgsSvgMarkerSymbolLayerV2 这个类,这个类允许我们使用自己
做好的 “svg”格式的图标来作为图层的显示样式,借助这个特性,我们能够将t 做成图层
显示成任何我们想要的样式,如下图效果。
二、编码实现渲染
下面我将会通过一个非常简单的示例来阐述这些类的调用机理。要做图层样式显示,自
然需要一个矢量图层,于是
QString myLayerPath = D:/Data/qgis_sample_data/shapefiles/airports.shp;
// 修改为自己的文件路径
QString myLayerBaseName = airports; //图层名称;
QgsVectorLayer* vecLayer = new QgsVectorLayer( myLayerPath, myLayerBaseName, ogr,
false );
这里我们以“点”图层作为例子,直接copy 代码的同学,需要将你的文件路径改为一
个有效的“点”图层文件路径。然后,创建一个样式图层,也就是 QgsSymbolLayerV2 类型,
但我们要使用 “svg” 格式的图片作为显示样式,因此使用 QgsSymbolLayerV2 的派生类
QgsSvgMarkerSymbolLayerV2 。先不要太在意下面代码中构造函数里面的字符串,后面来讲
它的作用。
// 创建 svgMarkerSymbolLayer
QgsSvgMarkerSymbolLayerV2
文档评论(0)