Skip to content

Releases: geoarrow/geoarrow-rs

py-v0.5.1

11 Aug 16:55
7dd4d5c
Compare
Choose a tag to compare

What's Changed

Full Changelog: py-v0.5.0...py-v0.5.1

rust-v0.5.0

07 Aug 21:11
722bfb7
Compare
Choose a tag to compare

Refer to CHANGELOG files in individual crates for cleaner summaries.

What's Changed

  • feat(geoarrow): Create geoarrow amalgam crate by @kylebarron in #1226
  • feat(geoarrow-geo): add intersects function by @kylebarron in #1227
  • feat(geodatafusion): ST_CoordDim and ST_NDims UDFs by @kylebarron in #1228
  • feat(geoarrow-array): Pass down arbitrary parameters in downcast_geoarrow_array by @kylebarron in #1230
  • feat(geodatafusion): ST_Area by @kylebarron in #1229
  • feat(geodatafusion): ST_Centroid by @kylebarron in #1231
  • feat(geodatafusion): Add ST_Intersects by @kylebarron in #1232
  • feat(geodatafusion): Implement topological relationships by @kylebarron in #1233
  • feat(geodatafusion): Add ST_X, ST_Y, ST_Z, and ST_M functions by @kylebarron in #1234
  • feat(flatgeobuf): Restore the FlatGeobuf reader by @kylebarron in #1057
  • feat: contains fn by @nuts-rice in #1235
  • feat(geodatafusion): Allow loading WKB from BinaryView columns by @ianthetechie in #1239
  • fix(geoarrow-geo): Fix compilation error when converting geo-traits to geo geometries by @kylebarron in #1241
  • feat(geodatafusion): Allow loading WKT from StringView columns by @kylebarron in #1242
  • feat(geodatafusion): Add ST_Distance by @kylebarron in #1243
  • docs: Note conventional commits for PRs in the contributing doc by @ianthetechie in #1244
  • feat(python): Add path property to GeoParquetFile by @kylebarron in #1246
  • chore(python): Prepare version 0.4.1 by @kylebarron in #1247
  • chore(geodatafusion): Upgrade to DataFusion 49.0.0 by @ianthetechie in #1248
  • feat(geodatafusion-flatgeobuf): FlatGeobuf FileSource by @kylebarron in #1236
  • feat(flatgeobuf): Remove wrappers around Fgb reader objects, simplify API by @kylebarron in #1250
  • feat(geodatafusion): ST_IsValid and ST_IsValidReason by @kylebarron in #1252
  • feat(geodatafusion): ST_Centroid and ST_ConvexHull by @kylebarron in #1253
  • feat(geodatafusion): ST_PointOnSurface by @kylebarron in #1254
  • feat(geodatafusion): ST_OrientedEnvelope by @kylebarron in #1255
  • feat(geodatafusion): Update ST_GeoHash, ST_Box2dFromGeoHash, ST_PointFromGeoHash from old code by @kylebarron in #1256
  • feat(geodatafusion): Add extrema functions for bounding boxes by @kylebarron in #1257
  • feat(geodatafusion): ST_Extent (first UDAF) by @kylebarron in #1258
  • fix(geodatafusion): Fix input field of ST_Extent by @kylebarron in #1259
  • feat(geoarrow-flatgeobuf): Improved schema inference & expose more from header by @kylebarron in #1260
  • chore(geoarrow-flatgeobuf): update flatgeobuf dep to 5.0 by @kylebarron in #1261
  • chore: Bump to arrow 56 by @kylebarron in #1262
  • perf(geoarrow-array): Cast Wkb/Wkt to WkbViewArray/WktViewArray without parsing/re-encoding geometries by @kylebarron in #1263
  • chore: Avoid using unwrap after try_push_usize by @kylebarron in #1264
  • chore(geoarrow-old): Remove more code from old, unused geoarrow crate by @kylebarron in #1265
  • feat(geoarrow-schema)!: Use GeoArrowError in TryFrom from geo_traits::Dimension by @kylebarron in #1266
  • feat(geoarrow-schema): Check inferred dimension against list size for interleaved point input by @kylebarron in #1267
  • feat(geoarrow-array): add shrink_to_fit methods to builders by @kylebarron in #1268
  • fix(geoarrow-array): Allow pushing Rect to MultiPolygonBuilder by @kylebarron in #1269
  • feat(geoarrow-geos, geoarrow-array): Remove unneeded todos by @kylebarron in #1270
  • fix(geoarrow-array)!: WkbBuilder should return result when appending geometries by @kylebarron in #1271
  • chore(geodatafusion): Use datafusion git pin on main to support Arrow 56 by @kylebarron in #1273
  • feat(geoarrow-schema)!: Better distinction of creating GeoArrowType depending on extension metadata by @kylebarron in #1275
  • refactor(geoarrow-flatgeobuf): Improved API for passing in or inferring schema by @kylebarron in #1272
  • fix(geoarrow-array): Fix num_bytes calculations for non-XY dimensions by @kylebarron in #1277
  • feat(geodatafusion): Add aliases for WKT and WKB functions by @kylebarron in #1278
  • feat(python, geoarrow-rust-io): Add read_flatgeobuf, read_flatgeobuf_async, write_flatgeobuf by @kylebarron in #1279
  • fix(geoarrow-python-io): Release GIL when blocking tokio runtime by @kylebarron in #1281
  • chore: fix for clippy 1.89 by @kylebarron in #1284
  • test(geoarrow-flatgeobuf): More tests for FlatGeobuf writer by @kylebarron in #1285
  • fix(geoarrow-flatgeobuf): Fix calculation of num_rows_remaining to allocate record batch builders correctly by @kylebarron in #1286
  • chore: Remove more old geoarrow crate code by @kylebarron in #1287
  • chore(python): Bump to 0.5.0-beta.1 by @kylebarron in #1288
  • docs: Use doc_auto_cfg feature by @kylebarron in #1289
  • feat(geoarrow-rust-core): Add get_type_id to infer geometry types from array by @kylebarron in #1280
  • fix(geoarrow-rust-io): Turn off flatgeobuf default features to fix building without openssl by @kylebarron in #1290
  • chore(python): Bump to 0.5.0-beta.2 by @kylebarron in #1291
  • fix(geodatafusion-flatgeobuf): make http-range-client dependency non-optional by @kylebarron in #1292
  • chore: Prepare 0.5 release by @kylebarron in #1293

