QGIS自定义符号的原理与实践——以北京市标准地图为例

本文介绍了QGIS自定义符号的原理,以2020年版1:80万北京市标准地图为例,展示了如何制作标记符号和线符号。通过自定义符号,满足地图符号的个性化需求,实现对QGIS系统符号库的扩展。
部署运行你感兴趣的模型镜像

 01 符号概述

符号(Symbol)是地图和GIS的核心概念。QGIS使用渲染器(Renderer)完成图层在地图窗口中的绘制,即所谓的图层渲染。图层渲染之前需要告诉渲染器使用什么符号渲染图层,如果没有显式指定,QGIS会为渲染器提供默认的符号。

根据图层类型不同,QGIS中的符号分为三类:标记(Marker)、线(Line)、填充(Fill),分别适用于点图层、线图层和面图层。点击“工程工具栏”中的“样式管理器”按钮,弹出“样式管理器”对话框,可以查看QGIS预带的标记、线、填充符号库,这些符号库可以统称为系统符号库。

QGIS系统符号库可以胜任基本的制图任务,但难以满足各行业、各专业对地图符号的个性化需要。事实上,任何GIS软件的符号库都不可能直接支持所有领域需要的符号体系,而是通过提供自定义符号能力实现系统符号库的灵活扩展。作为开源GIS软件,QGIS的自定义符号功能灵活且易用,可以根据特定需要快速自定义符号,满足差异化需求。

