What's New
v4.0 S2 (DGGS) | v4.0 GeoHash (DGGS) | v4.0 Quadkey (DGGS) |
v3.2 TypeScript | v3.0 WGS84 & Ellipsoid |
v4.0
Release Date: Oct 14, 2023.
- ESM (ECMAScript modules).
- Node.js v16, v18, v20.
- Typescript v5
gl-matrix
dependency removed.- New modules for working with DGGS (Discrete Global Grid System) math.
@math.gl/dggs-geohash
(NEW MODULE)
- New module with lightweight math for the GeoHash DGGS (Discrete Global Grid System).
@math.gl/dggs-quadkey
(NEW MODULE)
- New module with lightweight math for the quadkey DGGS (Discrete Global Grid System).
@math.gl/dggs-s2
(NEW MODULE)
- New module that contains a lightweight implementation of the S2 DGGS (Discrete Global Grid System).
@math.gl/core
config
is now truly global (stored onglobalThis
).gl-matrix
dependency removed.
@math.gl/types
- New
isTypedArray()
andisNumericArray()
utilities that check values and return properly restricted types to help write clean TypeScript code (e.g. avoids theDataView
case when usingArrayBuffer.isView()
).
v3.6
Release Date: June 10, 2022
Codebase has been fully converted to typescript. In general this means that users can expect the types exported from math.gl to be considerably improved, however in some function signatures are no longer supported. For details, consult the upgrade guide.
@math.gl/types
(NEW)
- New module that exports a few typescript types that e.g. generalize handling of numeric arrays.
@math.gl/polygon
(NEW)
- Includes earcut 2.2 (various bug fixes for edge cases)
- The
earcut
utility supports a new argumentplane
to calculate tesselation on alternative projection planes.
v3.5
Release Date: July 14, 2021
@math.gl/web-mercator
getBounds()
now supports an optionalfovy
parameter on theWebMercatorViewport
objectgetProjectionMatrix()
andgetProjectionParameters()
now accept afovy
parameter
@math.gl/polygon
- Improve performance of
getPolygonSignedArea()
by 3x - Addition of
earcut()
method for triangulating polygons
math.gl/culling
- New TypeScript interface
BoundingVolume
with common operations for bounding volumes (BoundingSphere
,AxisAlignedBoundingBox
,OrientedBoundingBox
). BoundingVolume.transform()
supported on all bounding volumes.
v3.4
Release Date: Jan 7, 2021
@math.gl/geoid
- New module
- Support for geoid-based earth gravity models.
- New
Geoid
class calculates the height offset (aka "undulation") from the pure ellipsoid for a given lng/lat (using spherical harmonics). Geoid
instances can be initialized with PGM-encoded earth gravity model coefficient files from standard sources.
@math.gl/polygon
- Support for flat arrays (e.g. polygons stored in typed arrays)
- Support for calling polygon utilities directly on arrays, without a
Polygon
instance. - New function
modifyPolygonWindingDirection()
to modify polygon array winding direction in-place.
v3.3
Release Date: Oct 9, 2020
@math.gl/proj4
- New module
- A new module supporting conversion between a wide range of geospatial coordinate reference systems specified e.g. using the OGC WKT-CRS specification.
v3.2
Release Date: July 18, 2020
Typescript
- Typescript type definitions (
.d.ts
files) are now exported for all math.gl modules.
@math.gl/polygon
- New module
- A new module offering geospatial polygon clipping functions.
v3.1
Release date: Dec 16, 2019
@math.gl/web-mercator
- WebMercator projection support is now available through the new
@math.gl/web-mercator
npm sub-module. - The
@math.gl/web-mercator
module is an evolution of the now archivedviewport-mercator-project
repository.
v3.0
Release date: Aug 8, 2019
The 3.0 release brings support for geospatial math, culling, performance improvements, and some API consolidation.
@math.gl/geospatial
A new module (developed in collaboration with the Cesium engineering team) providing WebGL-framework-independent geospatial math classes and algorithms:
- New class
Ellipsoid
and constantEllipsoid.WGS84
for working with WSG84 coordinates
@math.gl/culling
A new module (developed in collaboration with the Cesium engineering team) providing WebGL-framework-independent classesthat support geometric intersection calculations (primarily intended to support frustum culling operations):
- New class
AxisAlignedBoundingBox
- New class
OrientedBoundingBox
- New class
BoundingSphere
- New class
CullingVolume
@math.gl/core
Transform API Consolidation
The API for transformations (i.e. multiplying vectors with matrices or quaternions) has been extended and made more orthogonal:
- The
transform*
methods are now available on allVector
classes, in addition to on theMatrix
classes. Among other things, this enables transformations without usingMatrix
classes. - Naming consistency of transform methods across classes (
transform
,transformAsPoint
,transformAsVector
). - Alternative transform methods added to the
Vector
classes (transformByMatrix3
,transformByMatrix2
,transformByMatrix2x3
andtransformByQuaternion
). Simplifies using the most efficient transformation for the job.
Matrix classes
- New methods
Matrix*.setColumn()
andMatrix*.getColumn()
- New method
Matrix*.toString()
- Improved method:
Matrix4.frustum()
now supports infinitefar
plane (parity withMatrix4.perspective
, which already supported this).
Utility Functions
- New: global functions
toRadians
andtoDegrees
- New: global function
exactEqual
Performance Improvements (and Website Benchmarks)
A benchmarking example has been added to the website that makes it easy to assess the performance of the math.gl library on your own browser. The math.gl library has been carefully tuned based on these benchmarks and performance of the library has been significantly improved over version 2.x.
v2.3
Release date: Jan 29, 2019
- New class:
Matrix3
- New: Add
scale
factor support toMatrix3
andMatrix4
- Support quaternion to euler conversion
- Now uses the official
gl-matrix@3.0.0
package as dependency instead of forked gl-matrix packages.
v2.2
Release date: Sep 20, 2018
- Use
@babel/runtime
to reduce bundle size equals
function fix on arrays
v2.0
Release date: June 25, 2018
New Naming Convention for Experimental Exports
Experimental exports are now exported with a leading underscore (_), instead of as members of the experimental
namespace.
The change was made to make it possible for tree-shaking bundlers to remove unused experimental exports from applications.
v1.2
Release date: May 4, 2018
- New
lerp
utility - Experimental
Pose
class
v1.1
Release date: April 16, 2018
Matrix4 Improvements
Matrix4.orthographic()
- To simplify switching between perspective and orthographic views, math.gl now offers an additional method for creating orthographic projection matrix, that takes the same parameters as Matrix4.perspective()
, with the addition of one additional parameter, focalDistance
. See Matrix4.orthographic
({fovy, aspect, focalDistance, near, far})
Bundle Size Reduction
math.gl has been tuned to have approximately 20% smaller footprint when bundled in applications.
THREE.js Compatibility
math.gl classes now pass large parts of the THREE.js test suite, which should make it easier to reuse code written for the THREE.js math library.
v1.0
Release date: Jan 9, 2018
Initial release.