GIS技能大赛第九届上午数据如何处理?附:GIS研习社实战复盘与代码包!
GIS技能大赛第九届上午数据如何处理?附:GIS研习社实战复盘与代码包!这篇复盘面向正在备赛或复盘 GIS 技能大赛的同学,重点讲清楚上午场数据处理的完整思路:拿到数据后先检查什么、如何统一坐标系、怎样清洗属性和几何、空间分析结果如何核验,以及哪些步骤适合用 QGIS、ArcGIS Pro 或 Python 自动化完成。

引言:上午场数据处理不要一上来就做分析
很多同学在 GIS 技能大赛上午场最容易犯的错误,是看到题目后立刻打开工具箱做叠加、缓冲区、裁剪和统计。这样做看似很快,实际风险很高:坐标系不一致、字段类型错误、几何无效、范围不匹配,都会导致后面的分析结果偏差。
更稳妥的做法是先把上午场数据当作一个“待质检的数据包”处理。你需要先判断数据能不能直接用,再决定用 QGIS、ArcGIS Pro、ArcPy 或 Python GIS 脚本完成批处理。
本文不替代比赛原题,也不复刻任何受限题库内容,而是按照 GIS研习社的实战复盘方法,把第九届上午数据处理中常见的工作流拆成可复用模板。你可以把它用于赛前训练、赛后复盘,也可以改造成自己的代码包。
背景:第九届上午数据处理通常考什么
GIS 技能大赛上午场一般更偏向基础数据处理与空间分析能力。与下午场综合制图或应用开发相比,上午场更考验你能否在有限时间内完成一套可靠的数据加工流程。
常见任务可以归纳为以下几类:
- 数据检查:查看图层数量、几何类型、坐标系、字段结构、编码和数据范围。
- 坐标系统一:把不同来源的矢量或栅格数据统一到题目要求的投影坐标系。
- 几何修复:处理自相交、多部件异常、空几何、重复要素等问题。
- 空间处理:执行裁剪、相交、融合、缓冲区、擦除、空间连接等分析。
- 属性统计:按行政区、类别、等级或空间范围汇总面积、长度、数量等指标。
- 结果输出:按题目要求导出 Shapefile、GeoPackage、Excel、地图布局或说明文档。
从备赛角度看,第九届 GIS 技能大赛上午数据处理的核心不是“会不会点某个工具”,而是你能否建立稳定的处理顺序,并能解释每一步为什么这么做。
原理:为什么要先做数据质检再做空间分析
GIS 数据处理的结果是否可信,首先取决于输入数据是否一致。所谓一致,至少包括三层含义:空间参考一致、几何状态一致、属性语义一致。
1. 空间参考一致
空间参考包括坐标系、投影、单位和基准面。如果一个图层是经纬度坐标,另一个图层是米制投影坐标,直接计算面积或缓冲距离就会出错。GIS 技能大赛中如果题目要求面积单位为平方米或平方千米,通常应优先使用合适的投影坐标系。
2. 几何状态一致
几何无效会影响相交、裁剪、融合等工具。比如面要素存在自相交,可能导致叠加分析失败;线要素存在碎线,可能影响长度统计;点要素坐标为空,则会在空间连接中丢失。
3. 属性语义一致
字段名看起来一样,不代表字段含义和类型一致。例如一个图层的行政区代码是文本型,另一个是整型,直接连接可能匹配不上。面积字段如果是历史字段,也不能默认代表当前几何计算结果。
因此,上午场数据处理的推荐顺序是:先质检,再标准化,再分析,最后核验。这个顺序可以减少返工,也方便你在赛后复盘时定位错误。
步骤:GIS技能大赛第九届上午数据处理实战流程
步骤一:建立工作目录和备份规则
拿到数据后,先不要直接修改原始文件。建议建立以下目录结构:
project/
00_raw/ 原始数据,只读保存
01_check/ 数据检查结果
02_process/ 中间处理数据
03_output/ 最终提交成果
04_map/ 制图工程与导出图片
scripts/ Python或ArcPy脚本
docs/ 处理说明与记录
比赛中时间紧,但目录规范可以明显降低误删、覆盖和找不到成果的风险。所有中间数据建议带上步骤编号,例如 02_clip_study_area.gpkg、03_intersect_result.gpkg。
步骤二:检查图层、坐标系和范围
在 QGIS 中可以右键图层查看属性;在 ArcGIS Pro 中可以查看图层属性的源信息。重点检查:
- 图层几何类型是点、线、面,还是多部件要素。
- 坐标系是否已定义,是否与题目要求一致。
- 图层范围是否落在正确区域,是否存在明显偏移。
- 字段是否有乱码、空值、异常编码或重复名称。
- 数据是否存在缺失图层或打不开的文件。
如果使用 Python,可以用 GeoPandas 快速输出基础信息:
import geopandas as gpd
from pathlib import Path
data_dir = Path("00_raw")
for shp in data_dir.glob("*.shp"):
gdf = gpd.read_file(shp)
print("文件:", shp.name)
print("几何类型:", gdf.geom_type.unique())
print("坐标系:", gdf.crs)
print("范围:", gdf.total_bounds)
print("字段:", list(gdf.columns))
print("要素数:", len(gdf))
print("-" * 40)
这段代码适合赛前训练时整理数据包信息。正式比赛时,如果环境允许,也可以快速生成检查日志。
步骤三:统一坐标系,不要只“定义投影”
坐标系问题是 GIS 技能大赛上午数据处理的高频失分点。这里要区分两个概念:
- 定义投影:给没有坐标系标签的数据补充正确坐标系,不改变坐标值。
- 投影转换:把数据从一个坐标系转换到另一个坐标系,会改变坐标值。
如果数据本身已经有正确坐标系,但与题目要求不同,应使用投影转换。如果数据没有坐标系,但你能根据题目说明或坐标范围确认其真实坐标系,才使用定义投影。
在 QGIS 中,可以使用“另存为”并选择目标 CRS;在 ArcGIS Pro 中,可以使用“投影”工具。统一坐标系后,建议检查图层是否仍然与底图或研究区边界重合。
步骤四:修复几何并清理无效要素
空间叠加之前,建议先做几何修复。QGIS 可使用“修复几何图形”,ArcGIS Pro 可使用“Repair Geometry”。修复后再检查是否存在空几何和面积为 0 的面要素。
import geopandas as gpd
gdf = gpd.read_file("02_process/input_projected.gpkg")
gdf = gdf[gdf.geometry.notnull()]
gdf = gdf[~gdf.geometry.is_empty]
gdf["is_valid"] = gdf.geometry.is_valid
invalid = gdf[~gdf["is_valid"]]
print("无效几何数量:", len(invalid))
gdf["geometry"] = gdf.geometry.buffer(0)
gdf = gdf[gdf.geometry.is_valid]
gdf.to_file("02_process/input_geometry_fixed.gpkg", driver="GPKG")
buffer(0) 是常见的面几何修复技巧,但不是万能方法。对于复杂自相交、多环面或拓扑关系严格的数据,仍应优先使用专业 GIS 软件的修复工具并人工抽查。
步骤五:按研究区裁剪,缩小处理范围
上午场数据量不一定很大,但不建议在全域数据上直接做复杂叠加。先用研究区边界裁剪,可以减少后续工具运行时间,也能避免统计到研究区外的数据。
典型流程如下:
- 确认研究区边界是面要素,且坐标系已统一。
- 使用裁剪工具处理道路、用地、河流、兴趣点等图层。
- 裁剪后检查要素数量和空间范围。
- 对线和面数据重新计算长度、面积字段。
如果题目要求“落在研究区内”的点要素,应使用按位置选择或空间连接;如果要求“与研究区相交”的线面要素,应注意边界处的切割结果是否符合统计口径。
步骤六:执行核心空间分析
不同题目会有不同分析任务,但上午场常见核心分析可以抽象为以下组合:
- 缓冲区分析:例如统计道路一定距离范围内的用地或设施。
- 相交分析:例如计算行政区内不同类型用地面积。
- 空间连接:例如给点要素挂接所在街道、网格或分区信息。
- 融合统计:例如按类别合并图斑并统计面积。
- 栅格重分类:例如把高程、坡度或适宜性指数分级。
以“按分区统计地类面积”为例,推荐处理逻辑是:
- 统一分区图层和地类图层坐标系。
- 修复两个图层的几何。
- 用分区边界裁剪地类图层。
- 执行相交分析,得到“分区 + 地类”的叠加结果。
- 新增面积字段,按投影坐标系计算面积。
- 按分区编号和地类字段汇总面积。
- 导出统计表,并抽查汇总面积是否接近分区面积。
步骤七:字段整理与面积、长度重新计算
很多同学会直接使用原数据中的 AREA、Shape_Area 或 Length 字段。这里要特别小心:只要做过裁剪、相交、投影转换或几何修复,原有面积和长度字段就可能不再准确。
建议在最终统计前新增字段,例如:
area_m2:平方米面积。area_km2:平方千米面积。len_m:米制长度。ratio:占比。
如果使用 GeoPandas,面积计算示例如下:
import geopandas as gpd
gdf = gpd.read_file("02_process/intersect_result.gpkg")
if gdf.crs is None:
raise ValueError("数据缺少坐标系,不能直接计算面积")
gdf["area_m2"] = gdf.geometry.area
gdf["area_km2"] = gdf["area_m2"] / 1_000_000
summary = (
gdf.groupby(["zone_id", "landuse"], as_index=False)["area_m2"]
.sum()
)
summary.to_csv("03_output/zone_landuse_area.csv", index=False, encoding="utf-8-sig")
前提是数据已经处于米制投影坐标系。如果仍是经纬度坐标,geometry.area 的结果不是平方米,不能作为比赛统计结果提交。
步骤八:结果核验与提交整理
最终提交前至少做三类核验:
- 空间核验:把最终成果叠加到研究区边界上,检查是否有偏移、漏裁、越界。
- 属性核验:检查关键字段是否为空,分类值是否与题目一致。
- 统计核验:检查面积、长度、数量是否在合理范围内,汇总值是否能解释。
如果题目要求提交多个文件,建议用统一命名方式,例如:
03_output/
result_vector.gpkg
result_statistics.xlsx
result_map.pdf
processing_note.txt
处理说明可以简短记录数据来源、坐标系、主要工具、统计口径和注意事项。这对复盘尤其有帮助。
常见坑:第九届上午数据处理容易出错的地方
坑一:把坐标系定义当成投影转换
如果数据坐标值本来是经纬度,却被错误定义为投影坐标系,图层会严重偏移。反过来,如果投影坐标被错误定义为经纬度,也会无法正常叠加。判断方法是查看坐标范围:经纬度通常是类似 100、30 这样的数值,投影坐标通常是几十万或几百万。
坑二:在经纬度坐标下计算面积
经纬度单位是度,不是米。直接计算面积会得到“平方度”,没有实际面积意义。比赛统计面积时,应先投影到合适的平面坐标系,再计算平方米或平方千米。
坑三:相交分析后没有重新计算面积
相交会切碎面要素,原面积字段不会自动代表新几何面积。只要几何发生变化,就要重新计算面积或长度。
坑四:字段类型不一致导致连接失败
行政区代码、网格编号、地类编码等字段经常因为文本型和数值型混用而无法匹配。连接前应统一字段类型,并检查前导零是否被 Excel 吃掉。
坑五:只看工具运行成功,不看结果是否合理
GIS 工具运行成功只能说明过程没有报错,不代表结果正确。必须用地图叠加、统计汇总和抽样检查验证结果。
方法比较:QGIS、ArcGIS Pro、Python 代码包怎么选
| 方法 | 适合场景 | 优势 | 注意事项 |
|---|---|---|---|
| QGIS | 赛前练习、开源环境、快速检查数据 | 免费、工具丰富、GeoPackage 支持好 | 不同版本工具名称和参数可能略有差异 |
| ArcGIS Pro | 比赛指定 Esri 环境、标准地理处理流程 | 工具链成熟、制图和布局能力强 | 注意许可、工程路径和地理数据库写入权限 |
| ArcPy | 需要批量处理、重复运行、统一输出 | 与 ArcGIS Pro 工具箱衔接紧密 | 脚本依赖 ArcGIS Pro Python 环境 |
| GeoPandas | 属性统计、批量检查、轻量矢量处理 | 代码清晰,便于复盘和自动化 | 复杂拓扑处理能力不如专业 GIS 工具稳定 |
| GDAL/OGR | 格式转换、坐标转换、大批量数据处理 | 性能和格式支持强 | 命令参数较多,初学者需要提前练熟 |
如果是正式比赛,建议不要临场切换不熟悉的软件。最稳妥的组合是:用 QGIS 或 ArcGIS Pro 做可视化检查和关键空间处理,用 Python 脚本完成重复统计和成果整理。
检查清单:上午场交卷前必须确认这些点
- 原始数据是否完整备份,是否没有直接覆盖。
- 所有参与分析的图层是否使用统一坐标系。
- 面积、长度统计是否基于投影坐标系。
- 裁剪、相交、缓冲区之后是否重新计算几何字段。
- 最终结果是否限制在题目要求的研究区范围内。
- 字段名称、字段类型、分类编码是否符合题目要求。
- 连接表是否存在未匹配记录。
- 统计表总量是否与地图成果基本一致。
- 输出文件是否能在另一台电脑或新工程中正常打开。
- 提交文件命名是否清楚,是否包含题目要求的所有成果。
GIS研习社的复盘建议:比赛中不要追求“步骤最多”,而要追求“每一步都有依据、每个结果能验证”。上午场最容易拉开差距的不是工具数量,而是数据质量控制。
FAQ:第九届GIS技能大赛上午数据处理常见问题
1. GIS技能大赛上午数据处理一定要写代码吗?
不一定。QGIS 和 ArcGIS Pro 的图形界面足以完成大部分处理任务。但代码可以提升重复统计、批量检查和复盘效率。建议备赛时准备常用脚本模板,正式比赛时根据环境决定是否使用。
2. 第九届上午数据如果出现坐标偏移,应该先检查什么?
先检查图层坐标系是否已定义,再检查是否需要投影转换。不要直接拖动图层或手工改坐标值。还要确认底图坐标系、工程坐标系和数据坐标系之间是否存在显示转换。
3. 面积统计结果和参考答案差很多,常见原因是什么?
常见原因包括在经纬度坐标下计算面积、相交后没有重新计算面积、统计范围没有按研究区裁剪、地类字段分类错误、重复要素没有清理、单位换算错误等。
4. Shapefile 和 GeoPackage 哪个更适合比赛过程数据?
如果题目没有强制格式,GeoPackage 更适合保存中间过程数据,因为它支持较长字段名、编码更稳定,也能把多个图层放在一个文件中。若最终要求提交 Shapefile,则最后一步再转换并检查字段截断问题。
5. GIS研习社代码包应该包含哪些脚本?
建议至少包含数据检查脚本、坐标系检查脚本、面积统计脚本、字段空值检查脚本和成果导出脚本。代码包不需要复杂,但要能复用、能修改、能记录处理过程。
6. 比赛中工具报错,应该怎么快速定位?
先看输入数据是否为空、几何是否有效、坐标系是否一致、输出路径是否有权限、字段名是否包含特殊字符。再把大数据裁剪成小范围样本测试。如果小样本能运行,说明可能是数据量、异常几何或个别要素导致的问题。
结论:把上午场当成标准化数据工程来做
第九届 GIS 技能大赛上午数据处理的关键,不是记住某一个工具按钮,而是形成稳定的数据工程思维:先检查,后统一;先修复,后分析;先计算,后核验;先保存过程,再整理成果。
对于 GIS 学生和初级工程师来说,这套流程同样适用于日常项目中的国土空间、城市规划、生态评价、设施选址和 WebGIS 数据预处理。只要你能把坐标系、几何质量、属性字段和统计口径控制住,GIS 技能大赛上午场的大多数数据处理问题都会变得可拆解、可验证、可复盘。
建议把本文流程整理成自己的赛前模板,并结合 QGIS、ArcGIS Pro、ArcPy 或 GeoPandas 准备一套轻量代码包。真正上场时,你需要的不是临时搜索工具,而是一套已经练熟的数据处理路线。