2

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

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

4

2 回答 2

2

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

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

#!/usr/bin/env bash

if [ $# -eq 0 ]
then
    >&2 echo "No arguments supplied"
    >&2 echo "Usage: $0 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 脚本库来调用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 通过图层管理器​​中文件菜单中的启动脚本项。

于 2015-08-12T02:35:28.083 回答
0

以上答案要求您输入每个栅格图层的名称。如果您想自动化整个过程,您可以使用以下 Python 脚本。此脚本首先创建一个可用于草地的所有栅格列表,然后将每个栅格单独导出为 Tiff 文件。要运行它,请将代码复制并粘贴到 GRASS python shell(可作为 GRASS GUI 层管理器窗口上的选项卡访问),或者将其保存为 .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')
于 2016-04-25T09:40:10.853 回答