我使用 r.tile ( http://grass.osgeo.org/grass71/manuals/r.tile.html ) 从一个巨大的 geotiff 创建图 block 。现在我想将每个图 block 导出到文件中,但还没有找到简单的方法: 使用 r.out.gdal 我一次只能导出一个图 block ,这使得它无法使用,因为我有 100 个图 block ...
我还没有找到任何其他解决方案...有人有什么想法吗?
最佳答案
您只需在某种脚本语言的 for 循环中调用 r.out.gdal 即可。
这是 Bash 的示例。这是一个简单但完整的脚本。它期望栅格 map 名称作为命令行参数,如果参数不存在,则会失败并显示使用建议。
#!/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 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 通过 文件 菜单中的 启动脚本 项图层管理器。
关于从草地 gis 导出多个栅格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31933361/