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

如何使用node-gdal-async从二维数组创建并写入新数据集

如何使用node-gdal-async从二维数组创建并写入新数据集

嘿,我来帮你搞定这个问题!你已经成功迈出了第一步——创建了空的TIFF数据集,接下来只需要把你的二维数组数据写入进去就行,步骤其实很简单:

关键步骤拆解

  • 第一步:获取目标波段
    因为你创建的是单波段数据集,直接通过dataset.bands.get(1)获取第一个波段就行(注意哦,node-gdal-async里的波段是从1开始计数的,不是0开始,别踩这个坑!)

  • 第二步:转换二维数组为TypedArray
    gdal的写入方法需要连续的TypedArray(和你指定的数据类型gdal.GDT_Int32对应,这里要用Int32Array),所以先把二维数组打平成一维数组,再转换成对应的类型:

    // 把二维数组打平,再转成匹配的Int32Array
    const flatData = new Int32Array(data.flat());
    
  • 第三步:写入数据到波段
    调用波段的writeRasterAsync方法,指定写入的起始坐标、尺寸,以及转换好的数据即可。

完整可运行代码

把你的代码和上述步骤整合后,完整代码如下:

const gdal = require('gdal-async');

async function createDatasetFrom2DArray() {
  const driver = gdal.drivers.get('GTiff');
  const xSize = 3;
  const ySize = 3;
  const bandCount = 1;
  const dataType = gdal.GDT_Int32;

  // 创建空的TIFF数据集
  const dataset = await gdal.openAsync('output.tif', 'w', driver, xSize, ySize, bandCount, dataType);

  // 你的二维数组数据
  const data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
  ];

  // 1. 获取第一个波段
  const band = dataset.bands.get(1);

  // 2. 转换二维数组为Int32Array
  const flatData = new Int32Array(data.flat());

  // 3. 写入数据到波段
  await band.writeRasterAsync(0, 0, xSize, ySize, flatData, xSize, ySize, dataType);

  // 别忘了关闭数据集,确保数据完全写入磁盘
  dataset.close();
  console.log('数据集创建并写入完成!');
}

// 执行函数并捕获错误
createDatasetFrom2DArray().catch(err => console.error(err));

额外注意事项

  • 数据类型必须严格匹配:如果创建数据集时用的是gdal.GDT_Float32,那就要把数据转换成Float32Array,否则会出现数据错乱。
  • 多波段场景:如果是多波段数据集,需要循环每个波段,分别准备对应的数据数组,再逐个写入。
  • 务必关闭数据集:一定要调用dataset.close(),或者用try/finally结构确保数据集被正确关闭,否则可能导致文件损坏或数据丢失。

备注:内容来源于stack exchange,提问作者Kipnoedels

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:49:49