QGIS矢量融合保姆级教程:如何用‘字段计算器’按行政编码合并省市县乡四级边界
行政区划数据处理是GIS工作中的常见需求,特别是当我们需要将分散的行政单元按照省、市、县、乡等不同层级进行汇总分析时。本文将以一个典型场景为例:假设你手头有一组完整的12位行政编码(如360012550102),需要快速分离并合并出四个层级的矢量边界。通过QGIS的字段计算器和融合工具的巧妙组合,即使是GIS新手也能轻松完成这项任务。
1. 理解行政编码结构与数据准备
我国行政区划编码通常采用层次编码法,以12位数字为例:
省(2位) + 市(2位) + 县(2位) + 乡(2位) + 村(2位) + 组(2位)例如编码"360012550102"可以拆解为:
- 省:36(江西省)
- 市:00(省直辖县级行政区)
- 县:12(县级市代码)
- 乡:55(乡镇代码)
在开始操作前,请确保:
- 已安装QGIS 3.x版本(本文基于3.28版本演示)
- 准备好包含完整行政编码的矢量图层(如Shapefile或GeoPackage)
- 确认编码字段为文本类型(若非文本需先转换)
提示:如果原始数据编码长度不一致,建议先用字段计算器统一补零,确保所有编码长度相同。
2. 使用字段计算器提取各级编码
字段计算器是本次操作的核心工具,我们将通过字符串函数逐级提取编码。
2.1 提取省级编码
- 右键点击图层 → 打开属性表
- 点击字段计算器按钮(计算器图标)
- 创建新字段:
- 输出字段名:
province_code - 输出字段类型:文本(字符串)
- 表达式:
left("admin_code", 2)
- 输出字段名:
- 点击"确定"生成新字段
2.2 提取市级编码
重复上述步骤,创建city_code字段:
- 表达式:
substr("admin_code", 3, 2)
或者使用更直观的写法:
left(right("admin_code", 10), 2)2.3 提取县级和乡级编码
同样的方法创建:
- 县级字段
county_code:substr("admin_code", 5, 2) - 乡级字段
town_code:substr("admin_code", 7, 2)
完成后属性表应新增四列,分别对应各级编码:
| admin_code | province_code | city_code | county_code | town_code |
|---|---|---|---|---|
| 360012550102 | 36 | 00 | 12 | 55 |
| 360012550203 | 36 | 00 | 12 | 55 |
3. 多级行政区划融合实战
有了分级编码字段后,就可以按需进行矢量融合了。
3.1 省级边界融合
- 菜单:矢量 → 地理处理工具 → 融合
- 参数设置:
- 输入图层:选择当前图层
- 融合字段:勾选
province_code - 输出文件:指定保存路径和格式
- 点击"运行"
3.2 市级边界融合(以江西省为例)
如果需要特定省份下的市级边界:
- 先按省级编码过滤:
"province_code" = '36' - 使用融合工具,融合字段选择
city_code
3.3 组合多级融合
有时需要同时考虑多级行政区划,例如"某省下各县的乡镇合并":
- 创建组合字段:
"province_code" || '_' || "county_code" # 输出如"36_12" - 按此组合字段进行融合
4. 高级技巧与常见问题处理
4.1 动态分级融合
使用CASE WHEN语句实现智能分级:
CASE WHEN length("admin_code") = 12 THEN left("admin_code", 2) WHEN length("admin_code") = 6 THEN left("admin_code", 2) ELSE NULL END4.2 处理不完整编码
当遇到不规范的编码时(如缺少前导零),可以使用:
lpad("admin_code", 12, '0') # 不足12位左侧补零4.3 性能优化建议
- 对大图层操作前,先创建空间索引
- 分省处理超大数据集
- 使用虚拟字段减少存储占用
5. 成果可视化与输出
融合后的图层可以:
- 按行政级别设置不同样式
- 添加标注显示编码和名称
- 导出为PDF或图片
样式设置建议:
- 省级:粗实线,浅色填充
- 市级:中等虚线,无填充
- 县级:细实线,点状图案填充
最后提醒:操作前务必备份原始数据,字段计算器中的表达式建议先在虚拟字段中测试验证。