You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问TIFF文件GDALMetadata中<Item>类型XML条目内的统计数据

从TIFF文件的GDALMetadata中提取统计数据

在处理TIFF文件时,通过geoTIFF.getImage()获取的img对象中,img.fileDirectory.GDAL_METADATA是一段XML格式的元数据,结构如下:

<GDALMetadata>
  <Item name="STATISTICS_MAXIMUM" sample="0">21.122838228436</Item>
  <Item name="STATISTICS_MEAN" sample="0">1.2389914218174</Item>
  <Item name="STATISTICS_MINIMUM" sample="0">-4.6630500033646</Item>
  <Item name="STATISTICS_STDDEV" sample="0">2.0382729681586</Item>
</GDALMetadata>

要提取其中的统计值,可按以下方法实现:

步骤1:解析XML字符串

GDAL_METADATA是XML格式的字符串,需先解析为DOM对象才能提取内容:

  • 浏览器环境:直接用原生DOMParser
  • Node.js环境:先安装jsdom库(执行npm install jsdom),通过JSDOM提供的DOM环境解析

步骤2:提取目标统计值

解析完成后,通过CSS选择器定位对应name属性的<Item>元素,获取文本内容并转为数值类型。

修改后的完整代码

// Node.js环境需先引入jsdom
// const { JSDOM } = require('jsdom');

response.on('close', async () => {
    console.log('Retrieved all data');
    readFile("./test-1.tiff")
    .then((data) => {
        const dataAsArrayBuffer = data.buffer;
        fromArrayBuffer(dataAsArrayBuffer)
        .then((geoTIFF) => {
            geoTIFF.getImage()
            .then((img) => {
                // 初始化XML解析器
                let parser;
                if (typeof DOMParser !== 'undefined') {
                    parser = new DOMParser();
                } else {
                    parser = new JSDOM().window.DOMParser;
                }
                const xmlDoc = parser.parseFromString(img.fileDirectory.GDAL_METADATA, "text/xml");
                
                // 提取统计数据并转为数值
                const stats = {
                    maximum: parseFloat(xmlDoc.querySelector('Item[name="STATISTICS_MAXIMUM"]').textContent),
                    mean: parseFloat(xmlDoc.querySelector('Item[name="STATISTICS_MEAN"]').textContent),
                    minimum: parseFloat(xmlDoc.querySelector('Item[name="STATISTICS_MINIMUM"]').textContent),
                    stddev: parseFloat(xmlDoc.querySelector('Item[name="STATISTICS_STDDEV"]').textContent)
                };
                
                console.log('统计数据:', stats);
                console.log(img.getWidth(), img.getHeight(), img.getSamplesPerPixel());
            })
            .catch((e) => console.log("img.errorMessage:", e))
        })
        .catch((e) => console.log("geoTIFF.errorMessage:", e))
    })
    .catch((e) => console.log("data.errorMessage:", e))
});

说明

  • 代码兼容浏览器和Node.js两种运行环境
  • 使用parseFloat将文本内容转为数值,方便后续计算
  • 通过Item[name="属性名"]选择器精准定位目标元素

内容的提问来源于stack exchange,提问作者Amrmsmb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:30:37