GRASS GIS教程自学太难?从安装到空间分析,这(附:常用命令速查表)

ArcPy
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

引言:如果你正在搜索“GRASS GIS教程自学太难?从安装到空间分析,这(附:常用命令速查表)”,大概率不是想看一篇软件介绍,而是想知道:GRASS GIS到底怎么装、怎么导入数据、怎么做缓冲区和栅格分析,以及那些以 v.r.g. 开头的命令到底该怎么用。

GRASS GIS功能很强,但它的学习门槛确实比QGIS高一些。原因不是它难用,而是它的工作方式更偏“GIS分析引擎”:数据管理、坐标系、空间处理、命令模块之间有一套严格逻辑。本文按自学路线整理,从安装、创建工程、导入数据,到矢量分析、栅格分析和常用命令速查,帮助你把GRASS GIS教程真正跑起来。

GRASS GIS教程自学流程与GRASS GIS空间分析步骤
GRASS GIS自学建议按“安装环境—建立Location—导入数据—运行分析—导出结果”的顺序推进。

背景:为什么很多人觉得GRASS GIS教程自学太难

GRASS GIS是一款开源GIS软件,完整名称是Geographic Resources Analysis Support System。它既可以通过图形界面操作,也可以通过命令行批处理,尤其适合空间分析、地形分析、遥感栅格处理和自动化GIS流程。

很多初学者卡住,通常不是因为某个按钮找不到,而是因为没有理解GRASS GIS的几个基础概念:

  • Location:可以理解为一个坐标系一致的工作空间。同一个Location中的数据应使用相同坐标参考系统。
  • Mapset:Location下面的子工作区,用来组织不同用户、不同项目阶段或不同分析任务。
  • Region:当前分析范围和栅格分辨率。很多栅格分析结果异常,往往是Region没有设置正确。
  • Module:GRASS GIS中的功能模块,例如 v.buffer 做矢量缓冲区,r.slope.aspect 计算坡度和坡向。

如果你直接把GRASS GIS当成普通桌面制图软件,很容易觉得它“反人类”。但如果把它当成一个严谨的空间分析平台,它的逻辑反而很清楚。

原理:GRASS GIS的命令命名规则怎么理解

学习GRASS GIS教程时,最值得先掌握的是命令模块的命名规则。GRASS GIS常用命令一般由前缀和功能名组成,前缀代表数据类型或管理类别。

命令前缀 含义 常见用途
g. general,通用管理命令 查看环境、设置Region、列出数据
v. vector,矢量数据命令 点线面处理、缓冲区、叠加分析
r. raster,栅格数据命令 DEM分析、重分类、栅格计算
i. imagery,影像处理命令 遥感影像分组、分类、波段处理
db. database,属性表和数据库命令 属性查询、字段管理、数据库连接
r3. 3D raster,三维栅格命令 体数据、三维空间分析

例如,看到 v.overlay,你就可以判断它是一个矢量叠加分析命令;看到 r.mapcalc,就知道它是栅格地图代数计算命令。这比死记硬背更有效。

步骤:从安装到完成一次GRASS GIS空间分析

第一步:安装GRASS GIS

GRASS GIS可以在Windows、macOS和Linux上使用。初学者建议先安装官方稳定版本,不要一开始就折腾开发版。

  1. 访问GRASS GIS官方网站下载对应系统安装包。
  2. Windows用户建议使用官方独立安装包,或通过OSGeo4W安装。
  3. macOS用户可使用官方安装包,也可以通过Homebrew安装。
  4. Linux用户通常可以通过系统软件仓库安装,例如Ubuntu可使用 apt
sudo apt update
sudo apt install grass

安装完成后,先启动图形界面。初学者不建议一上来只用命令行,因为Location、Mapset和Region的关系通过界面更容易理解。

第二步:创建Location和Mapset

GRASS GIS空间分析的第一步不是导入数据,而是建立正确的Location。Location的坐标系决定了后续数据能否正确叠加。

  1. 启动GRASS GIS。
  2. 选择创建新Location。
  3. 根据项目数据选择坐标系,例如WGS 84、CGCS2000或某个投影坐标系。
  4. 创建Mapset,初学者可以使用默认的 PERMANENT,也可以新建 analysis
  5. 进入Mapset后再导入数据。

如果你要做面积、长度、缓冲区等分析,建议使用合适的投影坐标系,而不是直接在经纬度坐标系下计算距离。

第三步:导入矢量数据

