如何访问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
相关产品推荐
相关产品推荐