本文以天地图北京网站(http://beijing.tianditu.gov.cn/)提供的2020年版1:80万北京市全市域标准地图为例,介绍QGIS自定义符号的实现原理,并在此基础上演示制作两个自定义符号的过程。

 02 下载北京市标准地图

2020年版1:80万北京市全市域标准地图下载地址为:http://beijing.tianditu.gov.cn/bzdt/,点击地图说明下方的“下载”按钮即可下载。

下载的压缩文件解压缩后包含两个文件:bj2020_80w_1.jpg和bj2020_80w_1.pdf,打开bj2020_80w_1.pdf,放大页面到右下角的图例位置,可以看出该地图包含10个图层,每个图层都具有各自不同的符号。其中,“区人民政府驻地”、“区界”这两个图层所采用的符号是QGIS系统符号库中所没有的,需要通过自定义符号实现。

 03 符号与符号图层

就像地图是由图层叠加而成的一样,QGIS中的符号由符号图层(Symbol Layer)叠加而成,这意味着以下两点:

(1)符号是分层的,由多个(1…n)符号图层叠加在一起组成。既然是叠加,就有上层和下层之分,上层的符号图层可能会盖住下层的符号图层。

(2)符号是矢量的,可以通过设置不同的尺寸改变符号的大小,但其形状及各部分尺寸的相对比例保持不变。

打开QGIS“样式管理器”,找到并双击“标记”面板中的“topo hospital”标记,弹出“符号选择器”对话框。可以看出,该符号由两个符号图层叠加而成,分别是位于上层的加号符号图层和位于下层的圆形符号图层。

点击“符号选择器”中位于符号图层列表下方的圆形符号图层,可以查看该符号图层的主要属性:

(1)符号图层类型:简单标记

(2)大小:5.2毫米

(3)填充颜色:白色(255, 255, 255)

(4)描边颜色:红色(227,26,28)

(5)描边样式:实线

(6)描边宽度:0.4毫米

(7)连接样式:斜角

(8)旋转角度:0度

(9)偏移量:横坐标偏移0毫米、纵坐标偏移0毫米

(10)锚点:垂直居中、水平居中

点击“符号选择器”中位于符号图层列表上方的加号符号图层,也可以查看该符号图层的主要属性,在此从略。

“符号选择器”右上角以按钮形式提供了针对符号图层的管理功能,包括:

(1)“添加符号图层”:为符号添加新的符号图层。

(2)“移除符号图层”:移除选中的符号图层。

(3)“上移”:将选中的符号图层向上移动一层。

(4)“下移”:将选中的符号图层向下移动一层。

(5)“创建符号图层副本”:将选中的符号图层复制一份,粘贴在所选符号图层的下一层。

(6)“锁定符号图层颜色”:锁定后,当使用符号时,如果修改符号的颜色,该符号图层的颜色不随之发生变化,依然保持在符号库中设定的颜色。

线符号在符号图层组织方面与标记符号并无不同,两者的区别主要在于线和标记表达方式的不同。打开QGIS“样式管理器”,找到并双击“线”面板中的“topo path”,弹出“符号选择器”对话框。

该线符号使用了自定义虚线线型,点击“使用自定义虚线线型”选项下方的虚线按钮,弹出“自定义虚线线型”对话框。可以看出,此线型由3毫米长的短横和2毫米长的空格组成,两者组合达成虚线效果。

至此,我们已经了解了QGIS符号图层的基本概念,可以开始尝试制作自定义符号。

 04 制作标记符号

打开下载的bj2020_80w_1.pdf文件,尽最大可能放大图例区域中的“区人民政府驻地”图例项,通过拷屏的方式将其保存为图片,然后选择合适的图片查看工具打开图片。这里用的是操作系统自带的“截图和草图”工具,提供了标尺工具可以测量图片元素的大小。

可以看出,该符号是由两个大小不一的圆形符号叠加而成,通过标尺测量,可以得到两个圆形符号的主要尺寸参数(不需要特别精确),计量单位为格。

(1)大圆:外直径78、线宽5

(2)小圆:外直径38、线宽5

需要关注的是尺寸参数之间的相对比例而不是绝对值,假定线宽为1,则大圆外直径为15.6(78/5),小圆外直径为7.6(38/5)。

在设计符号图层的时候,这里测量得到的外直径即对应符号的大小,线宽则对应符号的描边宽度。假定将描边宽度设为0.25毫米,则大圆符号的大小为3.9(0.25*15.6)毫米,小圆符号的大小为1.9(0.25*7.6)毫米。

“区人民政府驻地”图例项的颜色为红色,具体RGB值为:(238,28,37)。

在“样式管理器”中切换到“标记”面板,点击下方的“添加项”按钮,弹出“符号选择器”对话框。QGIS会自动生成一个默认的标记符号,该符号包含一个简单标记符号图层。

点击“符号选择器”右上角的“添加符号图层”按钮,QGIS将为该符号添加一个新的简单标记符号图层。

选中位于上方的简单标记符号图层,该符号图层对应小圆,将其属性取值设置如下:

(1)大小:1.9毫米

(2)填充颜色:透明填充

(3)描边颜色:RGB值为:(238,28,37)

(4)描边宽度:0.25毫米

选中位于下方的简单标记符号图层,该符号图层对应大圆,将其属性取值设置如下:

(1)大小:3.9毫米

(2)填充颜色:透明填充

(3)描边颜色:RGB值为:(238,28,37)

(4)描边宽度:0.25毫米

至此,该标记符号已经制作完成。点击“符号选择器”对话框中的“OK”按钮,为该符号起个名字保存起来。

在QGIS中随便打开一个点图层,将自定义的“区人民政府驻地”符号应用于该图层,查看一下效果。

 

点击菜单“工程-->导入/导出-->导出地图为PDF文件”,将地图导出为PDF文件。打开PDF文件,尽可能放大地图,可以看出地图上的自定义符号是矢量的,不会因为地图的放大而变得模糊,且其形状与bj2020_80w_1.pdf文件中的“区人民政府驻地”图例项是一致的。

 05 制作线符号

打开下载的bj2020_80w_1.pdf文件,尽最大可能放大图例区域中的“区界”图例项。

 

可以看出,该图例项由长横线、短横线、空格三部分组成,可以将其拆解两部分,各作为一个符号图层。第一个符号图层由长横线和空格组成,长横线的长度为45格,空格的长度为27格。第二个符号图层由短横线和空格组成,短横线的长度为7格,空格的长度为65格。长横线和短横线的高度都为4格。

对于长横线符号图层,比较好处理,通过定义横线长度和空格长度即可生成。对于短横线图层,也可以定义横线长度和空格长度,但由于短横线的起点相比长横线的起点有一个偏移量,长度为55(45+(27-7)/2),也需要在符号图层中加以指定。

根据长横线长度、短横线长度、空格长度、线高度的测量结果,假定线高度(对应符号图层的描边宽度)为0.4毫米,得到各主要尺寸参数如下:

(1)描边宽度:0.4毫米

(2)长横线长度:4.5毫米

(3)长横线空格长度:2.7毫米

(4)短横线长度:0.7毫米

(5)短横线空格长度:6.5毫米

(6)短横线偏移量:5.5毫米

“区界”图例项的颜色为棕色,具体RGB值为:(132,65,54)。

在“样式管理器”中切换到“线”面板,点击下方的“添加项”按钮,弹出“符号选择器”对话框。QGIS会自动生成一个默认的线符号,该符号包含一个简单线符号图层。点击“符号选择器”右上角的“添加符号图层”按钮,QGIS将为该符号添加一个新的简单线符号图层。分别为两个线符号图层设置参数如下:

点击“符号选择器”对话框上的“OK”按钮,为该符号起个名字保存起来,并可以打开某个线图层,试验一下符号效果。

 06 小结

自定义符号功能是制作内容丰富、表达生动地图的重要保证,有必要对其进行深入研究。本文初步探讨了QGIS自定义符号的基本原理,并通过实例尝试制作了标记符号和线符号。事实上,QGIS的符号体系远不止这些内容,填充符号、SVG符号、通过数据定义覆盖控制符号参数等更为复杂的内容均未涉及。

愿本文能对大家理解QGIS自定义符号的原理起到入门指引的作用,希望大家能在此基础上制作出更多更精美的符号,更希望有人能制作出一些符号库上传到QGIS协会官方样式库(https://plugins.qgis.org/styles/)中,与世界分享,谢谢!

Q博士本人

2021年7月6日


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

地图显示是GIS的基础,完美的地图显示,首先是主题内容突出,要素的类型、特征及其层次变化分明,和谐悦目的色彩诱导读者阅读其内容。地图能完整、高效地显示,您就完成了开发工作的百分之七八十了,地图显示的关键是地图符号的显示,所以一套完善的符号库是GIS开发的基础,也是GIS开发的核心。 在继地形图符号之后,这次我推出一套城市图符号库。因为就城市图来讲,国家到目前还没有一套标准化的编码表及图式,这套符号库是我多年GIS开发经验的积累,也是我综合我国及瑞士等国家城市交通旅游图所得的结果。此套地形图符号库包括四十多种点状符号,十多种线状符号和二十多种面状符号,加上这些符号等级的变化,基本可以完成城市图的显示工作,如你有一些特殊的需求,在现有程序的基础上进行扩充,相信你很快就能自己实现了。 这套符号库是利用VC++语言开发的,并且已经在多个城市信息系统中使用过,有着很好的稳定性和高效性,作为VC开发的组件,它有简单的接口(只用了一个接口函数),强大的功能等特点(实现了所有城市图符号的绘制)。符号库的接口: DrawSymbol(int ID,CDC *pDC,int number,double *x,double *y,double FDtimes)。 此符号库不仅是VC语言的成果,它更是制图艺术的体现,根据不同的放大比,能自动进行制图综合。如果你是GIS开发人员,你可以直接使用我的这一套符号库,也可以使用些符号库中的一些画图形的源代码,相信此套符号库对你的GIS底层开发会有很大的帮助;如果你是VC图形图像开发人员,此套符号库对你也会有一定的帮助,因为符号本身就是图形学的一部分,其中的图形函数比较成熟,很有参考价值。 联系作者:campanula6524@sina.com campanula6524@hotmail.com campanula6524@163.com
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值