从草 gis 中导出多个栅格

Export multiple raster from grass gis

我使用 r.tile (http://grass.osgeo.org/grass71/manuals/r.tile.html) 从一个巨大的 geotiff 创建了图块。现在我想将每个图块导出到一个文件,但还没有找到一种简单的方法: 使用 r.out.gdal 我一次只能导出一个图块,这使得它无法使用,因为我有 100 个图块...

我还没有找到任何其他解决方案...有人有什么想法吗?

您只需在某种脚本语言的 for 循环中调用 r.out.gdal

这是 Bash 的示例。这是一个简单但完整的脚本。它期望将栅格地图名称作为命令行参数,如果参数不存在,它会失败并显示使用建议。

#!/usr/bin/env bash

if [ $# -eq 0 ]
then
    >&2 echo "No arguments supplied"
    >&2 echo "Usage: [=10=] raster1 raster2 ..."
fi

for RASTER in "$@"
do
    r.out.gdal input=$RASTER output=$RASTER.tiff format=GTiff
done

要运行它你必须首先将它设置为可执行文件(chmod u+x export.sh),然后你可以在命令行中运行它:

./export.sh tile1 tile2

这里有一个 Python 的例子,它更适用于更大的任务。该代码与 Bash 脚本完全相同。此外,它使用 GRASS Python Scripting Library 调用 r.in.gdal 模块和 print 函数以向前兼容 Python 3.

#!/usr/bin/env python

from __future__ import print_function
import sys
import grass.script as gscript

if len(sys.argv) == 1:
    print("No arguments supplied", file=sys.stderr)
    print("Usage: {} raster1 raster2 ...".format(sys.argv[0]), file=sys.stderr)

for raster in sys.argv[1:]:
    gscript.run_command('r.out.gdal', input=raster,
                        output=raster + '.tiff', format='GTiff')

同样,要运行它你必须首先将它设置为可执行文件(chmod u+x export.py),然后你可以在命令行中运行它:

./export.py tile1 tile2

这两个示例都假设您正在使用 Linux、Mac OS X 或类似的东西,并且 运行 在 GRASS GIS 的系统命令行中使用脚本。在 MS Windows 上,您可能应该使用 Python 版本和 运行 它,例如从 GRASS GIS GUI 通过 Launch script 项目图层管理器​​中的文件菜单。

以上答案要求您输入每个栅格图层的名称。如果你想自动化整个过程,你可以使用下面的 Python 脚本。该脚本首先创建一个列表,其中包含可用于草的所有栅格,然后将每个栅格单独导出为 Tiff 文件。要 运行 它,要么将代码复制并粘贴到 GRASS python shell(作为 GRASS GUI 层管理器 window 上的选项卡访问),或者将其另存为.py 文件,然后再次从 Python shell,使用命令 execfile("foo.py").

import grass.script as grass

# create list of all rasters

rastlist=grass.read_command("g.list",type="rast")
rastlist1= rastlist.split(':', 1)[1]
rastlist2= rastlist1.split('-', 1)[0]
RastListClean=rastlist2.split()

# export all rasters

for raster in RastListClean:
    grass.run_command('r.out.gdal', input=raster,
                        output=raster + '.tiff', format='GTiff')