Releases: geoarrow/geoarrow-rs
rust-v0.6.2
What's Changed
- docs(geoarrow-geojson): Add some documents for geoarrow-geojson by @yutannihilation in #1388
- fix(geoarrow-array): Fix validation of sliced geometry arrays by @kylebarron in #1391
New Contributors
- @yutannihilation made their first contribution in #1388
Full Changelog: py-v0.6.0...rust-v0.6.2
py-v0.6.0
What's Changed
- docs: include constructor docs in the table of contents by @keewis in #1347
- fix(geoarrow-flatgeobuf): Fix FlatGeobuf reader with missing (null) properties by @kylebarron in #1356
- test: Fix Python WKT and WKT tests by @kylebarron in #1359
- fix: Preserve import errors from Arrow C Stream by @kylebarron in #1360
- feat: conversion method parameter for
from_shapelyby @keewis in #1348 - feat(python, geoarrow-rust-core): Implement
geometry_colby @kylebarron in #1381 - feat(python): Constructor for GeoChunkedArray by @kylebarron in #1383
- fix(python): Fix
__geo_interface__export for GeoScalar by @kylebarron in #1384 - feat(python): Constuctor for GeoArray by @kylebarron in #1385
New Contributors
Full Changelog: py-v0.5.3...py-v0.6.0
rust-v0.6.0
geoarrow-schema
- feat(geoarrow-schema): add
RectTypeas alias forBoxTypeby @kylebarron in #1310 - feat:
GeometryTypeIdtrait to infer GeoArrow type id for a type #1372
geoarrow-array
- fix(geoarrow-array): Fix persisting CRS when creating
GeometryArrayfromFieldby @kylebarron in #1326 - feat(geoarrow-array): Expose public accessors for coordinates from coord buffers by @kylebarron in #1332
- New
GeozeroRecordBatchWriterto allow for an iterative push-based API for writing to geozero-based data sinks. - perf(geoarrow-array): Improve perf of from_wkb/from_wkt when parsing to WKB/WKT output types #1313
- feat(geoarrow-array): WrapArray trait by @kylebarron in #1334
- feat: New API for WKB builder to push bytes/str directly by @kylebarron in #1354
- test(geoarrow-array): Add test that GeometryArray slicing survives arrow-rs roundtrip by @kylebarron in #1371
- feat(geoarrow-array): Implement child array access from GeometryArray #1373
- docs: Improve docs wording for GeoArrowArrayReader by @kylebarron in #1358
geoparquet
- Make
infer_geoarrow_schemapublic. #1251
geoarrow-csv
- feat(geoarrow-csv): Initial CSV reader, wrapping upstream arrow-csv by @kylebarron in #1050
- feat(geoarrow-csv): add CSV writer by @kylebarron in #1314
- docs: Geoarrow-csv docs by @nuts-rice in #1340
geoarrow-geojson
- feat(geoarrow-geojson): GeoJSON writer using arrow-json's new custom encoders by @kylebarron in #1040
geoarrow-flatgeobuf
- New
FlatGeobufWriter: an iterative push-based API for writing to FlatGeobuf files. - fix(geoarrow-flatgeobuf): Fix FlatGeobuf reader with missing (null) properties #1356
geoarrow-expr-geo
- chore(geoarrow-geo): Bump geo to 0.31 by @kylebarron in #1316
- feat(geoarrow-geo): Add support for ST_length by @notreallystatic in #1308
- feat: Rename
geoarrow-geotogeoarrow-expr-geoby @kylebarron in #1353
py-v0.5.3
What's Changed
- chore: Bump lockfiles to update
wkbdependency by @kylebarron in #1342 - chore: Prepare Python 0.5.3 release by @kylebarron in #1343
Full Changelog: py-v0.5.2...py-v0.5.3
py-v0.5.1
What's Changed
- ci: Build Python 3.13 wheels on Windows by @kylebarron in #1305
- chore: Prepare Python 0.5.1 release by @kylebarron in #1306
Full Changelog: py-v0.5.0...py-v0.5.1
rust-v0.5.0
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_arrayby @kylebarron in #1230 - feat(geodatafusion): ST_Area by @kylebarron in #1229
- feat(geodatafusion): ST_Centroid by @kylebarron in #1231
- feat(geodatafusion): Add
ST_Intersectsby @kylebarron in #1232 - feat(geodatafusion): Implement topological relationships by @kylebarron in #1233
- feat(geodatafusion): Add
ST_X,ST_Y,ST_Z, andST_Mfunctions by @kylebarron in #1234 - feat(flatgeobuf): Restore the
FlatGeobufreader 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
geogeometries 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
pathproperty 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
unwrapaftertry_push_usizeby @kylebarron in #1264 - chore(geoarrow-old): Remove more code from old, unused
geoarrowcrate 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_bytescalculations 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_flatgeobufby @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_remainingto allocate record batch builders correctly by @kylebarron in #1286 - chore: Remove more old
geoarrowcrate code by @kylebarron in #1287 - chore(python): Bump to 0.5.0-beta.1 by @kylebarron in #1288
- docs: Use
doc_auto_cfgfeature by @kylebarron in #1289 - feat(geoarrow-rust-core): Add
get_type_idto 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-clientdependency non-optional by @kylebarron in #1292 - chore: Prepare 0.5 release by @kylebarron in #1293
New Contributors
- @nuts-rice made their first contribution in #1235
- @ianthetechie made their first contribution in #1239
Full Changelog: rust-v0.4.0-geoparquet...rust-v0.5.0
py-v0.5.0
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
unwrapaftertry_push_usizeby @kylebarron in #1264 - chore(geoarrow-old): Remove more code from old, unused
geoarrowcrate 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_bytescalculations 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_flatgeobufby @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_remainingto allocate record batch builders correctly by @kylebarron in #1286 - chore: Remove more old
geoarrowcrate code by @kylebarron in #1287 - chore(python): Bump to 0.5.0-beta.1 by @kylebarron in #1288
- docs: Use
doc_auto_cfgfeature by @kylebarron in #1289 - feat(geoarrow-rust-core): Add
get_type_idto 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-clientdependency 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
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
GeoParquetRecordBatchReaderBuilderor aGeoParquetRecordBatchStreamBuilder. Users will use upstreamparquetsync/asyncBuilderstructs directly. Means a significantly lower maintenance overhead here, and we don't need to do anything to support new upstream functionality. -
Adds
GeoParquetReaderBuildertrait that extends the upstreamArrowReaderBuilder. This allows users to implement a spatialRowFilterdirectly 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_schemamethod. (theparse_to_nativeparameter) -
Keeps wrapper structs for readers. So we still have a
GeoParquetRecordBatchReaderand aGeoParquetRecordBatchStream, 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
Optionfor the geospatial metadata of eachGeoParquetReaderMetadataandGeoParquetDatasetMetadata. We assume that if the user is using thegeoparquetcrate, all files will have valid GeoParquet metadata.
- Remove
- Remove GeoParquet writer wrappers and just expose encoder #1214
- 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
parquetproperties 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
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, andGeometryTypefor 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
This release contains more or less a full rewrite of the GeoArrow Rust library.
The
geoarrow-rsproject is about 3 years old. Early prototyping started inside thegeopolarsrepo before deciding I needed something more general (not tied to Polars) and creating firstgeopolars/geoarrowand then lastlygeoarrow/geoarrow-rs.However despite its age, the
geoarrowcrate 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. Thegeoarrowcrate is also too monolithic. Some parts ofgeoarroware production ready, but there's decidedly a lot of code ingeoarrowthat is not production ready. And it's very much not clear which parts ofgeoarroware production ready or not.But I think
geoarrow-rshas 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, thegeoarrow-rsrepo 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
geoarrowcrate and instead use the newer crates with a smaller scope, likegeoarrow-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
ExtensionTypeconcept introduced in arrow54.2. See documentation ingeoarrow-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.