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日
QGIS自定义符号的原理与实践——以北京市标准地图为例相关推荐
- 国内地图数据纠偏实践:以高德地图为例
背景 在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的 ...
- 使用QGIS自定义高德地图风格铁路线型符号
地图符号(Symbol)是地图的语言,是对地理要素空间形状的化简.概括和抽象.QGIS作为一个通用的.国际化GIS软件,自带了多样化的预定义符号库,相关的开源社区也贡献了很多地图专家制作的符号,但是仍 ...
- 国内外编译原理课程实践教学现状分析
<自己动手写编译器.链接器> 冯向萍 (新疆农业大学计算机与信息工程学院) 摘 要:本文主要从教材的选择,实践项目的设置以及实践课程占总评成绩的比例等方面分析和比较了国内外多所高校编译 ...
- 《从Paxos到zookeeper分布式一致性原理与实践》笔记
<从Paxos到zookeeper分布式一致性原理与实践>笔记 文章目录 <从Paxos到zookeeper分布式一致性原理与实践>笔记 一.概念 二.一致性协调 2.1 2P ...
- 《从Paxos到zookeeper分布式一致性原理与实践》
<从Paxos到zookeeper分布式一致性原理与实践> 一.概念 ACID: Automaticy.consistency.isolation. Durability CAP: con ...
- Webpack原理与实践
简单了解了几个常用的插件,一般适合用于任何类型的项目,不管是否使用了框架.webpack为每个工作环节都预留了合适的钩子,扩展时只需要找到合适的时机去做合适的事情. 写在前面 webpack插件机制的 ...
- Sizzle引擎--原理与实践(二)
主要流程与正则 表达式分块 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['& ...
- 分布式开放消息系统(RocketMQ)的原理与实践
分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一 ...
- 《VMware 网络技术:原理与实践》—— 3.2 以太网
本节书摘来自华章出版社<VMware 网络技术:原理与实践>一 书中的第3章,第3.2节,作者:(美)Christopher Wahl Steven Pantol,更多章节内容可以访问云栖 ...
最新文章
- python opencv单通道转多通道_13、OpenCV绘图和文本显示
- Bzoj2110--Wc2011Xor
- MYSQL: MERGE引擎实现多分表的联合
- python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...
- 牛客题霸 [ 旋转数组] C++题解/答案
- java基本数据类型的标识符_java基础(一)-标识符、变量、基本数据类型及转换、运算符及表达式...
- 初学者的React全家桶完整实例
- codevs1197 Vigenère密码
- git command not found
- style, currentStyle, getComputedStyle的区别
- 【金蝶K3Cloud】 判断明细行的lambda表达式
- pic单片机用c语言怎么编程,手把手教你学PIC单片机C语言指导教程.pdf
- 数字图像处理基本知识点1(冈萨雷斯)
- Linux驱动之Kconfig语法——学习笔记(11)
- iredmail邮件服务器安装流程
- Creo二次开发:参数化设计
- Cocoa和Cocoa Touch框架浅析
- 为什么要给软件做测试?如何测试呢?
- 超链接点击页面不调转
- 一节计算机课作文500,难忘的一节课作文500字4篇
热门文章
- 惠普elitebook系列电脑 安装新固态不识别处理方法
- 浏览器driver下载地址
- python爬取b站直播弹幕代码
- Java的ZipFile报错:Caused by: java.util.zip.ZipException: invalid CEN header (bad entry name)
- Oracle收款核销了怎么撤销,AR收款核销记帐on_account
- linux mdadm 创建raid,Linux下用mdadm命令创建软raid5
- python语句print(type([1、2、3、4))_Python语句 print(type([1,2,3,4])的运行结果是_学小易找答案...
- Java减压_帮程序员减压放松的10个良心网站
- 知乎大V推荐!面试大厂应该注意哪些问题?面试总结
- React飞行日记(五) - 重构React渲染函数React.createElement与ReactDOM.render