GRASS GIS教程难上手?新手从安装到出图全流程解析(附:常用命令速查表)

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

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

GRASS GIS教程 GRASS GIS安装到出图流程图
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。新手建议从官方网站下载安装包,不建议一开始就自己编译源码。

  1. 访问 GRASS GIS 官方网站。
  2. 根据系统选择 Windows、macOS 或 Linux 版本。
  3. Windows 用户按安装向导完成安装。
  4. macOS 用户注意系统安全设置,首次打开时可能需要允许应用运行。
  5. Linux 用户可使用发行版软件源或官方推荐方式安装。

安装完成后,打开 GRASS GIS。你可能会看到一个启动界面,要求选择或创建 Location 和 Mapset。不要急着导入数据,先确认你的练习数据坐标系。

步骤二:准备一组适合练习的数据

为了降低入门难度,建议准备三类数据:

  • 一个研究区边界矢量,例如 study_area.shp 或 study_area.gpkg。
  • 一个道路、河流或行政区矢量,例如 roads.shp。
  • 一个 DEM 栅格,例如 dem.tif。

新手练习时,最好让这些数据使用相同坐标系。如果来源不同,建议先在 QGIS 中检查图层坐标系,并在必要时统一投影。

步骤三:创建 Location 和 Mapset

创建 Location 时,最稳妥的方式是从已有数据的坐标系创建。例如使用 DEM 或研究区边界作为坐标系来源。这样可以减少 EPSG 代码选错的问题。

  1. 在启动界面选择创建新的 Location。
  2. 选择“从已有地理数据读取坐标系统”或类似选项。
  3. 选择你的 DEM 或研究区边界文件。
  4. 设置 Location 名称,例如 grass_demo。
  5. 使用默认 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 做最终版式。

基本显示思路如下:

  1. 添加 DEM 或坡度栅格作为底图。
  2. 叠加研究区边界。
  3. 叠加道路缓冲区或分析结果。
  4. 检查图层范围、颜色和透明度。
  5. 导出截图或将数据导出到 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 -pg.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 在空间分析中的优势,也能避免一开始就陷入复杂参数和软件界面细节。