多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

QGIS入门实战:数据源、格式转换、标注与符号化全解析

QGIS入门实战:数据源、格式转换、标注与符号化全解析 1. 从一次被逼上梁山说起为什么我把主力工具换成了 QGIS第一次真正被 QGIS 救场是几年前一个临时接的活儿——客户丢过来一个压缩包里面躺着 shp、kml、geojson、还有两张坐标系都说不清楚的 tif 影像要求三天内出一张带标注、带分级配色、能直接打印的专题图。当时手里的商业软件授权刚好到期重装一套下来黄花菜都凉了于是抱着死马当活马医的心态打开了 QGIS。结果一下午时间打开数据源、转换数据格式、添加标注、符号化这一整套流程走下来输出的图客户直接过稿。从那以后QGIS 就成了我处理地理数据的默认起点。这篇文章想聊的就是这几个最基础、但也是新手最容易卡壳的环节。QGISQuantum GIS是一款开源免费的桌面地理信息系统跨 Windows、macOS、Linux安装包几百兆装完就能用不需要联网激活也不挑显卡。它解决的核心问题很直接把不同来源、不同格式、不同坐标系的空间数据统一到一个工程里然后让你能看图、改图、出图。适合谁看如果你是从 Excel 转过来做地图的运营或分析岗是刚接触 GIS 课程的学生是偶尔需要画点位图的工程或规划从业者甚至是完全没碰过地理数据、只想把一张 CSV 经纬度表变成可用地图的人这篇内容都能让你少走大量弯路。需要先说明一点下面涉及的很多参数选择和操作路径是基于我日常使用摸索出来的常规实践QGIS 版本迭代很快不同版本菜单文字可能略有出入但底层逻辑是通的。我会尽量讲清楚为什么这么设而不只是点哪个按钮。2. 打开数据源把各种格式的数据喂进 QGIS2.1 先搞清楚数据源到底分几类很多人一上来就卡在第一步我手里这个文件到底算矢量还是栅格判断标准其实一句话——看数据是点线面还是格子。矢量数据描述的是离散的几何对象比如一条道路、一个行政区边界、一个 POI 点常见格式有Shapefileshp、GeoJSON、KML/KMZ、GPKGGeoPackage、DXF、CSV带经纬度列。栅格数据则是按行列排布的像元网格比如卫星影像、DEM 高程、扫描的地形图常见格式有GeoTIFF、IMG、JPEGworld file、NetCDF等。QGIS 打开矢量数据的入口非常统一顶部菜单图层 → 添加图层 → 添加矢量图层或者直接把文件从资源管理器拖进图层面板这是我最常用的方式快。拖进去之后 QGIS 会自动识别编码、坐标系和几何类型。栅格数据同理走图层 → 添加图层 → 添加栅格图层。这里有个新手容易忽略的点Shapefile 其实是一套文件而不是单个文件.shp是几何.dbf是属性表.shx是索引.prj是坐标系定义。你单独拷一个.shp给别人坐标系信息就丢了这一点在交接数据时特别容易出事。至于在线数据源QGIS 内置了XYZ Tiles和WMS/WMTS/WFS支持可以在浏览器面板里直接添加。国内环境下很多公共瓦片服务是可用的自己按需配置即可不必依赖任何特定境外服务。栅格影像也可以用添加栅格图层直接加载本地 tif遇到超大的影像加一个金字塔overview会流畅很多。2.2 打开 CSV 和 Excel 里的经纬度这一步有讲究我见过太多人直接把 Excel 另存为 CSV 然后拖进 QGIS结果发现是个没有几何属性的纯表格。原因很简单QGIS 不会自动猜哪一列是经度、哪一列是纬度。正确姿势是走图层 → 添加图层 → 添加分隔文本图层在对话框里文件编码选 UTF-8中文乱码十有八九是这里没选对勾选分隔符里的逗号在几何定义里选点坐标X 字段填经度列、Y 字段填纬度列坐标系一定要手动指定如果经纬度是 WGS84选 EPSG:4326。这里必须敲黑板经纬度顺序是重灾区。地理学里常说经纬度但 GIS 里 X 对应经度、Y 对应纬度很多人按纬度在前的表头顺序填反了点就会跑到南极洲附近或者直接报错。填完先看预览图点位落在中国境内基本就对了落到太平洋里就得回头检查。另外CSV 加载进 QGIS 后默认是临时图层也就是内存里的一个视图关掉软件就没了。想长期保留必须右键图层 → 导出 → 保存要素为选一个正式格式落盘。这个临时与永久的区别坑过一大票新人。2.3 编码与坐标系两个隐形杀手打开数据源阶段90% 的问题集中在两件事上中文乱码和位置漂移。乱码通常是编码问题Shapefile 的 dbf 表常见 GBK/GB2312 编码QGIS 默认按 UTF-8 读就会出问号或方块解决办法是图层属性 → 源 → 数据源编码里改成对应编码重新加载。位置漂移则是坐标系搞错了明明是中国的地图却显示在非洲西海岸多半是 EPSG 代码选错。我的习惯是拿到任何数据源先看它自带的.prj文件或元数据里写的是什么坐标系没有明确信息就先按 WGS84 看一眼位置不对再逐步试。永远不要凭感觉给数据强行指定坐标系宁可多花两分钟确认。提示数据源加载失败时先看 QGIS 右下角的状态栏和日志面板错误原因通常写得很清楚比反复试错高效得多。3. 数据格式转换让数据在软件之间自由流动3.1 最常用的导出方式其实就一个入口转换数据格式QGIS 提供了两条路。一条是图形界面的右键图层 → 导出 → 保存要素为适合单次操作另一条是处理工具箱里的转换格式 / ogr2ogr类工具适合批量。对我这种经常要交付多种格式的人来说前者已经够用。在保存要素为对话框里有几个关键参数值得展开讲格式Format下拉里能选 GeoPackage、GeoJSON、KML、Shapefile、CSV、DXF 等。如果只是内部流转我强烈推荐GeoPackage.gpkg它是单文件、支持多图层、支持中文、没有 Shapefile 的字段名长度限制比 shp 现代得多。坐标系CRS默认图层 CRS也就是原样输出。如果要投递给指定坐标系的单位比如要求 CGCS2000就在这里改。注意这是重投影不是改标签数据会真正换算。编码导出 Shapefile 时如果含中文务必在图层选项里把编码设为 UTF-8 或 GBK看接收方用什么环境。转换的本质是读进来再写出去中间会经过一次几何与属性的完整重建。所以转换前务必确认源数据没有拓扑错误比如自相交的多边形、重复节点否则某些格式在写出时可能直接失败。3.2 坐标系转换最容易翻车的环节坐标系是 GIS 的语言说不到一块去数据就叠不到一起。理解它抓住两点即可地理坐标系GCS用经纬度描述地球表面单位是度投影坐标系PCS把地球摊平到平面上单位通常是米。中国大陆常见的有EPSG:4326WGS84 经纬度、EPSG:4490CGCS2000 经纬度、EPSG:3857Web 墨卡托在线底图常用、以及各种 3 度带/6 度带高斯投影如 EPSG:4547 等。在 QGIS 里转换有两种场景。场景一整个工程统一在项目 → 属性 → 坐标系里设一个QGIS 会实时即时重投影所有图层来适配显示注意这只是显示层的换算源数据没变。场景二真正把数据物理转换走右键图层 → 导出 → 保存要素为目标 CRS 选好或者用处理工具箱 → 矢量通用 → 重投影图层。这个才是能交付给别人的结果。计算投影带号有个简单公式以 3 度带为例带号 round(经度 / 3)中央经线 带号 × 3。比如东经 116 度116/3≈38.7取 39 带中央经线 117 度。知道这个你就能判断数据该用哪个 EPSG。选错带的后果是位置偏差几十米到几公里在精细作业里是致命的。3.3 批量转换与字段汇总的小技巧如果手上几十个 shp 要统一转成 GeoPackage一个个点太慢。用处理工具箱 → 矢量通用 → 合并矢量图层可以先把同类数据并成一个再统一导出或者直接用批处理模式对话框右上角的以批处理方式运行把多个文件列进去一次性跑完。字段汇总这种需求也常和格式转换绑在一起比如把多个乡镇图层合并后按某一字段求和用处理工具箱 → 矢量几何 → 按字段聚合Aggregate就能实现聚合后再导出一步到位。一个实际经验批量导出时命名一定要规范否则几十个输出文件堆在文件夹里自己都分不清。我一般用图层名_坐标系_日期的格式比如roads_4490_20240115.gpkg后期检索省心。4. 标注让地图自己开口说话4.1 基于属性的动态标注怎么配标注Label是把属性表里的某个字段直接显示在图形上比如道路名、点位名称、数值。基础操作是图层属性 → 标注把模式从无标注改成单一标注然后值那里选字段。听起来简单但要标得好看、不打架门道不少。先说几个必调参数。字体和缓冲地图底图颜色复杂时给标注加一圈白色文字缓冲Buffer能大幅提升可读性路径在标注的缓冲标签里。位置点要素可以选围绕点线要素选沿线段面要素选质心或水平居中。优先级在渲染标签里能设优先级碰撞时优先保留重要的标注。动态标注的关键在表达式。比如你要把村名和人口拼在一起显示成XX村(1200人)就在值那里点表达式按钮写村名 || ( || 人口 || 人)再比如只想给人口大于 5000 的村显示标注用规则标注Rule-based labeling加一条过滤规则人口 5000。这种条件标注在专题图里特别实用能避免图上被一堆无关名字糊满。4.2 标注冲突处理与中文排版坑标注最常见的痛点就是压盖。点密集的时候标注会互相叠。QGIS 的放置标签里有避让Avoid collisions选项勾上后 QGIS 会尝试自动挪位置再配合优先级和最大距离能让大部分标注各归其位。面图层还可以用按区域标注让标注只在面内部出现。中文排版上有两个经验值得说。第一字体尽量选系统里通用的黑体或宋体别用花哨字体否则在别人电脑上打开会变默认字体导致排版错乱。第二长文本用wordwrap表达式按字数换行比如wordwrap(描述, 10)每十个字换一行避免一条标注横穿整张图。还有个高级玩法用HTML 标注。在标注引擎里勾选允许 HTML 标签然后可以给文字加颜色、加粗甚至插入简单结构做出来的效果比单纯改字体丰富得多。不过 HTML 标注渲染稍慢超大图层慎用。注意如果某个图层的标注死活不显示先检查是不是被别的图层盖住了、是不是标注优先级太低、是不是缩放到某些比例尺才触发比例尺可见性范围设窄了这三个原因占了绝大多数。5. 符号化从能看到好看的关键一步5.1 单符号、分类与分级渲染怎么选符号化Symbology就是给数据上色上样式。基础是图层属性 → 符号化最常见的三种模式单一符号所有要素用同一个样式。适合底图类、参考图层。分类Categorized按某个文本/离散字段给不同类别不同颜色比如按土地类型分耕地、林地、水域各自一种色。选好字段后点分类QGIS 会自动列出所有唯一值。分级Graduated按某个数值字段分段渲染比如按人口分 5 档做渐变色。这里的关键是分段方法等间隔Equal Interval、分位数Quantile、自然断点Natural Breaks/Jenks、标准差。选哪个直接影响图的信息表达。我一般这么判断数据分布均匀用等间隔想突出排名、每类数量均衡用分位数数据有明显聚集和断层比如城市人口用自然断点最能还原真实分布。段数别太多5 到 7 档人眼分辨得最舒服超过 9 档颜色就难区分了。颜色搭配上连续数值用同色系渐变浅到深表示小到大类别数据用色相差异明显的定性配色。QGIS 内置了大量配色方案ColorBrewer 系列直接下拉选就行别自己硬调。5.2 规则驱动渲染与自定义表达式比分类更灵活的是规则渲染Rule-based。它允许你写多个条件每个条件套不同样式。比如一张路网图规则一等级 高速→ 红色粗线规则二等级 国道→ 橙色中等线规则三等级 IN (省道,县道)→ 黄色细线。一个图层搞定多种样式不用拆分图层管理起来清爽。表达式里支持各种函数IN、LIKE、AND、OR都能用还能结合几何函数比如只渲染面积大于某值的面。几何生成器Geometry Generator是另一个让我省事的工具。它能在不改变原始数据的前提下画出辅助图形比如给河流线自动生成双线、给点自动生成圆形范围。路径在符号化里把符号层类型改成几何生成器写表达式控制生成几何。这功能看似小众但做美化图时非常顶用。符号化的另一个维度是比例尺可见性。大比例尺显示的详细符号缩小后可以切换成简化符号避免小比例尺下图面拥挤成一片。设置位置在图层属性里和标注的比例尺可见性逻辑一致。做多比例尺地图时这套机制能让你一张工程适配多个视图。5.3 图层混合与地图叠加的收尾经验符号化做得差不多后整体观感往往还差一口气问题多半出在图层顺序和混合模式上。图层面板从上到下就是绘制顺序面在下、线居中、点在上是基本常识但很多人把注记层和底图顺序放反导致底图把数据盖住。发现图层看不见时第一件事就是检查它有没有被上面的不透明图层挡住。混合模式Blend Mode藏在图层渲染设置里正片叠底、叠加、屏幕这些模式能让图层互相透叠做叠加分析示意图或热力效果时很好用。不过混合模式对性能有影响图层多的时候会卡按需开。导出成图前我习惯最后过一遍项目 → 新建打印布局把比例尺、指北针、图例、文字说明摆好再导出 PDF 或高分辨率 PNG。图例会自动读取各图层的符号和分类名称省去手动标注的功夫。这一步做完一张能直接交付的专题图才算真正完成。6. 常见问题与排查技巧实录6.1 高频问题速查表下面这张表是我这些年被问得最多、自己也反复踩过的坑按现象—原因—对策整理遇到问题直接查。现象可能原因解决方向中文显示成方块/问号数据源编码不匹配图层属性里改数据源编码为 GBK 或 UTF-8 重载点位跑到国外或海里经纬度填反或坐标系错检查 X/Y 字段确认 EPSG 代码图层叠加位置错位各图层坐标系不一致统一工程 CRS 或用重投影工具物理转换导出的 shp 中文乱码导出时未指定编码保存要素为时设置 UTF-8/GBK标注不显示被遮挡/优先级低/比例尺范围限制逐项排查图层顺序与标注设置分类颜色太少或混乱分类字段选错或唯一值过多换字段或改用规则渲染手动分组大影像卡顿无金字塔、渲染太重生成 overview关闭实时重投影字段名被截断成 10 字符Shapefile 限制改用 GeoPackage 格式6.2 我踩过的那几个坑以及现在的工作习惯第一个坑是临时图层。早年辛苦标了半天关软件没保存再打开啥都没了。现在我的铁律是任何通过 CSV 或拖拽加载进 QGIS 的图层第一件事就是导出落盘成正式格式绝不拖延。第二个坑是坐标系想当然。有次拿到的数据没带 prj 文件我默认它是 WGS84结果和底图差了将近一百米。后来养成的习惯是碰到位置可疑的数据先用矢量 → 几何工具 → 检查有效性看一眼再叠加一张已知坐标的参考底图验证眼见为实。第三个心得关于模板复用。做同类型主题图时我会把配好的符号化和标注样式保存为 QML 样式文件图层右键 → 导出 → 保存样式下次加载同类数据直接导入一键换装效率翻倍。这个功能知道的人不多但用起来真的香。最后一个私房建议善用表达式但别过度炫技。表达式能实现非常复杂的逻辑可一旦写得又长又绕过两个月自己都看不懂别人接手更抓瞎。我现在的原则是能靠规则和分类解决的就不写复杂表达式非要写就在旁边加注释说明用途。QGIS 这套工具链的深度远超这篇入门内容但把数据源、格式转换、标注、符号化这四块吃透日常八成以上的地图活儿都能独立完成。剩下的就是多做几张图手感自然就来了。
返回列表