All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- GDAL 3.10.0
- Node.js 23 support
- Implement RFC101 support, see
ASYNCIO.md
for more information
- Drop Node.js 16 support
- Drop macOS 12 support
- GDAL 3.9.2
- GDAL 3.9.0
- Node.js 22 support
- All shared library symbols are now hidden on Linux, allowing to load the binary addon in a process that has loaded a different version of GDAL (on Windows this has always been possible and on maOS, while possible in theory, this particular linking mode is not supported by
node-gyp
)
- Drop macOS 11 support
- Drop Node.js 21 support
- Mark Node.js 16 as obsolete with a warning
- GDAL 3.8.5
- GDAL 3.8.4
- GDAL 3.8.3
- GDAL 3.8.2
- GDAL 3.8.1
- Fix mmomtchev/node-gdal-async#123,
H5version.h
is ignored by.gitignore
and missing from the NPM tarball
- GDAL 3.8.0 with new
JSONFG
,PMTiles
andS102
drivers - PROJ 9.3.0
- GEOS 3.12.1
- HDF5 1.14.3
- NetCDF 4.9.2
- Node.js 21 support
- Upgrade the main test platform from Ubuntu 20.04 to Ubuntu 22.04
- Drop Node.js 14 support
- GDAL 3.7.3
- GDAL 3.7.2
- GDAL 3.7.1
- Fix #84, cannot create an
OpenFileGDB
with default options - Fix #90, remove the old 2GB/4GB limit and allocate
TypedArray
s up to the limit allowed by Node.js and fail gracefully on overflow instead of segfaulting - Fix #92, align
gdal.ReadOptions
with the documentation and all other structures by calling the typedata_type
while still accepting the oldtype
- Merge #94, handle
null
as a field value in OGR - Fix #96, support PNG compression in GRIB files
- GDAL 3.7.0
- GDAL 3.6.4
- Node.js 20.x support and precompiled binaries
- GDAL 3.6.3
- Fix #66, include
yatag
as a production dependency - Fix #36, find a way around
jest
resetting modules between tests
- GDAL 3.6.2
gdal.dem{Async}
, library version ofgdaldem
- Fix #56, propagate input errors in
calcAsync
andRasterMuxStream
- GDAL 3.6.1
- Fix #53, rebuilding from source fails
- GDAL 3.6.0
- Node.js 19.x
- Drop support for glibc < 2.28 distributions (not supported by recent Node.js versions)
- Drop support for all Amazon Linux 2, replacing it with Amazon Linux 2022
- Drop support for Ubuntu 16.04 and 18.04
- Ubuntu 22.04
- GDAL 3.5.3
- Fix #43, wrong TypeScript type for
data_type
ingdal.Driver.create
- GDAL 3.5.2
- Fix #38, integrate the fix for GDAL[#5028] (OSGeo/gdal#5028)
- GDAL 3.5.1
- Add Electron support
- GDAL 3.5.0
- PROJ 9.0.0
- NetCDF 4.8.1
- GEOS 3.10.2
- Node 18 support
- API documentation now uses
documentation.js
withdocumentation-polyglot
- Add
gdal.addPixelFunc
for registering a native code pixel function - Add
gdal.toPixelFunc
andgdal.createPixelFunc
allowing to use a JavaScript function as a pixel function gdal.calcAsync
can now convert input data to the output type before applying the user functiongdal.calcAsync
can now call a progress callback- Add
gdal.buildVRT
andgdal.rasterize
, library versions of the GDAL CLI tools - Add
gdal.wrapVRT
allowing wrapping a regular Dataset inside a VRT Dataset - Support using driver-specific open options in
gdal.Driver.open
- All
gdal.Driver
methods now throw an exception if the parsing of the driver-specific options fails
- Bundled GDAL 3.4.3
- Bundled GDAL 3.4.2
- Fix #27, rebuilding by
npm --build-from-source
fails - Fix #25, always close open Datasets when the process exits
gdal.calcAsync
now correctly returns a rejected Promise instead of triggering an uncatchable error when handling an exception in the user-supplied transformation function- Fix #26, some methods do not check the passed object class
- Bundled GDAL 3.4.1
- Bundled OpenJPEG and enabled the JPEG2000 driver
- Fix #19, benchmarks do not execute
- Fix #20, do not block the event loop in
calcAsync
- Fix #21,
gdal.vsimem.copy
doesn't properly deallocate the returnedBuffer
on Windows - Remove the documentation reference to the non-existing
copy
argument ofvsimem.set
, usevsimem.copy
instead - Fix a memory leak when throwing an exception in
gdal.Geometry.exportToWKB{Async}
- Bundled GDAL 3.4.0
- PROJ 8.2.0
- GEOS 3.10.0
- libcurl 7.79.1
- hdf5 1.12.1
- Node 17 support and binary packages
- Streams-based API for reading raster data as a stream of pixels
- Asynchronous iterators for all collections that have asynchronous getters
gdal.info{Async}
,gdal.translate{Async}
,gdal.vectorTranslate{Async}
andgdal.warp{Async}
- library versions ofgdalinfo
,gdal_translate
,ogr2ogr
andgdalwarp
gdal.calcAsync
, an alternative implementation ofgdal_calc.py
gdal.ColorTable
implementingGDALColorTable
andgdal.RasterBand.colorTable{Async}
- All
gdal.RasterBand
getters now have an async version gdal.RasterBandPixels.clampBlock
for handling partial edge blocksgdal.RasterBand.colorInterpretationAsync
gdal.Dataset.getMetadataAsync
andgdal.RasterBand.getMetadataAsync
gdal.Dataset.setMetadata{Async}
andgdal.RasterBand.setMetadata{Async}
gdal.SpatialReference.fromURLAsync
,gdal.SpatialReference.fromCRSURLAsync
andgdal.SpatialReference.fromUserInputAsync
gdal.RasterBandOverviews.countAsync
,gdal.RasterBandOverviews.getAsync
andgdal.RasterBandOverviews.getBySampleCountAsync
gdal.fromDataType
andgdal.toDataType
converters betweenTypedArray
constructor and GDALdataType
- TypeScript bindings now officially support
strict: true
gdal.vsimem.copy
allowing to copy aBuffer
to GDAL's own memory heap to create an in-memory file extendable by GDALgdal.fs.stat{Async}
andgdal.fs.readDir{Async}
allowing for querying GDAL VSI filesystem objects
- Requires GDAL >= 2.1 if rebuilding against a system-installed GDAL library
- (BREAKING) Switch the progress callback of
gdal.Driver.createCopy{Async}
from a raw argument to an argument inside an object to differentiate it from a result callback when some options are omitted in async mode - (BREAKING)
gdal.RasterBand.noDataValue
now returnsNaN
if the original value wasNaN
instead of null; when setting it tonull
it correctly clears theNoDataValue
instead of setting it toNaN
; one should still exercise care when usingNaN
as aNoDataValue
- since even if the binary representation is defined by IEEE 754, different formats, compilers or architectures may exhibit different behavior - Fix #16, missing locking for GDAL operations involving multiple datasets when an event loop warning is emitted
- Enable lazy-binding on macOS, meaning that Release builds on all platforms use lazy-binding now
gdal.Driver.create{Async}
now throw if they fail to parse the options instead of returningundefined
gdal.DatasetBands.create{Async}
andgdal.SpatialReference.fromESRI
now have correct TypeScript signatures, all options lists are supported either in{object}
or instring[]
formgdal.checksumImage{Async}
now throw/reject on error instead of returning 0 if the GDAL method returned an error, but the GDAL method still returns 0 on some errors and does take into account fractional numbers < 1.0- Fix a memory leak in
gdal.Dataset.srsAsync
- Fix a memory leak in the exception-handling path of the progress callbacks
- Fix #13, now two different warnings are emitted whether a dataset is closed by
gdal.Dataset.close
or it is destroyed by the GC - the former is indicative of a bug in the user application, while the latter is indicative of a bug ingdal-async
itself - Correctly identify all async getters as being read-only in TypeScript
- TypeScript signature and documentation entry for
gdal.LayerFields.fromObject
, it did not exist before - Correct TypeScript signatures for all
gdal.FeatureFields
iterators, they now returnany
objects instead of agdal.fieldValue
- Correct TypeScript signature for
gdal.Dataset.srs{Async}
- now it can benull
- Correct TypeScript signature for
gdal.Dataset.geoTransform{Async}
- now it can benull
- Correct TypeScript signatures for
gdal.RasterBand.id{Async}
,gdal.RasterBand.minimum{Async}
,gdal.RasterBand.maximum{Async}
,gdal.RasterBand.offset{Async}
,gdal.RasterBand.scale{Async}
- now they can benull
- Correct TypeScript signature for
gdal.DatasetLayers.create{Async}
-srs
andgeometry
are optional and default tonull
- Correct TypeScript signature for
gdal.DatasetLayers.copy{Async}
, the first argument is of typegdal.Layer
- Correct TypeScript signature for
gdal.Layer.setSpatialFilter
, it now has two separate signatures, one that accepts agdal.Geometry|null
and another that acceptsnumber, number, number, number
- Correct TypeScript signature for
gdal.Layer.setAttributeFilter
, it now acceptsnull
as argument - Correct TypeScript signature for
gdal.Feature.setGeometry
, it now acceptsnull
as argument - Correct TypeScript signature for
gdal.Geometry.srs
, now it can benull
- Correct TypeScript signatures for
gdal.SpatialReference.getAuthority{Code,Name}
, now they acceptnull
as argument - Correct TypeScript signatures for
gdal.config.set
andgdal.config.get
, now they can accept/returnnull
- Correct numerous TypeScript signatures for callback functions to match the return type of the function
- Do not produce persistent temporary files in the unit tests
- Add support for Amazon Linux and restore Ubuntu 16.04 support (glibc 2.23)
- On Linux, build GDAL with
ENABLE_UFFD
for virtual I/O support on drivers that allow it (currently only NetCDF) to allow accessing NetCDF subdatasets with remote virtual filesystems - Add a new npm script -
npm run prune
- not to be confused withnpm prune
- which allows to keep only the module runtime, significantly reducing the size of the installed package
- Fix
gdal.RasterBand.flushAsync()
- Implement the previously non-existing
strict
argument ofgdal.Driver.createCopy{Async}()
and move it afteroptions
- Implement progress callbacks in
gdal.Driver.createCopy{Async}()
gdal.Driver.createCopy{Async}()
now always throws anError
/ rejects the Promise if the operation failed instead of returning a null object in some cases- Fix #14, correctly handle exceptions in progress callbacks and return them to the calling user code
- Add a previously missing TypeScript signature for
gdal.CoordinateTransformation.transformPoint(point: xyz)
- Fix the documentation / TypeScript signature for
gdal.Geometry.segmentize
- it returnsundefined
- Removed all source tarballs of the bundled dependencies from the published package to reduce its size
- GDAL 3.3.2
- Fix #9, do not enumerate async getters
- Fix #12, build-from-source is broken when building through npm
- Compatibility with
rollup-plugin-natives
- Fix #6,
gdal.vsimem.release
is now always safe to use
- GDAL 3.3.1
- Support async getters
- Add
gdal.Dataset.rasterSizeAsync
- Add
gdal.Dataset.srsAsync
- Add
gdal.Dataset.geoTransformAsync
- Add
- Add
gdal.DatasetBands.getEnvelope()
- Add
gdal.vsimem.set
andgdal.vsimem.release
allowing to load and unload files between aBuffer
and GDAL's in-memoryvsimem
file system - Add
gdal.Geometry.makeValid{Async}()
- Correctly measure the wall time for the event loop warnings
- Fix a number of memory leaks in
gdal.SpatialReference.clone()
,gdal.SpatialReference.cloneGeogCS()
and when constructing agdal.SpatialReference
with awkt
argument - Remove a wasteful reallocation in
gdal.Dataset.root
gdal.DatasetLayers.get{Async}()
now throws anError
if an invalid layer is requested instead of returning a null objectgdal.FeatureDefnFields.get{Async}()
now throws anError
if an invalid field definition is requested instead of returning a null objectgdal.FeatureFields.get{Async}()
now throws anError
if an invalid field is requested instead of returning a null object- it can still return
null
if the field exists in the definition but it is not set in the feature
- it can still return
gdal.GDALDrivers.get()
now throws anError
if an invalid driver is requested instead of returning a null objectgdal.GeometryCollectionChildren.get()
now throws anError
if an invalid sub-geometry is requested instead of returning a null objectgdal.LayerFeatures.get{Async}()
now throws anError
if an invalid feature is requested instead of returning a null objectgdal.LayerFields.get{Async}()
now throws anError
if an invalid field is requested instead of returning a null objectgdal.LineStringPoints.get()
now throws anError
if an invalid point is requested instead of returning a null objectgdal.PolygonRings.get()
now throws anError
if an invalid ring is requested instead of returning a null object- All
gdal.Geometry
methods that return agdal.Geometry
throw anError
on error instead of returning a null object - Fix #6, a case of sleeping in the GC while destroying the sibling of an object with an active asynchronous operation
- Fix a potential race condition in the object store
- Fix several potential race conditions in
gdal.RasterBand
- Correctly throw an
Error
with an empty message if a GDAL method fails without setting the error message instead of the last previously encountered error
- GDAL 3.3.0
- Read-only support of the new Multidimensional Raster Data Model introduced in GDAL 3.1, requires GDAL >= 3.1
- NetCDF, GRIB, HDF5, Carto, FlatGeobuf, WMS, WMTS and WCS drivers
- Support generalized strides in
gdal.RasterBandPixels.{write|read}()
- Add
gdal.RasterBandPixels.{set|get}Async()
- Add
gdal.RasterBand.computeStatisticsAsync
- Add an explicit stderr warning when the GC has to active sleep on an async operation and solve all (known) occurrences
- Add an explicit stderr warning when user code is calling a synchronous method while an asynchronous operation is running in the background
- Vastly improved locking mechanism allowing better parallelization
- Linux release builds have lazy binding enabled
gdal.DatasetBands.get{Async}()
now throws anError
if an invalid band is requested instead of returning a null object- Completely reworked persistent object storage
- Thread-safe
gdal.RasterBand.fillAsync
- Fix a number of cases where an unreferenced
gdal.Dataset
was not protected from the GC during an asynchronous operation
- Drop support for linking against a system-installed GDAL 1.x library
- Drop support for Ubuntu 16.04
- Drop support for Node.js 10.x and 15.x
- Drop support for Python 2
- Drop support for the drivers removed in GDAL 3.3: AeronavFAA, BNA, E00Grid, HTF, OpenAir, SEGUKOOA, SEGY, SUA and XPlane
- Add async versions of
gdal.Layer.flush
,gdal.RasterBand.flush
andgdal.RasterBand.fill
- Fix #1, locking on some
gdal.Layer
operations:flush
,getExtent
,testCapability
,setSpatialFilter
,getSpatialFilter
and most scalar getters
- Fix a failing unit test on GDAL 1.x (no effect on the bindings)
- Fix another randomly failing unit test (no effect on the bindings)
- Fix a number of memory leaks (exception throwing paths in all
gdal.SpatialReference.from*
,gdal.DatasetBands.create
)
- GDAL 3.2.3
- Built-in vsicurl and major cloud services (Amazon, Google, Microsoft and Alibaba) support on all platforms
- Support async_hooks
- Support progress callbacks
- Support different algorithms when resampling on-the-fly
- Add
gdal.Geometry.fromGeoJsonBuffer(Async)()
, a completely parallelizable alternative togdal.Geometry.fromGeoJson()
for importing large GeoJSON geometries without blocking the event loop - Add
gdal.LayerFeatures.setAsync()
-
gdal.Geometry.fromGeoJson
now throws anError
on error instead of simply returning a null geometryPreviously all
gdal.Geometry.from*
functions exceptfromGeoJson
threw undocumented errors, now all of them, includingfromGeoJson
throw documented errors
- Fully unit-tested TypeScript definitions with many method signatures fixed
- Properties without setters are now correctly identified as being read-only in the TypeScript bindings
- Exported all previously internal
_options
types used for methods such asRasterBand.read
orreprojectImage
-
Add full TypeScript support
-
Complete reworking of the Geometry code adding support for CircularString, CompoundCurve and MultiCurve
-
Add JS iterators to all collections
-
Enable MapInfo TAB and MIF/MID
-
Fixed a typo in
gdal.SpatialReference
,isVectical()
method should beisVertical()
, the misspelled method will be kept until the next major release -
Expanded unit testing, code coverage is 81% up from 70%
- Process the unit testing suite with ASAN and fix all memory leaks
- Support Node.js 16
- Merge
[email protected]
- Build GDAL against the internal zlib in Node.js to avoid a conflict causing data corruption
- Enforce code coverage checks and re-enable all disabled unit tests
- Follow the Node.js callback error convention, returning
null
instead ofundefined
for theerror
argument on success and returning anError
object instead of a string on error - Lots of minor documentation fixes
First release of node-gdal-async
, forked from [email protected]
- Full support for asynchronous operations
- GDAL 3.2.2
- vsimem support
- MVT writing
- SQLite integration
- Packages built through Github Actions
- Packages published through Github Packages
- Numerous small bugfixes