可以使用-json
参数运行gdalinfo命令,该参数将信息作为json字符串返回,允许我们以编程方式访问信息并对其进行解析。
假设我们想提取在合并切片实验中创建的merged.vrt的最大值。通过提供-JSON
选项,我们可以获得JSON格式的命令输出。
gdalinfo -stats -json merged.vrt
(1)jq
解析JSON
我们需要一种方法来解析JSON并提取我们感兴趣的字段。这里我们使用流行的JSON处理工具jq
。jq
是一个强大的命令行工具,用于处理JSON格式的数据,可以查询、过滤、修改和处理 JSON 数据,使得在命令行环境下处理 JSON 变得非常方便。
首先需要在Windows下安装jq
。最新下载地址:https://github.com/jqlang/jq/releases,下载jq-win64.exe后将其重命名为jq.exe,然后在C盘等新建一个文件夹放置jq.exe,并将该路径添加进系统环境变量中。使用 jq --version
查看jq版本,如果输出版本号,则安装成功。
然后,我们可以使用下面的jq查询提取所需的数据。
gdalinfo -stats -json merged.vrt | jq ".bands[0].maximum"
(2)json
模块解析
我们也可以通过 Python 运行命令,并使用json
模块来解析和提取结果。代码 如下,显示了如何提取每个 SRTM 切片的最小值和最大值。我是通过Pycharm调用的创建的conda环境gdal。
import os
import json
import subprocess
input_dir = r'D:\GDALLearn\gdal-tools\srtm'
command = 'gdalinfo -stats -json {input}'
for file in os.listdir(input_dir):
if file.endswith('.hgt'):
input = os.path.join(input_dir, file)
filename = os.path.splitext(os.path.basename(file))[0]
output = subprocess.check_output(command.format(input=input), shell=True)
info_dict = json.loads(output)
bands = info_dict['bands']
for band in bands:
band_id = band['band']
min = band['minimum']
max = band['maximum']
print('{},{},{},{}'.format(filename, band_id, min, max))
本文由mdnice多平台发布