我正在尝试从 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],
];
如何更新我的数据集以获得所提供的数据?
这是正确的代码片段:
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销毁对象之前文件不会被关闭。