GRASS GIS教程难上手?新手从安装到出图全流程解析(附:常用命令速查表)
如果你正在搜索“GRASS GIS教程难上手?新手从安装到出图全流程解析(附:常用命令速查表)”,大概率不是因为 GRASS GIS 功能不够,而是第一次打开软件时被 Location、Mapset、Region、命令行和模块参数劝退了。本文按“安装—建工程—导入数据—设置区域—空间分析—制图导出—命令速查”的顺序,带你跑通一条适合新手复现的 GRASS GIS 入门流程。

引言:为什么很多新手觉得 GRASS GIS 教程难上手
GRASS GIS 是一套历史很久、功能很强的开源 GIS 软件,尤其擅长栅格分析、地形分析、水文分析、遥感处理和批量地理处理。但它和 QGIS、ArcGIS Pro 的使用逻辑不完全一样,新手常见的第一道门槛不是“不会点哪个按钮”,而是不理解它为什么要先创建 Location 和 Mapset。
在 QGIS 中,你可以直接把 Shapefile、GeoPackage、GeoTIFF 拖进项目;在 GRASS GIS 中,数据通常需要导入到当前工作环境中,并且计算范围由 Region 控制。如果没有先理解这些概念,后面执行缓冲区、裁剪、坡度、重分类等工具时,很容易出现结果为空、范围不对、分辨率异常、投影不匹配等问题。
本文的目标不是把 GRASS GIS 所有功能讲完,而是帮助 GIS 学生、初级 GIS 工程师和开源 GIS 用户完成一条可复现的入门路线:从安装软件,到导入数据,再到执行一次空间分析,最后输出一张地图成果。
背景:GRASS GIS 适合解决哪些 GIS 问题
GRASS GIS 不是一个只用于看图的软件。它更像是一个完整的地理处理环境,内置大量模块,常用模块名称通常以字母前缀开头:
- g.:通用管理模块,例如查看区域、列出数据、删除数据。
- v.:矢量处理模块,例如导入矢量、缓冲区、叠加分析。
- r.:栅格处理模块,例如坡度、重分类、栅格计算。
- i.:影像处理模块,例如遥感影像分组、分类和变换。
- d.:显示模块,例如显示矢量、栅格和图层。
如果你的工作主要是地图排版和交互查看,QGIS 可能更直观;如果你的工作涉及大量栅格计算、水文分析、批处理和可重复建模,GRASS GIS 会非常有优势。
原理:先理解 Location、Mapset 和 Region
学习 GRASS GIS教程 时,建议先把三个核心概念弄清楚:Location、Mapset 和 Region。它们决定了你的数据能否正确导入、分析范围是否正确、输出结果是否可信。
Location:一个坐标系统一致的工作空间
Location 可以理解为一个具有固定坐标参考系统的 GIS 工作空间。一个 Location 内的数据应使用同一个坐标系。例如你创建了一个 EPSG:4547 的 Location,就应把该投影下的数据放在这个 Location 中处理。
如果你把 WGS84 经纬度数据、CGCS2000 高斯投影数据和 Web Mercator 数据混在同一个 Location 中,后续面积、距离、缓冲区和栅格分析就容易出错。因此,新手做 GRASS GIS安装 后的第一个练习,最好使用一组坐标系明确的数据。
Mapset:同一个 Location 下的工作分区
Mapset 是 Location 下面的子工作区。默认常见 Mapset 名称是 PERMANENT。你可以把它理解为同一坐标系统下的不同项目分支或用户工作目录。
例如,一个团队可以在同一个 Location 中建立多个 Mapset:一个用于原始数据,一个用于水文分析,一个用于制图成果。新手阶段可以先使用默认 Mapset,等熟悉以后再拆分管理。
Region:当前计算范围和分辨率
Region 是 GRASS GIS 中非常关键的概念。它控制当前分析的空间范围和栅格分辨率。很多新手遇到“结果只有一小块”“栅格输出为空”“计算特别慢”,往往不是工具参数错了,而是 Region 设置不合适。
常用命令如下:
g.region -p
这条命令用于查看当前 Region 设置,包括 north、south、east、west、rows、cols 和分辨率。
如果要让当前 Region 与某个栅格一致,可以使用:
g.region raster=elevation -p
如果要让 Region 与某个矢量范围接近,可以使用:
g.region vector=study_area -p
步骤:从 GRASS GIS安装 到出图的完整流程
步骤一:下载并安装 GRASS GIS
GRASS GIS 支持 Windows、macOS 和 Linux。新手建议从官方网站下载安装包,不建议一开始就自己编译源码。
- 访问 GRASS GIS 官方网站。
- 根据系统选择 Windows、macOS 或 Linux 版本。
- Windows 用户按安装向导完成安装。
- macOS 用户注意系统安全设置,首次打开时可能需要允许应用运行。
- Linux 用户可使用发行版软件源或官方推荐方式安装。
安装完成后,打开 GRASS GIS。你可能会看到一个启动界面,要求选择或创建 Location 和 Mapset。不要急着导入数据,先确认你的练习数据坐标系。
步骤二:准备一组适合练习的数据
为了降低入门难度,建议准备三类数据:
- 一个研究区边界矢量,例如 study_area.shp 或 study_area.gpkg。
- 一个道路、河流或行政区矢量,例如 roads.shp。
- 一个 DEM 栅格,例如 dem.tif。
新手练习时,最好让这些数据使用相同坐标系。如果来源不同,建议先在 QGIS 中检查图层坐标系,并在必要时统一投影。
步骤三:创建 Location 和 Mapset
创建 Location 时,最稳妥的方式是从已有数据的坐标系创建。例如使用 DEM 或研究区边界作为坐标系来源。这样可以减少 EPSG 代码选错的问题。
- 在启动界面选择创建新的 Location。
- 选择“从已有地理数据读取坐标系统”或类似选项。
- 选择你的 DEM 或研究区边界文件。
- 设置 Location 名称,例如 grass_demo。
- 使用默认 Mapset,或新建一个名为 work 的 Mapset。
进入主界面后,可以在命令控制台中输入:
g.proj -p
该命令用于查看当前 Location 的投影信息。确认投影没有问题后,再继续导入数据。
步骤四:导入矢量数据
GRASS GIS 对外部矢量数据通常使用导入模块。常见命令是 v.import 或 v.in.ogr。新手优先使用 v.import,因为它在需要时可以处理投影转换。
v.import input=/path/to/study_area.gpkg output=study_area
如果是 Shapefile:
v.import input=/path/to/roads.shp output=roads
导入后,可以列出当前 Mapset 中的矢量数据:
g.list type=vector
也可以查看某个矢量图层的信息:
v.info map=study_area
步骤五:导入栅格数据
导入 DEM、土地利用、遥感指数等栅格时,常用 r.import 或 r.in.gdal。新手仍建议优先使用 r.import。
r.import input=/path/to/dem.tif output=dem
导入完成后,查看栅格信息:
r.info map=dem
如果输出中显示的范围、分辨率、坐标系统与预期一致,说明导入基本正常。
步骤六:设置 Region,避免分析范围错误
在执行栅格分析前,建议先将 Region 对齐到 DEM:
g.region raster=dem -p
如果你只想分析研究区范围,可以先根据研究区设置 Region,再结合掩膜或裁剪处理:
g.region vector=study_area -p
注意,Region 只控制计算范围,不等于自动裁剪数据。如果你需要严格按研究区边界裁剪,还需要使用对应的裁剪、掩膜或地图代数方法。
步骤七:执行一次典型栅格分析:由 DEM 生成坡度
GRASS GIS 在地形分析方面很常用。以 DEM 生成坡度为例,可以使用 r.slope.aspect:
r.slope.aspect elevation=dem slope=slope aspect=aspect
执行后,查看输出栅格:
g.list type=raster
你应该能看到 slope 和 aspect 两个结果。再查看坡度栅格信息:
r.info map=slope
如果坡度结果为空,优先检查三件事:DEM 是否成功导入、Region 是否覆盖 DEM、DEM 是否存在有效高程值。
步骤八:执行一次典型矢量分析:道路缓冲区
如果你想练习矢量空间分析,可以对 roads 图层生成缓冲区:
v.buffer input=roads output=roads_buffer distance=500
这里的 distance 单位取决于当前 Location 的坐标单位。如果你的数据是投影坐标,单位通常是米;如果是经纬度坐标,直接做 500 的缓冲区就非常危险,因为单位不是米。
生成后查看结果:
v.info map=roads_buffer
步骤九:将结果导出为常见 GIS 格式
分析完成后,通常需要把成果导出给 QGIS、ArcGIS Pro 或其他同事使用。导出矢量可以使用 v.out.ogr:
v.out.ogr input=roads_buffer output=/path/to/roads_buffer.gpkg format=GPKG
导出栅格可以使用 r.out.gdal:
r.out.gdal input=slope output=/path/to/slope.tif format=GTiff
建议优先导出为 GeoPackage 和 GeoTIFF。GeoPackage 适合矢量成果,GeoTIFF 适合栅格成果,兼容性较好。
步骤十:在 GRASS GIS 中完成简单出图
GRASS GIS 可以显示图层并导出地图,但如果你的目标是正式制图排版,通常建议把结果导出到 QGIS 中完成布局。新手阶段可以先在 GRASS GIS 中确认结果是否正确,再用 QGIS 做最终版式。
基本显示思路如下:
- 添加 DEM 或坡度栅格作为底图。
- 叠加研究区边界。
- 叠加道路缓冲区或分析结果。
- 检查图层范围、颜色和透明度。
- 导出截图或将数据导出到 QGIS 进行制图。
这样做的好处是:GRASS GIS 负责分析,QGIS 负责排版,学习曲线会更平滑。
常见坑:GRASS GIS 新手最容易踩的 8 个问题
1. Location 坐标系建错
如果 Location 坐标系建错,后面导入数据、计算面积、缓冲区和叠加分析都会受影响。新手最稳妥的方式是用已有的可靠数据创建 Location,而不是凭记忆手动选择 EPSG 代码。
2. 忘记设置 Region
GRASS GIS 的 Region 会影响栅格分析范围和分辨率。如果你发现输出结果范围不对,先运行:
g.region -p
确认当前范围是否覆盖输入数据。
3. 把经纬度数据直接拿来做距离和面积
如果 Location 使用的是经纬度坐标,距离和面积计算要特别谨慎。做缓冲区、面积统计、距离分析时,建议使用适合研究区的投影坐标系。
4. 以为 Region 会自动裁剪矢量
Region 对栅格计算影响明显,但它不等于矢量裁剪工具。要裁剪矢量,仍需要使用矢量叠加或选择工具。
5. 外部文件路径包含中文或特殊字符
在部分环境中,中文路径、空格、特殊符号可能导致导入失败。新手练习建议使用简短英文路径,例如:
D:/gis_demo/data/dem.tif
6. Shapefile 字段名被截断
Shapefile 对字段名长度和编码支持有限。如果你发现属性字段异常,建议改用 GeoPackage。
7. 栅格分辨率设置过细导致计算很慢
Region 的分辨率越细,行列数越大,计算量越大。执行大型 DEM 分析前,先检查 rows、cols 和分辨率是否合理。
8. 只学界面,不学命令
GRASS GIS 的优势之一是命令可复现。即使你主要使用图形界面,也建议记录常用命令。这样以后做批处理、写脚本和复现实验会更容易。
方法比较:GRASS GIS、QGIS 和 ArcGIS Pro 怎么分工
| 工具 | 适合场景 | 新手难度 | 建议用法 |
|---|---|---|---|
| GRASS GIS | 栅格分析、地形分析、水文分析、批处理、可重复建模 | 较高 | 用于核心空间分析和自动化处理 |
| QGIS | 数据查看、编辑、制图、插件扩展、常规空间处理 | 中等 | 用于数据检查、成果制图和日常 GIS 工作 |
| ArcGIS Pro | 企业 GIS、专业制图、地理处理模型、三维与高级分析 | 中等到较高 | 用于商业项目、标准化生产和企业环境 |
对新手来说,推荐的学习策略不是在三个软件之间反复横跳,而是明确分工:用 QGIS 检查和制图,用 GRASS GIS 练习可复现分析,用 ArcGIS Pro 对照理解商业 GIS 工作流。
检查清单:运行 GRASS GIS 分析前先核对这些项
- 当前 Location 的坐标系是否正确。
- 输入数据是否与 Location 坐标系一致,或已经正确导入转换。
- 当前 Mapset 是否是你准备写入结果的工作区。
- Region 是否覆盖输入数据。
- Region 分辨率是否适合当前分析。
- 输入矢量是否有拓扑问题或空几何。
- 输入栅格是否存在 NoData 异常。
- 输出名称是否与已有图层冲突。
- 外部路径是否可写,是否避免中文和特殊字符。
- 结果是否用 QGIS 或其他工具进行交叉检查。
GRASS GIS 常用命令速查表
| 任务 | 命令示例 | 说明 |
|---|---|---|
| 查看投影 | g.proj -p |
查看当前 Location 坐标系统 |
| 查看 Region | g.region -p |
显示当前计算范围和分辨率 |
| 按栅格设置 Region | g.region raster=dem -p |
让计算范围和分辨率对齐 DEM |
| 列出矢量 | g.list type=vector |
查看当前 Mapset 中的矢量数据 |
| 列出栅格 | g.list type=raster |
查看当前 Mapset 中的栅格数据 |
| 导入矢量 | v.import input=roads.shp output=roads |
导入 Shapefile、GeoPackage 等矢量数据 |
| 导入栅格 | r.import input=dem.tif output=dem |
导入 GeoTIFF 等栅格数据 |
| 查看矢量信息 | v.info map=roads |
检查矢量范围、要素数量和属性信息 |
| 查看栅格信息 | r.info map=dem |
检查栅格范围、分辨率和数值信息 |
| 生成缓冲区 | v.buffer input=roads output=roads_buffer distance=500 |
对矢量线或面生成缓冲区 |
| 生成坡度 | r.slope.aspect elevation=dem slope=slope |
由 DEM 计算坡度 |
| 导出矢量 | v.out.ogr input=roads_buffer output=roads_buffer.gpkg format=GPKG |
导出为 GeoPackage 等格式 |
| 导出栅格 | r.out.gdal input=slope output=slope.tif format=GTiff |
导出为 GeoTIFF |
FAQ:GRASS GIS 入门常见问题
GRASS GIS教程 应该先学界面还是先学命令?
建议先用界面理解流程,再用命令巩固。GRASS GIS 的很多界面操作本质上会调用对应模块,学会命令后,你更容易复现步骤、排查错误和做批处理。
GRASS GIS安装 后打不开或启动失败怎么办?
先检查安装包是否来自官方渠道,再确认系统权限、安装路径和用户目录是否正常。Windows 用户尽量避免把练习数据放在复杂中文路径下。macOS 用户如果首次启动被拦截,需要在系统安全设置中允许应用运行。
GRASS GIS 和 QGIS 是什么关系?
它们都是开源 GIS 工具,但定位不同。QGIS 更适合可视化、编辑和制图,GRASS GIS 更偏向严谨的地理处理和分析。QGIS 中也可以调用部分 GRASS GIS 处理工具,因此二者经常配合使用。
为什么我的 GRASS GIS 分析结果范围不对?
优先检查 Region。运行 g.region -p 查看当前范围和分辨率,再用 g.region raster=dem -p 或 g.region vector=study_area -p 对齐输入数据。很多范围问题都和 Region 设置有关。
GRASS GIS 可以直接打开 Shapefile 和 GeoTIFF 吗?
可以读取和导入,但它通常不是简单“打开外部文件”后直接分析,而是把数据导入到当前 Location 和 Mapset 中。矢量常用 v.import,栅格常用 r.import。
新手适合用 GRASS GIS 做正式项目吗?
可以,但建议先用小数据跑通完整流程,并把每一步命令记录下来。正式项目中要特别注意坐标系、Region、分辨率、NoData、输出格式和成果复核。
结论:把 GRASS GIS 当作可复现分析工具来学
GRASS GIS 难上手,主要难在工作空间逻辑和 Region 机制,而不是工具本身不可用。只要你先理解 Location、Mapset 和 Region,再按“导入数据—设置范围—执行模块—检查结果—导出成果”的流程练习,入门会顺畅很多。
对新手来说,最实用的学习路线是:用一组小数据完成一次完整流程,用命令速查表记录常用模块,再把成果导出到 QGIS 中检查和制图。这样既能发挥 GRASS GIS 在空间分析中的优势,也能避免一开始就陷入复杂参数和软件界面细节。