常见矢量数据包括Shapefile、GeoPackage、GeoJSON等。GRASS GIS中推荐使用 v.import 导入外部矢量数据。

v.import input=/data/roads.shp output=roads

如果数据坐标系与当前Location不一致,v.import可以在可行情况下进行重投影导入。导入后可以查看图层列表:

g.list type=vector

查看矢量数据基本信息:

v.info map=roads

第四步:导入栅格数据

DEM、土地利用、遥感分类结果等栅格数据,可以使用 r.import 导入。

r.import input=/data/dem.tif output=dem

导入后查看栅格信息:

r.info map=dem

如果后续要做坡度、坡向、栅格计算,请特别检查分辨率、范围和坐标系是否符合分析需求。

第五步:设置Region

Region是GRASS GIS栅格分析的核心概念,表示当前计算范围和分辨率。很多初学者在GRASS GIS教程中照着命令运行,却发现结果范围不对,常见原因就是Region没有设置。

将当前Region设置为DEM范围和分辨率:

g.region raster=dem -p

参数 -p 表示打印当前Region信息。运行后应检查north、south、east、west、rows、cols和resolution是否合理。

第六步:做一次矢量缓冲区分析

假设你有道路数据 roads,想生成50米缓冲区,可以使用 v.buffer

v.buffer input=roads output=roads_buffer_50m distance=50

运行完成后查看结果:

g.list type=vector
v.info map=roads_buffer_50m

如果缓冲区看起来特别小或特别大,优先检查数据是否使用投影坐标系。如果数据仍在经纬度坐标系下,distance=50的含义可能不是你想要的50米。

第七步:做一次DEM坡度分析

DEM分析是GRASS GIS空间分析中的常见任务。计算坡度和坡向可以使用 r.slope.aspect

g.region raster=dem -p
r.slope.aspect elevation=dem slope=slope aspect=aspect

输出结果中,slope 是坡度栅格,aspect 是坡向栅格。可以继续查看坡度统计信息:

r.univar map=slope

如果坡度结果异常,例如全部接近0或出现很夸张的值,需要检查DEM的水平单位和高程单位是否一致。

第八步:用r.mapcalc做栅格条件提取

r.mapcalc 是GRASS GIS中非常重要的栅格计算工具。比如提取坡度大于15度的区域:

r.mapcalc "steep_area = if(slope > 15, 1, null())"

这个表达式的意思是:如果 slope 大于15,则赋值为1;否则赋值为空值。这样得到的 steep_area 可以用于后续叠加分析或转换为矢量。

第九步:导出分析结果

分析完成后,可以把GRASS GIS内部数据导出为常用格式。

导出矢量为GeoPackage:

v.out.ogr input=roads_buffer_50m output=/data/result.gpkg format=GPKG

导出栅格为GeoTIFF:

r.out.gdal input=slope output=/data/slope.tif format=GTiff

导出后建议在QGIS或ArcGIS Pro中打开检查,确认坐标系、范围、属性字段和像元值都符合预期。

常见坑:GRASS GIS自学最容易出错的地方

1. Location坐标系选错

Location创建后不建议随意更改坐标系。如果你把WGS 84经纬度数据放进一个投影坐标系Location,或反过来处理,后续叠加和距离计算都可能出现问题。

解决办法是:创建Location时根据主数据坐标系选择,必要时使用导入命令进行重投影。

2. 忘记设置Region

GRASS GIS栅格分析会受当前Region影响。即使输入栅格本身很大,输出也可能只覆盖当前Region范围。

g.region raster=dem -p

做任何栅格分析前,建议先运行一次 g.region 并检查输出。

3. 把显示结果当成真实数据范围

地图窗口显示的范围不一定等于计算Region。显示只是视觉范围,Region才是栅格分析真正使用的计算范围。

4. 距离单位理解错误

在缓冲区、邻域分析、成本距离分析中,距离单位取决于坐标系单位。投影坐标系通常是米,经纬度坐标系通常是度。做距离分析前必须确认坐标系。

5. 命令输出名与已有数据冲突

如果输出数据名已经存在,GRASS GIS通常不会直接覆盖,除非设置覆盖选项。可以使用新名称,或在确认安全后启用覆盖。

g.remove type=vector name=roads_buffer_50m

方法比较:GRASS GIS、QGIS和ArcGIS Pro该怎么选

