Skip to content

GeoArrow in Rust, Python, and JavaScript (WebAssembly) with vectorized geometry operations

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE_APACHE
MIT
LICENSE_MIT
Notifications You must be signed in to change notification settings

geoarrow/geoarrow-rs

Repository files navigation

geoarrow-rs

GitHub Workflow Status (CI) docs.rs Crates.io Crates.io

A Rust implementation of the GeoArrow specification and bindings to GeoRust algorithms for efficient spatial operations on GeoArrow memory.

This repository also includes Python bindings and JavaScript (WebAssembly) bindings, wrapping the GeoArrow memory layout and offering vectorized geometry operations.

Project Status

May 7, 2025

The geoarrow-rs project is about 3 years old. Early prototyping started inside the geopolars repo before deciding I needed something more general (not tied to Polars) and creating first geopolars/geoarrow and then lastly geoarrow/geoarrow-rs.

However despite its age, the geoarrow crate suffers from a couple issues. For one, it took a while to figure out the right abstractions. And learning Rust at the same time didn't help. The geoarrow crate is also too monolithic. Some parts of geoarrow are production ready, but there's decidedly a lot of code in geoarrow that is not production ready. And it's very much not clear which parts of geoarrow are production ready or not.

But I think geoarrow-rs has potential to form part of the core geospatial data engineering stack in Rust. And as part of that, we need a better delineation of which parts of the code are stable or not. As such, the geoarrow-rs repo is currently ongoing a large refactor from a single crate to a monorepo of smaller crates, each with a more well-defined scope.

As of May 2025, avoid using the geoarrow crate and instead use the newer crates with a smaller scope, like geoarrow-array.

These smaller crates are designed to mimic the upstream arrow crates as much as possible.

Stability

  • geoarrow-schema: Pretty stable
  • geoarrow-array: Pretty stable
  • geoarrow-cast: Pretty stable
  • geoarrow-flatgeobuf: Somewhat stable.
  • geoarrow-geoparquet: Somewhat stable. A decently large refactor is expected in #1089.
  • Other Rust crates: unstable
  • Python bindings: unstable
  • JS bindings: unstable

Documentation

Documentation Website

Examples

References