New Contributors

Full Changelog: rust-v0.4.0-geoparquet...rust-v0.5.0

py-v0.5.0

07 Aug 21:11
f2d9c7f
Compare
Choose a tag to compare

What's Changed

  • chore(geodatafusion): Upgrade to DataFusion 49.0.0 by @ianthetechie in #1248
  • feat(geodatafusion-flatgeobuf): FlatGeobuf FileSource by @kylebarron in #1236
  • feat(flatgeobuf): Remove wrappers around Fgb reader objects, simplify API by @kylebarron in #1250
  • feat(geodatafusion): ST_IsValid and ST_IsValidReason by @kylebarron in #1252
  • feat(geodatafusion): ST_Centroid and ST_ConvexHull by @kylebarron in #1253
  • feat(geodatafusion): ST_PointOnSurface by @kylebarron in #1254
  • feat(geodatafusion): ST_OrientedEnvelope by @kylebarron in #1255
  • feat(geodatafusion): Update ST_GeoHash, ST_Box2dFromGeoHash, ST_PointFromGeoHash from old code by @kylebarron in #1256
  • feat(geodatafusion): Add extrema functions for bounding boxes by @kylebarron in #1257
  • feat(geodatafusion): ST_Extent (first UDAF) by @kylebarron in #1258
  • fix(geodatafusion): Fix input field of ST_Extent by @kylebarron in #1259
  • feat(geoarrow-flatgeobuf): Improved schema inference & expose more from header by @kylebarron in #1260
  • chore(geoarrow-flatgeobuf): update flatgeobuf dep to 5.0 by @kylebarron in #1261
  • chore: Bump to arrow 56 by @kylebarron in #1262
  • perf(geoarrow-array): Cast Wkb/Wkt to WkbViewArray/WktViewArray without parsing/re-encoding geometries by @kylebarron in #1263
  • chore: Avoid using unwrap after try_push_usize by @kylebarron in #1264
  • chore(geoarrow-old): Remove more code from old, unused geoarrow crate by @kylebarron in #1265
  • feat(geoarrow-schema)!: Use GeoArrowError in TryFrom from geo_traits::Dimension by @kylebarron in #1266
  • feat(geoarrow-schema): Check inferred dimension against list size for interleaved point input by @kylebarron in #1267
  • feat(geoarrow-array): add shrink_to_fit methods to builders by @kylebarron in #1268
  • fix(geoarrow-array): Allow pushing Rect to MultiPolygonBuilder by @kylebarron in #1269
  • feat(geoarrow-geos, geoarrow-array): Remove unneeded todos by @kylebarron in #1270
  • fix(geoarrow-array)!: WkbBuilder should return result when appending geometries by @kylebarron in #1271
  • chore(geodatafusion): Use datafusion git pin on main to support Arrow 56 by @kylebarron in #1273
  • feat(geoarrow-schema)!: Better distinction of creating GeoArrowType depending on extension metadata by @kylebarron in #1275
  • refactor(geoarrow-flatgeobuf): Improved API for passing in or inferring schema by @kylebarron in #1272
  • fix(geoarrow-array): Fix num_bytes calculations for non-XY dimensions by @kylebarron in #1277
  • feat(geodatafusion): Add aliases for WKT and WKB functions by @kylebarron in #1278
  • feat(python, geoarrow-rust-io): Add read_flatgeobuf, read_flatgeobuf_async, write_flatgeobuf by @kylebarron in #1279
  • fix(geoarrow-python-io): Release GIL when blocking tokio runtime by @kylebarron in #1281
  • chore: fix for clippy 1.89 by @kylebarron in #1284
  • test(geoarrow-flatgeobuf): More tests for FlatGeobuf writer by @kylebarron in #1285
  • fix(geoarrow-flatgeobuf): Fix calculation of num_rows_remaining to allocate record batch builders correctly by @kylebarron in #1286
  • chore: Remove more old geoarrow crate code by @kylebarron in #1287
  • chore(python): Bump to 0.5.0-beta.1 by @kylebarron in #1288
  • docs: Use doc_auto_cfg feature by @kylebarron in #1289
  • feat(geoarrow-rust-core): Add get_type_id to infer geometry types from array by @kylebarron in #1280
  • fix(geoarrow-rust-io): Turn off flatgeobuf default features to fix building without openssl by @kylebarron in #1290
  • chore(python): Bump to 0.5.0-beta.2 by @kylebarron in #1291
  • fix(geodatafusion-flatgeobuf): make http-range-client dependency non-optional by @kylebarron in #1292
  • chore: Prepare 0.5 release by @kylebarron in #1293
  • chore: Prepare Python 0.5.0 release by @kylebarron in #1294