工具 适合场景 优点 注意点
GRASS GIS 批处理空间分析、栅格分析、地形分析、开源科研流程 分析能力强,命令体系稳定,适合自动化 学习曲线较陡,需要理解Location和Region
QGIS 日常制图、数据检查、插件处理、桌面GIS学习 界面友好,生态丰富,可调用GRASS工具 复杂批处理需要结合模型构建器或Python
ArcGIS Pro 企业GIS、标准化生产、Esri生态项目 工具体系完整,文档和行业案例多 商业授权成本较高,部分流程依赖软件环境

如果你是GIS初学者,建议先用QGIS理解数据和制图,再学习GRASS GIS做严谨空间分析。如果你已经会Python或经常做批处理,GRASS GIS的命令体系会非常有价值。

检查清单:运行GRASS GIS空间分析前先确认这些项

  • 是否已经为项目创建了正确坐标系的Location?
  • 是否在合适的Mapset中工作?
  • 输入矢量或栅格数据是否成功导入?
  • 是否用 v.infor.info 检查过数据基本信息?
  • 做栅格分析前是否运行过 g.region raster=数据名 -p
  • 距离、面积、缓冲区分析是否使用了投影坐标系?
  • 输出数据名是否与已有数据冲突?
  • 导出结果后是否在QGIS或其他GIS软件中复核?

GRASS GIS常用命令速查表

任务 命令 示例
查看矢量数据列表 g.list type=vector g.list type=vector
查看栅格数据列表 g.list type=raster g.list type=raster
查看矢量信息 v.info v.info map=roads
查看栅格信息 r.info r.info map=dem
导入矢量数据 v.import v.import input=roads.shp output=roads
导入栅格数据 r.import r.import input=dem.tif output=dem
设置计算范围 g.region g.region raster=dem -p
矢量缓冲区 v.buffer v.buffer input=roads output=buf distance=50
矢量叠加 v.overlay v.overlay ainput=a binput=b operator=and output=out
计算坡度坡向 r.slope.aspect r.slope.aspect elevation=dem slope=slope aspect=aspect
栅格计算 r.mapcalc r.mapcalc "out = if(slope > 15, 1, null())"
栅格统计 r.univar r.univar map=slope
删除数据 g.remove g.remove type=raster name=temp
导出矢量 v.out.ogr v.out.ogr input=buf output=result.gpkg format=GPKG
导出栅格 r.out.gdal r.out.gdal input=slope output=slope.tif format=GTiff

FAQ:GRASS GIS教程自学常见问题

GRASS GIS适合初学者吗?

适合,但不建议把它作为唯一入门工具。初学者可以先用QGIS理解图层、坐标系、属性表和空间分析,再学习GRASS GIS的Location、Mapset、Region和命令模块。

GRASS GIS和QGIS是什么关系?

它们都是开源GIS工具,但定位不同。QGIS更像桌面GIS平台,GRASS GIS更像空间分析引擎。QGIS处理中也可以调用部分GRASS工具,因此二者经常配合使用。

GRASS GIS空间分析必须用命令行吗?

不必须。GRASS GIS有图形界面,很多模块可以通过菜单和参数面板运行。但掌握命令行有利于复现流程、批量处理数据和写自动化脚本。

为什么我的缓冲区距离不对?

最常见原因是坐标系单位不对。如果数据是经纬度坐标系,距离单位通常不是米。做缓冲区前,建议把数据放到合适的投影坐标系Location中,或导入时进行重投影。

为什么我的栅格分析结果范围不对?

优先检查Region。运行 g.region raster=输入栅格 -p,确认当前计算范围和分辨率是否正确。GRASS GIS的栅格输出会受当前Region控制。

GRASS GIS适合做哪些空间分析?

GRASS GIS适合做DEM地形分析、栅格地图代数、成本距离分析、水文分析、矢量叠加、缓冲区、网络分析和遥感影像处理。对于需要重复运行的分析流程,它尤其有优势。

结论:学习GRASS GIS要先建立正确工作流

GRASS GIS教程自学并不难,难的是一开始没有抓住它的工作逻辑。你只要按“创建Location和Mapset、导入数据、设置Region、运行模块、检查结果、导出成果”的顺序学习,就能避开大部分坑。

建议你先用一个小数据集练习本文中的流程:导入道路和DEM,做一次50米缓冲区,计算坡度,再用 r.mapcalc 提取坡度大于15度的区域。这个练习覆盖了GRASS GIS空间分析中最核心的概念,也能帮助你真正理解常用命令速查表中的模块。

当你能够稳定完成这套流程后,再继续学习水文分析、批处理脚本、QGIS调用GRASS工具和Python自动化,会比直接啃完整手册高效得多。