geoarrow-js
A minimal TypeScript implementation of GeoArrow building on top of Arrow JS.
It complements the work-in-progress geoarrow-wasm
, which will provide Rust-based operations on GeoArrow memory.
Only spatial operations that are implemented on binary representations of geometry will be added to this repo.
This means that geoarrow-js
will not, say, use algorithms from Turf, because that would require conversions to and from GeoJSON for the operation.
Refer to the algorithm
namespace in the docs.
@math.gl/polygon
)@math.gl/polygon
)@math.gl/polygon
, a fork of earcut
.)proj4
)Refer to the worker
namespace. Note that due to limitations in Arrow JS (as of v14) you must use preparePostMessage
before a call to structuredClone
or postMessage
, to ensure it can correctly be rehydrated on the worker.
import * as arrow from "apache-arrow";
import {
preparePostMessage,
rehydrateVector,
} from "@geoarrow/geoarrow-js/worker";
const originalVector = arrow.makeVector(new Int32Array([1, 2, 3]));
const [preparedVector, arrayBuffers] = preparePostMessage(originalVector);
// Here we use structuredClone to simulate a postMessage but on the main thread
const receivedVector = structuredClone(preparedVector, {
transfer: arrayBuffers,
});
const rehydratedVector = rehydrateVector(receivedVector);
geoarrow-js
is designed to be used seamlessly with WebAssembly-based GeoArrow operations, such as those in the JavaScript bindings of the Rust GeoArrow implementation, and with rendering libraries, such as deck.gl, with the help of @geoarrow/deck.gl-layers
.
For more background on my plans for GeoArrow ecosystem in JS and WebAssembly, refer to this thread.
Generated using TypeDoc