直接上结论:把一张几百行的Excel销售台账变成一张能直接打印上墙的县域烟花爆竹零售点专题图,QGIS就能干完,而且一个人半天就能搞定。
我最近刚好用QGIS处理了一批某县的烟花爆竹零售许可数据,源文件就是个普通Excel表格,几十个字段,一百多个点位,经纬度有是有,但格式不统一、坐标系也完全没标注,责任单位要的还是一张“按许可类型分色、能看出分布密度、能打印”的专题图。这套流程走下来,从数据清洗到出图,中间踩了不少坑,也沉淀出几条一看就能用的经验。这篇就把整个流程拆开讲一遍,从Excel数据如何进QGIS、坐标怎么对齐、专题符号怎么设置,到布局怎么排版导出,全部按我实操的顺序记录下来。
先说清楚,这篇内容适合以下几类人:GIS零基础但手里有Excel点数据的基层工作人员,想系统跑通“表格→地图”流程的学生,以及需要用QGIS批量出专题图的日常办公人员。整个过程不涉及任何付费插件,只用QGIS自带功能和少量免费扩展。
1. 开工之前:Excel数据质量决定后面一半的成败
1.1 先搞懂为什么“加载Excel”不是打开Excel
很多人习惯把Excel文件直接拖进QGIS,结果发现要么打开全是乱码,要么提示无法连接图层,要么能连上但只是张普通属性表,根本没在地图上显示点位。核心原因在于:QGIS读Excel不是像Excel软件那样把整个工作簿“打开”,而是通过数据库驱动把每一个工作表当成表来读取,而且它默认只会处理不带坐标信息的数据表。如果你的Excel里没有能被识别为X、Y坐标的列,QGIS只能显示一张表格,画不了地图。
所以我平时处理这类数据的第一条经验就是:Excel在进QGIS之前,必须先变成“能被空间化”的结构。所谓空间化,就是表里至少有两个明确的数值字段,一个代表经度(X),一个代表纬度(Y),并且确保它们是数值型而不是文本型。
1.2 县域烟花销售点Excel字段的常见问题
以我这次处理的烟花爆竹零售点台账为例,原始表格里大体有这些字段:零售点名称、负责人、许可证号、地址、许可类型、核定储量、经纬度、有效期等。看起来信息很全,但实际操作时问题全藏在细节里:
- 经纬度列名不统一。有的是“经度”“纬度”,有的是“X坐标”“Y坐标”,还有的直接混在“地址备注”里写“112.3, 35.6”这种格式。
- 经纬度格式掺杂文本。比如“112°23′14″”这种度分秒格式,QGIS不认识,必须提前转成十进制度格式,112.3872这种。
- 坐标值反了。字段里叫“经度”的,填的却是44开头这种纬度值,一旦加载后点位跑到境外甚至非洲大陆,就要怀疑是不是X、Y写反了。
- 多表头、合并单元格。基层表格经常有“第一行大标题、第二行字段说明、第三行才是字段名”的情况,加载时会直接错位。
所以正式导入前,我建议先把原始Excel另存一份“处理版”,至少做到三件事:
- 只保留一行字段名,放在第一行;
- 单独拆出经度、纬度两列,统一命名为Longitude和Latitude(或固定的X、Y);
- 全表数值列确认格式,尽量把经纬度列的单元格格式设为“数值”,保留6位以上小数。
如果原始坐标是度分秒,可以在Excel里加两列辅助列换算,公式是“度+分/60+秒/3600”,这一步别偷懒,换算错一个点,地图上就飘出去几公里。
1.3 底图数据怎么准备
专题图最好叠加行政区边界,否则一堆点在屏幕上飘着,既看不出在哪个乡镇,也没法说明空间分布。县域边界和乡镇边界一般可以从公开的标准地图服务或当地已有的GIS数据中获取。常见做法是拿基础地理信息数据里的行政区划面层,导出成Shapefile或GeoJSON,放到QGIS里直接用。
这一步有三条实用经验:
- 边界数据一定确认坐标系。很多地方提供的边界是西安80或2000国家大地坐标系(CGCS2000),而Excel里的经纬度通常是WGS84坐标,两者如果不统一,要先做坐标转换,后面详细说。
- 边界数据不要全局下载。县域范围只需要本县边界和乡镇边界,大范围数据能裁剪就裁剪,否则QGIS打开会很卡。
- 属性表里必须有乡镇名称字段。后面做专题图、挂接统计信息都要用它。
2. 核心加载操作:让Excel里的点真正落到地图上
2.1 用“添加分隔文本图层”加载经纬度点
QGIS加载带X、Y坐标的Excel表格,最稳妥的方式不是直接拖文件,而是通过菜单栏的“图层 -> 添加图层 -> 添加分隔文本图层”,也可以直接在工具栏里找到“打开数据源管理器”,切到“分隔文本”页签。
我建议提前把Excel另存为CSV格式,UTF-8编码。之所以不用.xlsx直连,是因为CSV在编码控制和字段类型识别上更稳定,尤其面对中文表头时可控性高很多。
具体操作步骤是这样:
- 在数据源管理器里选择“分隔文本”,文件选择刚才准备的CSV;
- 文件格式选“CSV(逗号分隔)”,但如果原始字段里含大量逗号,建议另存时分隔符改成分号,并在QGIS里对应选择“自定义分隔符”;
- 关键是“几何定义”区块,勾选“点坐标”,X字段选经度列,Y字段选纬度列,坐标系先选WGS84(EPSG:4326);
- 如果第一行是字段名,勾选“首行包含字段名”;
- 可以点“样本数据”预览,确认字段是否识别正确,特别是确认X、Y列没有被识别成文本;
- 点击“添加”,完成加载。
这一套下来,屏幕上就能看到一个个点,但很多人在第3步就卡住了,常见的坑是X字段下拉列表里找不到经纬度列,这是因为CSV的字段名里有特殊字符(空格、中文括号、百分号),QGIS会自动替换成下划线,不是数据丢了,而是名字变了。
2.2 坐标系设置:为什么加载后点会跑到海里
坐标加载到屏幕上了,但位置明显不对,甚至跑到海沟或者非洲去了,绝大多数情况是坐标系选错或X、Y对调。
先说一个最基础的概念:WGS84是一种地理坐标系,用经纬度表示位置,单位是度。常见的投影坐标系,比如高斯-克吕格投影,用米表示位置。而我国县级工作中提到的“平方公里”“米”这类数据,往往是在投影坐标系下量算的。Excel里的经纬度,90%的情况是WGS84经纬度,所以在导入步骤里坐标系先选EPSG:4326没毛病。
但加载完成后,如果发现点跟底图对不上,有几种排查方法:
- 打开图层面板的属性,看“图层坐标系”,如果显示的是空或者未知,说明导入时没正确指定,右键图层 -> 图层属性 -> 信息里可以查看。
- 把底图也加载进来,两者坐标系如果不同,可以用“导出 -> 另存要素类”时指定目标坐标系,QGIS会在保存时自动做坐标转换。
- 如果X字段和Y字段选反了,点位会沿一条斜线整个翻转,这时候不用重新导入,图层属性里不好直接换字段,常规做法是重新加载一遍CSV,把X、Y字段对调即可。
县域的小范围数据,直接用WGS84经纬度叠加底图,偏差一般在几米到几十米内,对销售点这种宏观分布展示完全够用。如果个别点位偏得离谱,就要单独检查原始坐标是否填错或混用了其他坐标系的数据。
2.3 加载底图并验证点位位置
点位落图后,马上叠加行政区边界,快速目测点位是否落在县域范围里。这里有个很实用的验证技巧:用QGIS自带的“地图标注”底图服务,加载一张在线影像或街道图,把点位叠加上去,目测销售点是不是都落在镇区、村落附近,而不是落在农田中央或水库里。
在线底图加载方式是在“XYZ切片”连接里添加服务地址,或者直接用快捷方式添加标准底图。这一步一是为了核对坐标准确性,二是为了出图打印时给看图人一个参照环境。
如果点位和底图有一致性偏移,比如整体往东南移了七八十米,通常是坐标系统不完全一致导致的系统偏差。县一级监管图通常不需要纠结这几十米,但如果要做精确落界,可以用几个已知控制点做平移校正,或者确认源头数据是否有保密处理过。
3. 专题制图:让销售点“说话”的关键设置
3.1 按许可类型做分类符号
点位进地图只是第一步,工作重点在专题制图。所谓专题图,就是让点的颜色、大小、形状传递数据背后的信息。
对烟花爆竹零售点来说,最常用的分级维度有:
- 许可类型:零售店、专柜、临时销售点等,用不同颜色区分;
- 核定储量:按储存箱数或药量分三级,用点大小区分;
- 有效期状态:有效、过期、即将到期,用实心和空心区分。
我推荐先做“分类”符号化,再做“分级”符号化。分类就是对“许可类型”这样的文本字段,每种值给一个独立样式。分级则是对“核定储量”这样的数值字段,按区间设置渐变色或大小渐变。
具体操作:
- 右键图层 -> 图层属性 -> 符号化;
- 顶部下拉框选择“分类”;
- 在“值”里选择“许可类型”字段;
- 点击“分类”按钮,QGIS自动枚举所有类型值;
- 手动给每种类型选颜色,比如“零售店”用深橙色、“专柜”用浅黄色、“临时”用灰色;
- 点击“应用”,图上就会按类型分色。
分完颜色后,如果发现某些类型数量特别少,只有一两个点,颜色区分度又不明显,可以考虑把这些类型合并成“其他”,图例会干净很多。方法是在分类列表里手动合并值或直接改标签。
3.2 点大小表达数量等级
分类颜色解决“是什么类型”,点大小则解决“规模有多大”。给“核定储量”字段做分级大小,能让图上最大点代表的销售点一眼识别。
做法是切换符号化方式,选择“分级”,在列里选储量字段,“模式”里选“等间距”或“四分位数”,符号大小设置成从3到10毫米渐变,并在“图例”里保留分级范围。要注意分级数量通常3到5级就够了,五个等级以上的图例密密麻麻,打印出来根本看不清。
如果类型和储量都想表达,可以把分类和分级组合起来:先按类型分色,再在符号大小上按储量字段定义。具体实现是在符号化面板里点击单个分类符号的“更改符号”,然后设置符号结构,把“简单填充”换成“几何生成器”或“基于大小”,这个操作稍复杂,但效果出来的确专业,适合做年度监管作战图。
3.3 标注与避让
点符号设置完,剩下一件事就是把零售点名称标上去。默认的标注方式是把所有名称都显示出来,但点位密集时,标签会互相压盖,图面非常乱。
QGIS里有两种常用解决方式:
- 在图层标注设置里开启“设置为固定位置”,选“上方右”或“下方右”,再配合“图例”中的避让优先级;
- 在“标注”页签里开启“基于要素”,把不重要的点标注隐藏,只显示主要点位名称。
对于县域一百多个点的数据,我个人经验是:分类图上看颜色就够了,名称标注只打开年销售量较大的重点点位,其余信息放到图例和统计表里。否则打印出来就是一团黑字。
标注字体建议直接用思源黑体或微软雅黑这类非衬线字体,字号在布局里控制在8到10磅,加微弱的白色描边,也就是“缓冲区”功能,让压在地物线上的文字还能看清。
4. 布局出图:一张能打印、能汇报的专题图
4.1 新建布局并配置地图框
地图画完,最后一步是排版出图。这一步在QGIS里叫“新建布局”,本质上就是做一个打印页面,把刚才的地图放进一个框里,再添加图例、指北针、比例尺、标题等要素。
具体操作:
- 顶部菜单“项目 -> 新建打印布局”,给它起个名字,比如“某县烟花销售点专题图”;
- 在右侧空白区域先设置页面大小,A3横向适合县域全景图,A4纵向适合局部详图;
- 点击工具栏里的“添加地图”按钮,在页面上拉出一个矩形框,地图就能显示出来;
- 地图框内部可以继续缩放平移,双击地图框后,鼠标滚轮缩放,拖动即可调整视野范围;
- 调整好后,在右侧“项目”属性里锁定地图范围,避免后续误操作破坏了视口。
这里最容易忽略的是比例尺的准确性。地图框在页面上拉多大,直接决定比例尺数字。QGIS的布局里可以添加比例尺条,它默认自动对应地图框范围,只要地图框没变形锁定,比例尺数字就是准的,不用手动算。
4.2 图例、指北针和标题
图例是专题图的灵魂。布局工具栏里点击“添加图例”,图例会自动列出地图框里所有图层的符号说明。右侧属性里可以把不需要的图层取消勾选,只保留“销售点”和“乡镇边界”两个。
图例的标题可以改成“图层说明”,图例项还可以按“只显示已见要素”来精简。这里有一个常踩的坑:图例里显示的是符号化等级范围,但范围字段名是一串英文字母或代码,打印出来别人看不懂。解决办法是在符号化的图例标签里手动改成“许可类型:零售店”“许可类型:专柜”这种可读文本。
指北针可以加一个简洁的样式,放在图幅右上角。标题建议包含行政级别和年份,比如“某某县烟花爆竹零售经营网点分布图(2025年)”,字体稍大并加粗。底边还可以加一行小字说明数据来源、坐标系说明和制图日期。
4.3 导出高清文件
布局完成后,导出图片或PDF是关键。点击“布局 -> 导出为图片”或“导出为PDF”,要求是分辦率至少300DPI,嵌入元数据可以勾选。如果做汇报用,我一般导出两份:一份PDF用于打印,一份PNG用于微信或PPT里展示。
导出前一定要检查一件事:打印预览模式是否正常。有时页面上要素位置没问题,导出来图例跑到页面外或排版错位,多半是布局页面边缘留白不够,或地图框位置越界了。把页面边缘的红色边线拉进安全边距内,再导出一次就好。
如果是打印到A3大幅面,600DPI的PNG文件可能非常大,传到手机里打不开。我更推荐PDF输出,矢量格式,缩放不失真,打印店直接能用。
5. 实操中的高频问题与排查记录
5.1 CSV导入后全是乱码
这个问题十次有八次会遇到。CSV文件是Excel保存的,默认编码可能是ANSI(GBK),而QGIS在Windows下默认按UTF-8读取,一旦检测不对,中文表头和中文内容全变成乱码。
解决办法:把CSV另存为UTF-8编码。Excel里重新另存为CSV时,选择“CSV UTF-8(逗号分隔)”格式。如果已经存在乱码文件,用记事本打开CSV,另存为时在编码下拉框里选“UTF-8”覆盖保存,也能修好。注意UTF-8分带BOM和不带BOM,QGIS对带BOM的兼容性更好,用记事本另存的UTF-8通常带BOM,反而更容易被正确识别。
5.2 点位加载后偏到境外
打开CSV加载点后,坐标值看起来正常,但点位全跑到哈萨克斯坦或者北冰洋去了,这种情况几乎可以断定是把经纬度选反了,或者是字段选错了列,选成了某个编号列。
排查方法:打开属性表,随便选几个点,查看它们的X、Y值,或者用“识别”工具点击图上错位的点,看属性里的原始经纬度值。如果经度显示成了40左右,而纬度显示成了112左右,马上回数据源管理器重新加载,把X字段和Y字段的对应关系换一下。这一步不要犹豫,换完之后再验证一次就好。
5.3 点全部挤在一个点上,或者缩成一个看不见的像素
点全部堆在一起,通常是因为X或Y字段里有个别空值、零值,QGIS把这些空值当成坐标原点(0,0)或者某个固定值,导致大量点重合在异常位置。
处理办法是在导入前数据处理阶段就把空值行剔掉,或者在QGIS里按属性筛选出坐标异常的要素再删掉。具体操作:右键图层 -> 筛选,输入““Longitude” > 100”这种筛选条件,把明显异常的坐标值排除掉。先看一眼全图最远的几个点是不是异常值比较好。
5.4 图层属性修改后符号没更新
这是新手最容易困惑的地方:在符号化面板里改了颜色和大小,点“确定”后图面却没变化。这种情况大多是因为当前图层的渲染方式不是“单符号”,而是“分类”或“分级”里的子符号改错位置。分类模式下要展开对应类别的符号,改了才有效。
另外,如果做了“基于规则”的符号化,规则顺序也会影响最终显示。QGIS从上到下匹配规则,命中了第一条就不再往下走。符号设置的优先级别搞反,否则后面的规则全被第一层通用规则挡住。
5.5 底图不显示或显示灰块
在线底图加载后出现灰色块或半天不出图,一般是网络不通或切片地址失效。换一个公共底图服务地址通常会解决。另外,某些在线地图源在部分网络环境下无法访问,可以在设置里调整“网络”超时时间,或者直接改用离线栅格底图。
如果是自己准备的乡镇边界Shapefile加载后是空的,打开属性表看要素数量是不是0,或检查一下图层文件路径里不能有中文目录和特殊符号。路径里有中文在部分历史版本的QGIS里也会有读取问题,虽然新版本已经优化,但保险起见还是改成英文或拼音目录。
6. 从出图到使用:我的一点补充经验
整套流程跑完,我不建议直接把第一版图发出去。我做这种县域专题图,习惯先打印一张A4黑白稿,拿在手里跟原始台账逐项核对几个重点点位,比如储量最大的点、位置最偏的点。屏幕上看和纸上看的视觉效果不一样,很多图面问题都是在纸上才发现。
另外,如果后续还要持续更新数据,建议把CSV文件和QGIS项目文件统一归档在一个文件夹里,数据文件命名带上日期,比如“xx县烟花销售点_20250615.csv”。这样下次数据更新时,只需要替换CSV再重新加载一次,项目文件里的图层样式和布局不会丢,直接换数据源就能快速再生一张新图。
还想再提一个经常被忽略的点:做这类监管业务图,图面上除了地图本身,最好在角落加上数据说明,包括点位总数、分类数量、有效期截止时间说明。看图的人不一定懂GIS,但这些文字能让他快速判断这张图是否最新、是否完整。
最后说句实在话,QGIS这套流程对专业GIS出身的人来说非常基础,但对非GIS专业的基层工作人员来说,却是实打实能解决日常出图需求的高频技能。销售点监管图只是其中一个典型应用,人口分布、店铺点位、隐患点位排查台账,原理完全一样。掌握Excel到QGIS的空间化流程,等于给自己增加了一项能直接落地的硬技能,值得花半天时间认真跑一遍。