这个 calc 命令将文件作为数组读取,在其上下文中计算类似Lisp的表达式,并将结果作为新文件写入。numpy模块的成员以及算术和逻辑运算符是可用的内置函数和运算符。它旨在进行简单的计算;任何需要多个步骤的计算都可以在Python中使用Rasterio和Numpy API更好地完成。
输入文件的带区数目可能不同,但行和列的数目应该相同。输出文件将具有与输入相同的行数和列数,并且表达式结果的每个元素都有一个带区。一个涉及n-d数组算术运算的表达式将产生一个n-d数组并产生一个n波段输出文件。
下面将生成一个3波段的geotiff,所有值的比例为0.95,增量为2。在表达式中, (read 1) 作为三维数组计算第一个输入数据集(3个频带)。
$ rio calc "(+ 2 (* 0.95 (read 1)))" tests/data/RGB.byte.tif /tmp/out.tif
下面生成一个3波段的geotiff,其中第一个波段从输入的第一个波段复制,接下来的两个波段按第一个波段的平均值与各自的平均值之比缩放(缩小)。这个 --name 选项用于将数据集绑定到表达式中的名称。 (take a 1) 获取名为 a 作为二维数组 (asarray ...) 将二维数组的序列收集到三维数组中进行输出。
$ rio calc "(asarray (take a 1) (* (take a 2) (/ (mean (take a 1)) (mean (take a 2)))) (* (take a 3) (/ (mean (take a 1)) (mean (take a 3)))))" \
> --name a=tests/data/RGB.byte.tif /tmp/out.rgb.tif
上面的命令也是计算的一个例子,它远远超出了calc命令的设计范围,而且可以在python中更有效地进行计算。
这个 clip 命令使用边界输入直接或从模板栅格剪裁栅格。
$ rio clip input.tif output.tif --bounds xmin ymin xmax ymax
$ rio clip input.tif output.tif --like template.tif
如果使用 --bounds ,值必须在输入的坐标参考系中。如果使用 --like ,边界将自动转换以匹配输入的坐标参考系。
它还可以结合使用fiona读取功能数据集的边界:
$ rio clip input.tif output.tif --bounds $(fio info features.shp --bounds)
增加0.25
这个 convert 命令将栅格数据集复制并转换为其他数据类型和格式(类似于 gdal_translate )
通过使用 --scale-ratio 和 --scale-offset 选项。目标栅格值计算为
dst = scale_ratio * src + scale_offset
例如,要将实际范围为0-4095到0-255的uint16数据缩放为uint8:
$ rio convert in16.tif out8.tif --dtype uint8 --scale-ratio 0.0625
你可以使用 --rgb 作为 --co photometric=rgb .
这个 edit-info 命令允许您编辑栅格数据集的元数据,即
坐标参考系
nodata值
通过编辑这些元数据项,空间上不知情的图像处理软件(如photoshop或imagemagick)创建的TIFF可以变成geotiff。
例如,可以将数据集的坐标参考系统设置或更改为Web Mercator(epsg:3857)。
$ rio edit-info --crs EPSG:3857 example.tif
设置其 affine transformation matrix ,
$ rio edit-info --transform "[300.0, 0.0, 101985.0, 0.0, -300.0, 2826915.0]" example.tif
或将其nodata值设置为,例如, 0 :
$ rio edit-info --nodata 0 example.tif
或将其颜色解释设置为红色、绿色、蓝色和阿尔法:
$ rio edit-info --colorinterp 1=red,2=green,3=blue,4=alpha example.tif
也可以表示为:
$ rio edit-info --colorinterp RGBA example.tif
见 rasterio.enums.ColorInterp 有关支持的颜色解释的完整列表和颜色文档的详细信息。
这个 rasterize 命令将geojson功能栅格化为新栅格或现有栅格。
$ rio rasterize test.tif --res 0.0167 < input.geojson
生成的文件将具有由geojson边界确定的左上角坐标(epsg:4326,默认值),像素大小约为30弧秒。中心位于多边形内或由Bresenham线算法选择的像素将被烧掉,默认值为1。
可以将栅格化为现有栅格并使用其他默认值:
$ rio rasterize existing.tif --default_value 10 < input.geojson
也可以使用模板栅格进行栅格化,模板栅格将用于确定输出栅格的变换、尺寸和坐标参考系统:
$ rio rasterize test.tif --like tests/data/shade.tif < input.geojson
geojson特性可以使用stdin提供,也可以直接指定为第一个参数,并且可以提供尺寸来代替像素分辨率:
$ rio rasterize input.geojson test.tif --dimensions 1024 1024
其他选项可用,请参见:
$ rio rasterize --help
这个 warp 命令扭曲(重新投影)基于可从模板栅格获取或直接输入的参数的栅格。输出总是被覆盖。
要从模板栅格复制坐标参考系、转换和尺寸,请执行以下操作:
$ rio warp input.tif output.tif --like template.tif
可以使用proj.4或epsg:nnnn字符串或JSON文本编码的proj.4对象指定输出坐标系:
$ rio warp input.tif output.tif --dst-crs EPSG:4326
$ rio warp input.tif output.tif --dst-crs '+proj=longlat +ellps=WGS84 +datum=WGS84'
您还可以指定维度,该维度将根据目标CRS中边界与这些维度之间的关系自动计算适当的分辨率:
$ rio warp input.tif output.tif --dst-crs EPSG:4326 --dimensions 100 200
或提供输出边界(在源CRS中)和分辨率:
$ rio warp input.tif output.tif --dst-crs EPSG:4326 --bounds -78 22 -76 24 --res 0.1
上一个命令,如果是南上图像, -- 逃离下一个 - :
$ rio warp input.tif output.tif --dst-crs EPSG:4326 --bounds -78 22 -76 24 --res 0.1 -- -0.1
其他选项可用,请参见:
$ rio warp --help
例如, rio-mbtiles 提供命令 rio mbtiles 将栅格导出到mbtiles文件。
见 click-plugins 有关如何构建这些插件的更多信息。
要在rio中使用这些插件,请将命令添加到 rasterio.rio_plugins' entry point in your setup.py file, as described here 而在 rasterio/rio/main.py .
见 plugin registry 获取可用插件的列表。
其他命令?
欢迎对其他命令提出建议!
在一些Linux发行版中,“rio”可能指的是命令行diamond rio mp3播放器控制器。通过在单独的Python环境中安装栅格可以避免这种冲突。