在node-gdal-async中从二维数组写入新数据集

问题描述 投票:0回答:1

我正在尝试从 JavaScript 中的二维数组创建一个新的数据集。但是,我似乎无法在文档中找到执行此操作的方法。

要创建新数据集,我似乎必须在写入模式下使用

gdal.open
才能写入新数据,但我不确定如何用我的真实数据更新这个空栅格:

const driver = gdal.drivers.get('GTiff');
const xSize = 3;
const ySize = 3;
const bandCount = 1;
const dataType = gdal.GDT_Int32;
const dataset = await gdal.openAsync('output.tif', 'w', driver, xSize, ySize, bandCount, dataType);

现在假设我有以下二维数据数组:

// from a hdf5 file
const data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

如何更新我的数据集以获得所提供的数据?

javascript typescript hdf5 gdal
1个回答
0
投票

这是正确的代码片段:

const xSize = 3;
const ySize = 3;
const bandCount = 1;
const dataType = gdal.GDT_Int32;
const dataset = await gdal.openAsync('output.tif', 'w', 'GTiff', xSize, ySize, bandCount, dataType);

const data = new Int32Array([
    1, 2, 3,
    4, 5, 6,
    7, 8, 9,
]);

const band1 = await dataset.bands.getAsync(1);
await band1.pixels.write(0, 0, xSize, ySize, data);
await dataset.flushAsync();

一些注意事项:

  • 这是完全异步的代码,这意味着您永远不会阻塞事件循环;

  • gdal
    要求您使用
    TypedArray
    。如果你想使用多维数组,我建议你考虑使用
    ndarray
    scijs
    ,还有一个
    gdal-async
    的插件;

  • 没有

    closeAsync
    ,但是如果你调用
    flushAsync
    ,你保证数据会被写入,即使在GC销毁对象之前文件不会被关闭。

© www.soinside.com 2019 - 2024. All rights reserved.