Full Changelog: py-v0.4.1...py-v0.5.0

rust-v0.4.0-geoparquet

08 Jul 15:50
58ad7a9
Compare
Choose a tag to compare

This is the tag for the v0.4 release of the geoparquet crate, which was delayed compared to the 0.4 release of the other crates.

0.4.0 (geoparquet crate) - 2025-07-08

New standalone geoparquet crate!

New Features 🪄

  • GeoParquet reader refactor to avoid making duplicate wrappers of upstream structs #1089
    • Removes wrapper structs for builders. So we no longer have a GeoParquetRecordBatchReaderBuilder or a GeoParquetRecordBatchStreamBuilder. Users will use upstream parquet sync/async Builder structs directly. Means a significantly lower maintenance overhead here, and we don't need to do anything to support new upstream functionality.

    • Adds GeoParquetReaderBuilder trait that extends the upstream ArrowReaderBuilder. This allows users to implement a spatial RowFilter directly on an upstream builder instance. It also allows low-level access, so that if a user wanted a spatial filter plus something else, that would be doable.

    • Allows user to choose when the WKB column should be parsed to a native GeoArrow type or not in the geoarrow_schema method. (the parse_to_native parameter)

    • Keeps wrapper structs for readers. So we still have a GeoParquetRecordBatchReader and a GeoParquetRecordBatchStream, but these are very lightweight wrappers.

      The benefit of having these wrapper structs is that we can ensure GeoArrow metadata is always applied onto the emitted RecordBatches.

  • Refactor of GeoParquetReaderMetadata and GeoParquetDatasetMetadata #1172
    • Remove Option for the geospatial metadata of each GeoParquetReaderMetadata and GeoParquetDatasetMetadata. We assume that if the user is using the geoparquet crate, all files will have valid GeoParquet metadata.
  • Remove GeoParquet writer wrappers and just expose encoder #1214
    • Similar to how we refactored the read side (#1089, #1172), this PR changes the writing APIs of the geoparquet crate to only provide additive APIs to the upstream parquet crate. So this is now intended to be used in conjunction with the upstream parquet crate, not exclusively of it.
  • Add support for writing covering column to GeoParquet #1216
    • Add support for generating the a bounding box covering column while writing data.
    • Reconfigure writer properties generation. This takes inspiration from the upstream parquet properties generation, and has both column specific properties and default properties. So you can set the encoding for all columns but you can also override the encodings for specific columns.
  • Allow passing primary column to parquet writer #1159
  • Correctly set geometry types in GeoParquet metadata when writing #1218

py-v0.4.0

01 Jul 15:21
fcb2fd5
Compare
Choose a tag to compare

This release contains the Python bindings for a full rewrite of the GeoArrow Rust library.

New Features 🪄

  • Full support for the GeoArrow 0.2 specification, including all geometry array types and dimensions.
  • See documentation for GeoArray, GeoChunkedArray, GeoScalar, and GeometryType for more details.
  • Support for reading and writing GeoParquet 1.1 files, including spatial filtering, including support for reading from remote files.

rust-v0.4.0

28 May 15:37
a70f3b6
Compare
Choose a tag to compare

This release contains more or less a full rewrite of the GeoArrow Rust library.

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.

New Features 🪄

  • Full support for the GeoArrow 0.2 specification, including all geometry array types and dimensions. See documentation in geoarrow-array.
  • Native support for the upstream Arrow ExtensionType concept introduced in arrow 54.2. See documentation in geoarrow-schema.

Removed functionality 🔧

A significant amount of code from the previous geoarrow crate is not currently available in the refactored geoarrow-* crates.

Some of this is intentional. Similar to the upstream arrow crate, we no longer export a ChunkedArray concept, suggesting the user to use streaming concepts like iterators where possible.

Other functionality like format readers and writers is intended to be restored once stable, but additional work needs to take place before there's enough confidence in that code.

rust-v0.3.0

09 Sep 13:10
0c0af60
Compare
Choose a tag to compare

New Features 🪄

  • Preliminary support for 3D (XYZ) geometries
  • Support for reading and writing GeoParquet 1.1
    • Support for reading and writing GeoArrow (native) geometry encoding
    • Support for reading with spatial filtering
  • Both synchronous and asynchronous readers for GeoParquet. Readers will stream a RecordBatch at a time by default.
  • Accept RecordBatchReader as input to all
  • New support for geoarrow.box array (equivalent to Vec<Option<geo::Rect>>). RectArray is now laid out as a StructArray internally instead of a FixedSizeListArray.
  • Improved documentation

Performance Improvements 🏎️

Bug fixes 🐛

  • Don't serialize empty array metadata by @kylebarron in #678
  • Fixed MixedGeometryArray handling. Exported Arrow UnionArrays always have same data layout.
  • Support MapArrays when exporting to geozero by @kylebarron in #721

New Contributors

Full Changelog: rust-v0.2.0...rust-v0.3.0

py-v0.3.0

09 Sep 13:11
0c0af60
Compare
Choose a tag to compare

New Features 🪄

  • Remove geometry class specializations. Instead of PointArray, LineStringArray, etc, there's now just GeometryArray, ChunkedGeometryArray, and Geometry (a scalar).
  • Remove GeoTable class, in favor of external, generic arrow Table implementations, such as arro3.core.Table.
  • Move to slimmer, functional API. No more geometry methods on classes.
  • Don't materialize input data when writing to a file.
  • New GeometryType class for understanding the geometry type of an array or chunked array.
  • Split Python code into three modules: geoarrow-rust-core, geoarrow-rust-compute and geoarrow-rust-io.
  • Support for Pyodide Python environment
  • Support Python file objects for reading and writing GeoParquet

Bug fixes 🐛

Full Changelog: py-v0.2.0...py-v0.3.0

rust-v0.2.0

23 Mar 18:26
2089a01
Compare
Choose a tag to compare

New! ✨

New I/O support for reading and writing to geospatial formats

  • Asynchronous FlatGeobuf reader. This also supports passing a spatial filter.
  • Initial support for reading from PostGIS. Note that not all Postgres data types are supported yet. Create an issue if your query fails.
  • Reading and writing newline-delimited GeoJSON.
  • Asynchronous GeoParquet reader for reading from remote files. By @weiji14 in #493
  • Also new support for writing GeoParquet files.
  • Support for reading and writing Arrow IPC files.

New algorithms!

  • Explode a Table where each multi-geometry expands into multiple rows of single geometries.
  • total_bounds
  • frechet_distance for LineString similarity.
  • line_interpolate_point and line_locate_point for linear referencing.
  • polylabel for polygon labeling.

Improved usability:

New Contributors

Full Changelog: rust-v0.1.0...rust-v0.2.0

py-v0.2.0

23 Mar 18:25
ee42b3b
Compare
Choose a tag to compare

New! ✨

New I/O support for reading and writing to geospatial formats

Better interoperability with the Python geospatial ecosystem.

New algorithms!

Improved display of Python objects:

  • Scalars now display as SVG geometries inside Jupyter environments.
  • Tables, arrays, and chunked arrays implement __repr__ so that you can inspect data easily.

Improved usability:

  • PointArray.from_xy to simplify creating a point array from numpy arrays of coordinates.
  • Index into arrays and chunked arrays with square brackets. E.g. point_array[0] will access the first point in the array. Negative indexing is also supported, so point_array[-1] will get the last item in the array.
  • New top-level docs website.

New Contributors

Full Changelog: py-v0.1.0...py-v0.2.0