QGIS|如何制作行政区划四色图

news/2024/11/22 18:14:32/

行政区划单元是常用的底图要素,通常用颜色进行区分,这些大面积分布的色彩往往决定了一幅地图的配色风格,因此,行政区划图的色彩配置将影响到地图信息表达效果。

本文结合QGIS的【拓扑着色】工具,介绍QGIS实现行政区划四色图的过程。

 

 01 什么是四色图

 

行政区划图着色要求相邻行政区划单元颜色不相同,在计算机领域通常被称为“四色图”问题,即对于任一地图,只用不多于四种颜色,就能使相邻的行政区划单元颜色不相同。实际上,如果将颜色的数量限制为四种,有时候会导致算法找不到最优解,因此一般认为行政区划配色使用3-7种颜色比较适宜。

 

 02 建立颜色索引

QGIS 3.0之前是通过插件实现拓扑着色的,从 3.0开始内置【拓扑着色】模块,替代了原有的插件功能,并改变原来完全依赖计算机图论着色的方式,转而参考要素的空间布局对着色算法做出了优化,可以理解为从纯粹的数学方法( abstract mathematical solution)变为地图制图的方式(cartographic solution)解决着色问题。

 

【拓扑着色】给多边形要素分配颜色索引值,使各个相邻多边形有不同颜色索引值,尽量减小所需颜色数,并将颜色索引保存到图层属性表的“color_id”字段中。然后利用图层的分类(Classified)渲染方式,给每个颜色索引设置不同的颜色,即可得到行政区划四色图。

 

我们先看看生成颜色索引的操作流程。
 

在【浏览】面板定位到2015年行政区划存储路径,将“CN_sheng_A.shp”文件拖拽到地图主窗口中。

 

为了对比,打开行政区划图层“CN_sheng_A”的属性表,可以看到原始数据包含了AREA、PERIMETER、SHENG_、SHENG_ID、SHENG、name共6个字段。

 

点击菜单【处理】->【工具箱】,打开【处理工具箱】面板。

 

在搜索框输入关键词“topo”,从筛选结果中依次找到【制图学】->【拓扑着色】,双击运行。

 

在弹出的拓扑着色对话框中,设置【输入图层】为“CN_sheng_A”,【最少颜色数】表示制图使用最少的颜色数,默认为4。

 

【要素间最小距离】为同一个颜色的要素之间最小距离,防止距离较接近(但互不接触)的要素分配到相同颜色。保持默认值即可。

 

【Balance color assignment】:颜色平衡,即分配颜色时使用的方法。默认为“按要素数目”,尽量使各颜色索引的要素数量接近。“按分配的面积”模式可以平衡各颜色的总面,避免大面积的要素在地图上出现显著的颜色。“按颜色之间的距离”则是尽量增长同一颜色要素之间的距离,令色块分布得更均匀。

 

【Colored】表示输出结果存储方式,设置将结果保存到名为“sheng-color.gpkg”的GeoPackage文件中。点击【运行】按钮,开始计算颜色索引。

 

算法运行结束后,点击【Close】返回QGIS地图窗口。可以看到【图层】面板中添加了新图层“sheng-color”。右键点击该图层,打开属性表窗口。

 

属性表中增加了“color_id”字段,用1-5表示各个要素的颜色索引取值。那么,如何使用这些颜色索引呢?

 

 03 配色

点击【图层】面板上方的【打开图层样式面板】按钮,打开图层样式面板。

 

在【图层样式】面板中,图层下方的下拉框选择“分类”,【值】下拉框选择“color_id”字段,点击的【分类】按钮,一幅相邻要素颜色互不相同的行政区划着色图显示在地图窗口中

 

默认的配色总是不那么让人满意。点击【颜色渐变】,在弹出菜单中选择【打乱随机颜色】,配色将会发生改变。改变随机配色,直到满意。

 

双击分类列表中的色块,打开符号设置面板,可以设置对应条目的样式。

 

在符号设置面板中,选择符号图层“简单填充”,在下方设置所需要的颜色、描边样式、线宽等选项。完成后点击按钮返回,继续设置其他分类的风格。

 

最后,点击【图层样式】面板的,以“name”字段为图层添加标签,效果如下。

 

 

 04 效果图

有了颜色索引,就可以根本不同的配色方案,生成不同风格的行政区划图了。下面是我选择的一些配色方案效果,有没有你喜欢的呢?(如果喜欢,可以关注微信公众号,后台留言向我索取样式文件。)

 

参考资料:

[1] 魏智威等,顾及视觉规律的行政区划图自动着色回溯法,测绘学报。

 


版权声明

 

本文欢迎转载,转载时请注明出处。

 

 


http://www.ppmy.cn/news/765146.html

相关文章

Bootstrap样式登录注册表单界面

下载地址一套简约的Bootstrap样式登录和注册表单界面,在同一个页面上同时有登录和注册两个表单。可以结合FontAwesome紫图图标美化。 dd:

Python绘制子图

方法一 import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline # 画第1个图:折线图 xnp.arange(1,100) plt.subplot(221) plt.plot(x,x*x) # 画第2个图:散点图 plt.subplot(222) plt.scatter(np.arange(0,10), n…

无向图染色

题目描述 给一个无向图染色&#xff0c;可以填红黑两种颜色&#xff0c;必须保证相邻两个节点不能同时为红色&#xff0c;输出有多少种不同的染色方案? 输入描述 第—行输入M(图中节点数)N(边数) 后续N行格式为:V1V2表示一个V1到V2的边。 数据范围: 1<M< 15,0 <N<…

Unity 导出AB包到手机部分Shader丢失解决方案记录。

1.Unity自带默认Shader丢失情况。 需要在 ProjectSettings/Graphics/AlwaysIncludedShaders 中将使用的Shader打入&#xff0c;建议不使用M默认Standard.shader。这个会导致包体大40M。建议自己实现。添加形式如图 2.自我编辑的Shader丢失&#xff0c;表现形式为在ab包中显示已…

JavaScript 数组排序函数sort()的使用

简介 sort&#xff08;&#xff09;方法是js中对于数组进行排序的函数。其可以方便快捷的实现对于数组的排序而不用我们自己编写排序方法。注&#xff1a;sort&#xff08;&#xff09;函数会直接改变原数组。 1.纯字符串数组排序 let myArray ["people","p…

javaScript 数组遍历的几种方法和对稀疏数组的处理

简介 数组的遍历方法又称为数组的迭代器方法&#xff0c;迭代器是程序设计中的一种软件设计模式&#xff0c;在js中&#xff0c;我们可以使用它来在数组中遍历而无需关心其内部实现的细节。   以下的遍历方法均不会对原数组产生影响&#xff0c;也就是说&#xff0c;我们如果…

【算法】约瑟夫环问题解析与实现

导言 约瑟夫环&#xff08;Josephus Problem&#xff09;是一个经典的数学问题&#xff0c;涉及一个编号为 1 到 n 的人围成一圈&#xff0c;从第一个人开始报数&#xff0c;报到某个数字 m 的人出列&#xff0c;然后再从下一个人开始报数&#xff0c;如此循环&#xff0c;直到…

Linux操作系统详解

文章目录 引言1. 认识Linux1.1 操作系统概述1.2 认识Linux1.3 虚拟机介绍1.4 远程连接Linux操作系统1.5 WSL1.6 虚拟机快照 2. Linux基础命令2.1 Linux的目录结构2.2 命令入门2.3 目录切换相关命令&#xff08;cd/pwd&#xff09;2.4 相对路径&#xff0c;绝对路径和特殊路径符…