免费开源GIS怎么学?GRASS GIS教程全解析(含:练习数据)
如果你正在搜索“免费开源GIS怎么学?GRASS GIS教程全解析(含:练习数据)”,大概率是想找一条不依赖商业软件授权、又能真正上手空间分析的学习路线。GRASS GIS 是一套历史悠久、功能完整的免费开源 GIS 软件,尤其适合学习栅格分析、地形分析、流域分析、矢量处理和批处理自动化。
这篇文章按 GIS研习社的实践思路来写:不只介绍 GRASS GIS 是什么,而是带你理解它的核心数据组织方式、安装后的第一套练习数据怎么用、常见分析流程怎么跑,以及新手最容易踩哪些坑。

引言:为什么免费开源GIS学习可以从 GRASS GIS 开始
很多 GIS 初学者会先接触 QGIS、ArcGIS Pro 或在线地图平台,但当学习进入栅格计算、地形因子、流域提取、批量处理和命令行自动化时,GRASS GIS 的优势会变得非常明显。
GRASS GIS 的特点是“工具多、分析能力强、适合科研和生产流程”。它不是只用来浏览地图的软件,而是一套完整的地理空间处理环境。你可以用它完成 DEM 坡度坡向计算、土地利用重分类、缓冲区分析、矢量叠加、栅格代数、时间序列栅格处理等任务。
对学生和初级 GIS 工程师来说,学习 GRASS GIS 有三个直接价值:
- 免费开源:不需要商业授权,适合课程练习、个人项目和科研复现。
- 空间分析体系完整:尤其适合掌握栅格分析、地形分析和流域分析的底层逻辑。
- 可自动化:既能用图形界面操作,也能使用命令行、Python 脚本批处理。
背景:GRASS GIS 适合解决哪些 GIS 学习问题
GRASS GIS 不是最容易上手的 GIS 软件,但它非常适合解决“我想真正理解空间分析怎么做”的问题。它的学习难点主要来自数据组织方式和工具命名规则,而不是分析能力不足。
如果你的目标属于下面几类,GRASS GIS 教程就很值得学习:
- 想用免费开源 GIS 软件完成课程实验或毕业设计。
- 想学习 DEM 分析,包括坡度、坡向、阴影、等高线和汇流分析。
- 想理解栅格数据的区域、分辨率、重采样和地图代数。
- 想批量处理 Shapefile、GeoTIFF、GeoPackage 等常见 GIS 数据。
- 想把 QGIS、Python GIS 与 GRASS GIS 结合起来使用。
与 QGIS 相比,GRASS GIS 的图形界面没有那么“办公软件化”,但分析模块更偏向严谨的数据处理流程。许多 QGIS 的 Processing 工具箱中也可以调用 GRASS GIS 算法,这说明两者并不是竞争关系,而是可以组合使用。
原理:先理解 GRASS GIS 的 Location、Mapset 和 Region
学习 GRASS GIS,最重要的是先理解三个概念:Location、Mapset 和 Region。很多新手导入数据失败、结果范围不对、栅格分析结果为空,根源都在这里。
1. Location:一个固定坐标系统的数据工作区
Location 可以理解为一个带坐标系统的 GIS 项目空间。一个 Location 只能对应一个坐标参考系统,例如 WGS 84、CGCS2000、高斯投影或 UTM 投影。
这与很多桌面 GIS 软件不同。你不能随意把不同坐标系的数据直接混在一个 GRASS GIS Location 里分析。如果数据坐标系不同,应先重投影,或者新建对应坐标系的 Location。
2. Mapset:Location 下面的子工作空间
Mapset 是 Location 内部的工作分区。你可以把它理解为项目里的子文件夹。默认常见 Mapset 是 PERMANENT,通常用于保存基础数据和坐标系统信息。
在团队或复杂项目中,可以给不同实验、不同人员或不同处理阶段建立不同 Mapset,避免数据混乱。
3. Region:控制栅格计算范围和分辨率
Region 是 GRASS GIS 中非常关键的概念。它决定当前栅格处理的空间范围和像元大小。即使数据本身没有问题,如果 Region 设置不正确,计算结果也可能只覆盖一小块区域,甚至输出空数据。
对于 GRASS GIS 教程练习,建议每次进行栅格分析前都检查 Region:
g.region -p
如果要让当前计算范围匹配某个 DEM 栅格,可以使用:
g.region raster=elevation -p
步骤:从安装到练习数据完成第一套 GRASS GIS 教程
步骤1:安装 GRASS GIS
GRASS GIS 支持 Windows、macOS 和 Linux。新手建议直接从 GRASS GIS 官方网站下载稳定版安装包,Windows 用户可以选择独立安装包,Linux 用户也可以通过系统包管理器安装。
安装完成后,启动 GRASS GIS。首次启动时,你会看到数据库目录、Location 和 Mapset 的选择界面。这里不要急着点下一步,先准备练习数据。
步骤2:准备练习数据
学习 GRASS GIS 最推荐使用官方示例数据集,例如 North Carolina sample dataset。这个数据集包含 DEM、道路、土地覆盖、行政边界、水系等数据,适合练习栅格、矢量和空间分析。
你也可以准备自己的练习数据,但建议至少包括:
- 一个 GeoTIFF 格式 DEM 数据。
- 一个 Shapefile 或 GeoPackage 格式行政区边界。
- 一个道路、水系或采样点矢量图层。
- 明确的数据坐标系统信息。
如果数据没有坐标系统,先不要直接导入分析。应先在 QGIS 或 GDAL 中确认 CRS,否则后续面积、距离、坡度和叠加结果都可能不可靠。
步骤3:创建 GRASS GIS Database、Location 和 Mapset
GRASS GIS Database 是保存全部 Location 的根目录。建议单独建立一个文件夹,例如:
D:grassdata
然后根据练习数据的坐标系统创建 Location。如果你使用官方 North Carolina 数据集,直接选择已有 Location 即可。如果使用自己的数据,可以通过“从 EPSG 代码创建 Location”或“从已有数据文件读取坐标系统创建 Location”。
常见建议如下:
- 一个项目尽量使用一个统一坐标系统。
- 经纬度数据用于显示可以,做距离、面积和缓冲区分析前建议投影到米制坐标系。
- 不要把 WGS 84 经纬度数据和投影坐标数据硬塞进同一个 Location。
步骤4:导入栅格数据
如果你有一个 DEM GeoTIFF 文件,可以在图形界面中选择导入栅格,也可以使用命令:
r.import input=dem.tif output=elevation
r.import 会在需要时进行投影转换,更适合新手。如果确认输入数据与当前 Location 坐标系统完全一致,也可以使用:
r.in.gdal input=dem.tif output=elevation
导入后检查栅格信息:
r.info map=elevation
然后设置计算区域:
g.region raster=elevation -p
步骤5:完成第一个 DEM 坡度分析
坡度分析是学习 GRASS GIS 的经典入门任务。使用 DEM 数据生成坡度图:
r.slope.aspect elevation=elevation slope=slope aspect=aspect
命令含义很直接:输入 DEM 图层 elevation,输出坡度图层 slope 和坡向图层 aspect。
完成后,可以在图层管理器中加载 slope,并调整色带。若坡度值全部异常,优先检查 DEM 的坐标单位。如果 DEM 是经纬度坐标,坡度计算可能不符合预期,建议先投影到以米为单位的坐标系。
步骤6:导入矢量数据并检查属性
矢量数据可以使用 Shapefile、GeoPackage、GeoJSON 等格式。推荐使用 GeoPackage,因为它对中文字段、多个图层和编码支持通常更稳定。
导入矢量边界:
v.import input=boundary.gpkg output=boundary
查看矢量拓扑和属性:
v.info map=boundary
查看属性表结构:
v.db.select map=boundary
GRASS GIS 的矢量数据带有拓扑结构。拓扑可以帮助检查面是否闭合、线是否相交、边界是否重复,这对高质量空间分析非常重要。
步骤7:做一次矢量缓冲区分析
假设你有道路图层 roads,要生成 100 米缓冲区,可以使用:
v.buffer input=roads output=roads_buffer distance=100
这里要特别注意:distance=100 的单位来自当前 Location 的坐标单位。如果坐标系统是投影坐标,单位通常是米;如果是经纬度坐标,单位可能是度,不适合直接解释为 100 米。
步骤8:栅格重分类练习
栅格重分类是土地适宜性评价、坡度等级划分、生态敏感性分析中常见操作。假设坡度图层为 slope,可以准备一个规则文件 slope_rules.txt:
0 thru 5 = 1
5 thru 15 = 2
15 thru 25 = 3
25 thru 90 = 4
* = NULL
执行重分类:
r.reclass input=slope output=slope_class rules=slope_rules.txt
这里的输出图层 slope_class 不是简单复制原始数据,而是根据规则建立新的分类结果。后续可以继续用于栅格叠加和评价模型。
步骤9:导出分析结果
完成分析后,通常需要把结果导出给 QGIS、ArcGIS Pro 或 WebGIS 使用。
导出栅格 GeoTIFF:
r.out.gdal input=slope output=slope.tif format=GTiff
导出矢量 GeoPackage:
v.out.ogr input=roads_buffer output=roads_buffer.gpkg format=GPKG
导出后建议在 QGIS 中打开检查,包括坐标系、范围、属性字段和渲染效果。
常见坑:学习 GRASS GIS 最容易出错的地方
坑1:把不同坐标系统的数据导入同一个 Location
这是 GRASS GIS 新手最常见的问题。Location 的坐标系统是固定的,不要把不同 CRS 的数据直接混在一起分析。若必须使用不同坐标系数据,应使用 r.import 或 v.import,让 GRASS GIS 进行必要的投影转换。
坑2:忘记设置 Region,导致栅格结果范围不对
如果输出栅格只有一小块、为空或分辨率异常,优先检查:
g.region -p
进行栅格分析前,建议用输入栅格设置 Region:
g.region raster=elevation -p
坑3:用经纬度数据直接做距离和面积分析
经纬度坐标的单位是度,不是米。做缓冲区、面积统计、距离分析时,应优先使用合适的投影坐标系。中国区域常见选择包括 CGCS2000 高斯投影、UTM 分带投影或地方工程坐标系。
坑4:只会点图形界面,不看模块帮助
GRASS GIS 的模块参数很多,图形界面只是把命令封装起来。建议每学一个工具,都查看模块说明。例如:
r.slope.aspect --help
v.buffer --help
r.reclass --help
理解参数含义比记住按钮位置更重要。
坑5:导出结果后不检查
分析结果导出后,不要直接交付。至少检查四项:
- 坐标系统是否正确。
- 空间范围是否覆盖研究区。
- 属性字段是否完整。
- NoData、NULL 或空几何是否异常。
方法比较:GRASS GIS、QGIS 和 ArcGIS Pro 怎么选
| 工具 | 适合场景 | 优势 | 注意点 |
|---|---|---|---|
| GRASS GIS | 栅格分析、地形分析、流域分析、批处理 | 免费开源,分析模块强,命令行和脚本能力好 | Location、Mapset、Region 概念需要先理解 |
| QGIS | 数据浏览、制图、常规空间处理、插件扩展 | 界面友好,插件丰富,可调用 GRASS 工具 | 复杂栅格流程仍需理解底层参数 |
| ArcGIS Pro | 商业项目、企业 GIS、制图生产、地理处理模型 | 生态完整,文档和工具链成熟 | 需要授权,部分高级工具依赖扩展模块 |
| Python GIS | 自动化、批量处理、数据科学分析 | 可结合 GeoPandas、Rasterio、GDAL、PyGRASS | 需要编程基础和环境管理能力 |
如果你是初学者,可以采用“QGIS + GRASS GIS”的组合:用 QGIS 做数据查看和制图,用 GRASS GIS 做严谨的栅格和矢量分析。等熟悉模块后,再逐步学习命令行和 Python 自动化。
检查清单:一套可复用的 GRASS GIS 学习流程
每次做 GRASS GIS 教程或练习项目时,可以按下面清单检查:
- 数据是否明确:确认练习数据包含 DEM、矢量边界、道路或水系等基本图层。
- 坐标系统是否一致:确认 Location 与主数据 CRS 匹配。
- 是否需要投影转换:不同 CRS 数据优先用
r.import和v.import。 - Region 是否设置正确:栅格分析前执行
g.region raster=输入栅格 -p。 - 单位是否合理:面积、距离、缓冲区分析优先使用米制投影坐标。
- 输出结果是否检查:检查范围、分辨率、属性表、NoData 和坐标系统。
- 命令是否记录:把关键命令保存下来,方便复现和写实验报告。
- 是否能在 QGIS 中打开:导出 GeoTIFF 或 GeoPackage 后,用 QGIS 复核显示效果。
FAQ:GRASS GIS教程常见问题
1. GRASS GIS 适合零基础学习吗?
可以学,但不建议完全零基础直接把 GRASS GIS 当作第一款地图软件。如果你还不了解图层、坐标系、栅格和矢量,建议先用 QGIS 建立基本概念,再学习 GRASS GIS 的分析流程。
2. GRASS GIS 和 QGIS 有什么关系?
QGIS 是更偏桌面制图和综合 GIS 工作的平台,GRASS GIS 是更偏空间分析和数据处理的 GIS 引擎。QGIS Processing 工具箱可以调用部分 GRASS GIS 算法,所以两者可以配合使用。
3. GRASS GIS 练习数据去哪里找?
推荐使用 GRASS GIS 官方示例数据集,例如 North Carolina sample dataset。它包含地形、土地利用、道路、水系和行政边界等数据,适合系统练习。也可以使用自然资源、遥感影像或公开 DEM 数据,但必须确认坐标系统。
4. 为什么 GRASS GIS 导入数据后看不到图层?
常见原因包括 Location 坐标系统不匹配、Region 范围没有设置到数据范围、图层没有添加到显示窗口、导入过程报错但未检查日志。建议先运行 r.info、v.info 和 g.region -p 检查。
5. 为什么 GRASS GIS 栅格分析结果为空?
优先检查 Region。GRASS GIS 的栅格计算受当前 Region 控制,如果范围与输入栅格不重叠,结果可能为空。可以用 g.region raster=输入栅格 -p 重设计算范围。
6. GRASS GIS 能不能用 Python 调用?
可以。GRASS GIS 提供 Python 接口,也可以通过命令行在脚本中调用模块。新手建议先熟悉图形界面和基础命令,再学习 Python 自动化,否则容易同时被 GIS 概念和编程环境卡住。
7. GRASS GIS 适合做 WebGIS 数据处理吗?
适合做前处理,例如栅格重采样、矢量清洗、缓冲区分析、栅格分类、数据裁剪等。但最终发布到 WebGIS 时,通常还需要转换为 GeoJSON、矢量瓦片、COG、MBTiles 或 PostGIS 数据服务。
结论:免费开源GIS学习要从可复现流程开始
学习 GRASS GIS 的关键不是记住每个按钮,而是建立一套可复现的空间分析流程:确认坐标系统,创建正确的 Location,导入练习数据,设置 Region,运行分析模块,检查结果并导出通用格式。
如果你想系统学习免费开源 GIS,建议把 GRASS GIS 与 QGIS、GDAL 和 Python GIS 结合起来。QGIS 负责可视化和制图,GRASS GIS 负责严谨的空间分析,GDAL 和 Python 负责批量自动化。这样不仅能完成课程练习,也能逐步过渡到真实 GIS 项目。
对于“免费开源GIS怎么学?GRASS GIS教程全解析(含:练习数据)”这个问题,最实用的答案就是:先用一套标准练习数据跑通 DEM 分析、矢量缓冲、栅格重分类和结果导出,再逐步把同样流程迁移到自己的研究区数据中。