mmomtchev / node-gdal-async

Node.js bindings for GDAL (Geospatial Data Abstraction Library) with full async support
https://mmomtchev.github.io/node-gdal-async/
Apache License 2.0
129 stars 26 forks source link

Unable to get `vsimem` file buffer #85

Open wandergis opened 1 year ago

wandergis commented 1 year ago

like python gdal binding lib:

from osgeo import gdal

filep = "/vsimem/foo.tif"

# get the file size
stat = gdal.VSIStatL(filep, gdal.VSI_STAT_SIZE_FLAG)

# open file
vsifile = gdal.VSIFOpenL(filep, 'r')

# read entire contents
vsimem_content = gdal.VSIFReadL(1, stat.size, vsifile)
mmomtchev commented 1 year ago

There are no file operations in Node.js, however you can still retrieve the file in a Buffer by calling vsimem.release: https://mmomtchev.github.io/node-gdal-async/#vsimem

Here is an extract from the unit test:

// Create an in-memory dataset
const size = 64
const ds = gdal.open('/vsimem/temp1.tiff', 'w', 'GTiff', size, size, 1, gdal.GDT_Byte)
const data = new Uint8Array(size * size)
for (let i = 0; i < data.length; i ++) data[i] = Math.round(Math.random() * 256)
ds.bands.get(1).pixels.write(0, 0, ds.rasterSize.x, ds.rasterSize.y, data)
ds.close()

// Happens here
const buffer = gdal.vsimem.release('/vsimem/temp1.tiff')
assert.instanceOf(buffer, Buffer)
zy6p commented 1 year ago

What about the file header? Or doesn't exist.

mmomtchev commented 1 year ago

What do you mean by the file header?